Настройка портов ввода-вывода
Определение подключения светодиодов
Откройте файл «Схема.pdf». Найдите там схемы подключения светодиодов (LED) и кнопки (USER & WAKE-UP Button) (стр. 6). Определите, к каким выводам микроконтроллера подключены светодиоды и кнопка.
Примечание: Порты микроконтроллера называются буквами по порядку латинского алфавита (A, B, C …). Каждый порт включает в себя 16 выводов, нумеруемых арабскими цифрами. Т.е. 12 вывод порта D будет полностью называться PORTD 12.
Включение тактирования
Вся внутренняя периферия микроконтроллера по-умолчанию не имеет тактирования и, как следствие, не работает. Чтобы она заработала, её надо затактировать, т.е. подать на неё тактовый сигнал. Для включения тактирования порта надо написать строку:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
Где х – буква, обозначающая порт.
Настройка порта ввода-вывода
Для настройки порта ввода-вывода надо заполнить структуру. Определяется структура следующим образом:
GPIO_InitTypeDef PORT_init_struct;
Где GPIO_InitTypeDef – тип структуры, PORT_init_struct – название. Название может быть произвольным с некоторыми ограничениями.
Структура имеет следующие параметры:
PORT_init_struct.GPIO_Pin – Определяет номер программируемого вывода.
Записывается так:
PORT_init_struct.GPIO_Pin = GPIO_Pin_x;
Где х – номер программируемого вывода (в рамках данного порта, от 0 до 15).
PORT_init_struct.GPIO_Mode – определяет режим работы вывода (выход или вход).
Записывается, например, так:
PORT_init_struct.GPIO_Mode = GPIO_Mode_OUT; //Вывод определяется
// как выход.
Или
PORT_init_struct.GPIO_Mode = GPIO_Mode_IN; //Вывод определяется
// как вход.
PORT_init_struct.GPIO_Speed – определяет скорость работы вывода.
Например, так:
PORT_init_struct.GPIO_Speed = GPIO_Speed_2MHz;
Остальные 2 параметра записываются следующим образом:
PORT_init_struct.GPIO_OType = GPIO_OType_PP;
PORT_init_struct.GPIO_PuPd = GPIO_PuPd_NOPULL;
После заполнения структура должна выглядеть примерно так:
PORT_init_struct.GPIO_Pin = GPIO_Pin_12;
PORT_init_struct.GPIO_Mode = GPIO_Mode_OUT;
PORT_init_struct.GPIO_Speed = GPIO_Speed_2MHz;
PORT_init_struct.GPIO_OType = GPIO_OType_PP;
PORT_init_struct.GPIO_PuPd = GPIO_PuPd_NOPULL;
Данную структуру надо записать в микроконтроллер с помощью строки:
GPIO_Init(GPIOx, &PORT_init_struct);
Где х – буква порта, вывод которого программируется.
Данная процедура повторяется для всех программируемых выводов.
Включение светодиода
Включение светодиода производится следующей строкой:
GPIO_SetBits(GPIOx, GPIO_Pin_y)
Где х – Буква порта. y – номер вывода, к которому подключен светодиод.
Выключение светодиода
Включение светодиода производится следующей строкой:
GPIO_ResetBits(GPIOx, GPIO_Pin_y)
Где х – Буква порта. y – номер вывода, к которому подключен светодиод.
Изменение состояния светодиода
Изменение состояния светодиода (т.е. включение, если светодиод был выключен и выключение, если светодиод был включен) производится следующей строкой:
GPIO_ToggleBits(GPIOx, GPIO_Pin_y)
Где х – Буква порта. y – номер вывода, к которому подключен светодиод.
Проверка состояния кнопки
Проверка состояния кнопки производится следующей строкой:
Button_state = GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_y)
Где х – Буква порта. y – номер вывода, к которому подключен светодиод.
Button_state – переменная, в которую записывается 0, если кнопка отжата и 1, если кнопка нажата. Переменную необходимо заранее объявить. Помните, что определение переменных производится в начале функции до использования первого оператора.
Организация задержки
Задержка по времени работы микроконтроллера производится следующим образом:
uint32_t i=0;
for (i=0;i<3000000;i++) {}
Цикл вставляется в то место программы, где требуется остановить на время её выполнение.