STM32. Работа с портами средствами библиотеки HAL.

Наш телеграмм канал

Оригинал статьи: перейти

работы с портами в библиотеке 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 – читает состояние порта.

Полностью функция имеет вид:

где:

GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);

GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта).

Пример:

HAL_GPIO_WritePin – устанавливает высокий или низкий уровень в порт

Имеет вид:

где:

GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);

GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);

GPIO_PinState – устанавливаемое состояние порта. Может быть:

– GPIO_PIN_RESET: низкий уровень;

– GPIO_PIN_SET: высокий уровень.

Пример:

 

HAL_GPIO_TogglePin – переключает состояние порта на противоположное

Имеет вид:

где:

GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);

GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);

Пример:

 

HAL_GPIO_LockPin – блокирует регистры конфигурации порта.

Имеет вид:

де:

GPIOx – указывает на используемый порт (может быть от A до G в зависимости от используемого микроконтроллера);

GPIO_Pin – бит (номер вывода) порта (может принимать значение от 0 до 15, ALL – все выводы порта);

Примечание: HAL_GPIO_LockPin позволяет заблокировать конкретный пин порта и не допустить изменения его состояния до следующей перезагрузки или сброса.

Пример:

 

HAL_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);

 

HAL_GPIO_DeInit

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

Добавить комментарий