PROGCONT.RU

Форма входа







Регистрация Вход/

Пример Пример Пример


STM32F101-107 HAL GPIO настройка и использование выводов портов контроллера.

STM32F101-107 GPIO(главные пины вывода и ввода) являются нервными окончаниями контролера с помощь которых можно контролировать те или иные внешние события, используются как входы так, выходы и для работы периферии контроллера.

Схема выводов.

NO

Функции настройки и работы с GPIO.


GPIO_InitTypeDef- объявление структуры для настройки вывода.

HAL_GPIO_Init( GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)- функция настройки вывода.

HAL_GPIO_DeInit( GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)- удаление настройки вывода.

__HAL_RCC_GPIOx_CLK_ENABLE()- функции для управления тактирование порта.

HAL_GPIO_ReadPin( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)- функция чтения вывода.

HAL_GPIO_WritePin( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)- функция изменения состояние вывода.

HAL_GPIO_TogglePin( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)- функция меняет состояние вывода на противоположное.

HAL_GPIO_LockPin( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)- функция блокирует изменение настроек вывода.


Настраивается вывод следующей структурой.

GPIO_InitTypeDef; Настраиваемые параметры структуры: /*Выбор вывода*/ .Pin = GPIO_PIN_0 GPIO_PIN_1 GPIO_PIN_2 GPIO_PIN_3 GPIO_PIN_4 GPIO_PIN_5 GPIO_PIN_6 GPIO_PIN_7 GPIO_PIN_8 GPIO_PIN_9 GPIO_PIN_10 GPIO_PIN_11 GPIO_PIN_12 GPIO_PIN_13 GPIO_PIN_14 GPIO_PIN_15 GPIO_PIN_All /*Как будет работать вывод*/ .Mode = GPIO_MODE_INPUT как вход GPIO_MODE_OUTPUT_PP как выход, подключается к питанию и к земле GPIO_MODE_OUTPUT_OD как выход, подключается только к земле GPIO_MODE_AF_PP альтернативная функция, подключается к питанию и к земле GPIO_MODE_AF_OD альтернативная функция, подключается только к земле GPIO_MODE_AF_INPUT альтернативная функция, работает на вход /*Если вывод работает на вход*/ .Pull = GPIO_NOPULL подтягивающие резисторы отключены GPIO_PULLUP подтягивающий резистор подключен к питанию GPIO_PULLDOWN подтягивающий резистор подключен к земле /*Выбор скорости переключения вывода*/ .Speed = GPIO_SPEED_FREQ_LOW вывод работает до 2 MHz GPIO_SPEED_FREQ_MEDIUM вывод работает до 10 MHz GPIO_SPEED_FREQ_HIGH вывод работает до 50 MHz /*Пример настройки*/ GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;


Функция настраивает вывод.

HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); /*Принимают название порта пина *GPIOx*/ GPIOA GPIOB GPIOC GPIOD GPIOE /*и адрес структуры настройки *GPIO_Init*/ /*Пример*/ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


Функция сбрасывает настройки вывода, возвращает в начальное состояние.

HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); функция принимает те же параметры, что и HAL_GPIO_Init /*Пример*/ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_13);


Для активации работы порта нужного вывода необходимо включить его тактирование следующей функцией.

__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE();

Функции для управления выводом.

Следующими функциями вы сможете читать состояние вывода если он работает как вход и изменять его состояние если настроен как выход а также блокировка вывода.


Функции для чтения состояния

HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); принимает название порта и вывода /*Пример проверки на отключенное состояние*/ if(HAL_GPIO_ReadPin( GPIOA, GPIO_PIN_0)==GPIO_PIN_RESET){ } /*Пример проверки на включенное состояние*/ if(HAL_GPIO_ReadPin( GPIOA, GPIO_PIN_0)==GPIO_PIN_SET){ }


Функция меняет состояние вывода

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); Принимает название порта, название вывода устанавливаемое состояние Это GPIO_PIN_RESET если отключаем вывод или GPIO_PIN_SET включаем /*Пример для включения вывода*/ HAL_GPIO_WritePin( GPIOC, GPIO_PIN_13, GPIO_PIN_SET); /*Пример для отключения вывода*/ HAL_GPIO_WritePin( GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);


Функция меняет состояние вывода на противоположное

HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); Функция принимает название порта и вывода /*Пример*/ HAL_GPIO_TogglePin( GPIOC, GPIO_PIN_13);


Функция блокирует изменение настроек вывода, изменить будет можно только после сброса контроллера.

HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); функция принимает название порта и вывода /*Пример*/ HAL_GPIO_LockPin(GPIOC, GPIO_PIN_13);

Пример программы.

В программе настраиваем выводы для мигания светодиода и для сканирования состояния вывода.

/*ProgCont.ru*/ #include "main.h" int main(void) { HAL_Init(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); while (1) { if(HAL_GPIO_ReadPin( GPIOA, GPIO_PIN_0)==GPIO_PIN_RESET){ HAL_Delay(100); HAL_GPIO_TogglePin( GPIOC, GPIO_PIN_13); }else{HAL_GPIO_WritePin( GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);} } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { } #endif /* USE_FULL_ASSERT */

Настройка вывода в STM32CubeIDE используя STM32CubeMX.

Если вы используете STM32CubeIDE то можно использовать графический редактор STM32CubeMX, для этого открываем файл проекта как на рисунке

NO

Теперь выбираем нужный вывод

NO

Выбираем функцию вывода

NO

Настраиваем вывод жмём на System Core(с лева) и выбираем нужную конфигурацию вывода

NO

Комментариев нет  Только зарегистрированные пользователи могут оставлять комментарии!