PROGCONT.RU

Форма входа







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

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


STM32F103C8 IAR билиотека HAL простая программа миганием светодиодом продолжение.

Ссылка на видео в YouTubeВ этом проекте я покажу как реализовать включение и выключение мигающего светодиода для этого будем использовать штатную кнопку отладочной платы STM32_Smart v2.0 которая подведена к контроллеру порт GPIOA вывод 0.

/*ProgCont.ru*/ #include "main.h" void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); __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); /*Включаем тактирование порта A*/ __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);} } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } void Error_Handler(void) { __disable_irq(); while (1) { } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { } #endif /* USE_FULL_ASSERT */

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