Оригинал статьи: перейти…
работы с портами в библиотеке HAL используются следующие функции:
HAL_GPIO_ReadPin | HAL_GPIO_TogglePin |
HAL_GPIO_WritePin | HAL_GPIO_LockPin |
HAL_GPIO_EXTI_IRQHandler | HAL_GPIO_EXTI_Callback |
HAL_GPIO_Init | HAL_GPIO_DeInit |
Функции управляют портами ввода вывода: задают конфигурацию, считывают и устанавливают состояния выводов.
Перед вызовом функций необходимо включить тактирование нужных портов командой __HAL_RCC_GPIOx_CLK_ENABLE().
__HAL_RCC_GPIOB_CLK_ENABLE(); // включение порта В
Две последние в расчет не берем – они касаются прерываний, о них я напишу позже.
HAL_GPIO_ReadPin – читает состояние порта.
Полностью функция имеет вид:
1 |
GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) |
где:
GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);
GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта).
Пример:
1 |
temp = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0); /*Считываем значение нулевого вывода порта B в переменную temp*/ |
HAL_GPIO_WritePin – устанавливает высокий или низкий уровень в порт
Имеет вид:
1 |
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) |
где:
GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);
GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);
GPIO_PinState – устанавливаемое состояние порта. Может быть:
– GPIO_PIN_RESET: низкий уровень;
– GPIO_PIN_SET: высокий уровень.
Пример:
1 |
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);/*Устанавливаем высокий уровеньна выводе 5 порта А*/ |
HAL_GPIO_TogglePin – переключает состояние порта на противоположное
Имеет вид:
1 |
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) |
где:
GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);
GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);
Пример:
1 |
HAL_GPIO_ TogglePin (GPIOB, GPIO_PIN_1);/*Переключаем состояние первого вывода порта А на противоположное*/ |
HAL_GPIO_LockPin – блокирует регистры конфигурации порта.
Имеет вид:
1 |
HAL_StatusTypeDef HAL_GPIO_LockPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) |
де:
GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);
GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);
Примечание: HAL_GPIO_LockPin позволяет заблокировать конкретный пин порта и не допустить изменения его состояния до следующей перезагрузки или сброса.
Пример:
1 |
HAL_GPIO_ LockPin (GPIOB, GPIO_PIN_1);// Заблокируем пин 1 порта В. |
1 |
void HAL_GPIO_Init (GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init) |
Инициализация портов ввода-вывода.
- GPIOx – выбор порта (GPIOA, GPIOB, GPIOC … ).
- GPIO_Init – указатель на структуру параметров инициализации типа GPIO_InitTypeDef.
Возвращаемого значения нет.
Структура инициализации.
typedef struct
{
uint32_t Pin; // номер вывода
uint32_t Mode; // режим
uint32_t Pull; // режим подтягивающего резистора
uint32_t Speed; // скорость переключение выходного сигнала
} GPIO_InitTypeDef;
- Pin – номер вывода. Может принимать значения:
- GPIO_PIN_0
- . . . . . . . . . . . .
- GPIO_PIN_15
- GPIO_PIN_All
- GPIO_PIN_MASK
Можно использовать маску битов ( например: GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_14) или все выводы сразу GPIO_PIN_MASK.
- Mode – режим вывода.
- GPIO_MODE_INPUT – свободный вход, брошенный в воздухе.
- GPIO_MODE_OUTPUT_PP – активный выход (Push Pull).
- GPIO_MODE_OUTPUT_OD – выход с общим стоком.
- GPIO_MODE_AF_PP – активный выход альтернативной функции.
- GPIO_MODE_AF_OD – выход с общим стоком альтернативной функции.
- GPIO_MODE_AF_INPUT – вход альтернативной функции.
- GPIO_MODE_ANALOG – аналоговый вход.
- GPIO_MODE_IT_RISING – внешнее прерывание по положительному фронту.
- GPIO_MODE_IT_FALLING – внешнее прерывание по отрицательному фронту.
- GPIO_MODE_IT_RISING_FALLING – внешнее прерывание по положительному/отрицательному фронту.
- GPIO_MODE_EVT_RISING – внешнее событие по положительному фронту.
- GPIO_MODE_EVT_FALLING – внешнее событие по отрицательному фронту.
- GPIO_MODE_EVT_RISING_FALLING -внешнее событие по положительному/отрицательному фронту.
- Pull – режим подтягивающего резистора.
- GPIO_NOPULL – резистор отключен.
- GPIO_PULLUP – резистор подключен к шине питания.
- GPIO_PULLDOWN – резистор подключен к земле.
- Speed – максимальное быстродействие переключения выходного сигнала.
- GPIO_SPEED_FREQ_LOW – низкая.
- GPIO_SPEED_FREQ_MEDIUM – средняя.
- GPIO_SPEED_FREQ_HIGH – высокая.
Пример инициализации вывода.
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* конфигурация вывода PC13 на активный выход */
GPIO_InitStruct.Pin = GPIO_PIN_13; // вывод
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // режим – выход
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; // средняя скорость
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
void HAL_GPIO_DeInit (GPIO_TypeDef * GPIOx, uint32_t GPIO_Pin)
Функция деинициализации вывода. Устанавливает конфигурацию вывода, как при сбросе микроконтроллера.
- GPIOx – выбор порта (GPIOA, GPIOB, GPIOC … ).
- Pin – номер вывода (GPIO_PIN_0 … GPIO_PIN_15).
Возвращаемого значения нет.
Пример.
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_13); // сброс конфигурации PC13