Часть 2: Алгоритм выполнения лабораторной работы

Настройка портов ввода-вывода

Определение подключения светодиодов

Откройте файл «Схема.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++) {}

Цикл вставляется в то место программы, где требуется остановить на время её выполнение.