Таймер-счетчики — это специальные аппаратные регистры внутри микроконтроллера.









#define HTIM1_EVENT_500ms 500
volatile int32_t htim1_event_500ms_count = HTIM1_EVENT_500ms; //счетчик тиков таймера для полуения события раз в 500 мс
volatile uint8_t event_500ms_flag = 0; //флаг события - изначально событие не установленно
#define HTIM1_EVENT_5s 5000
volatile int32_t htim1_event_5s_count = HTIM1_EVENT_5s; //счетчик тиков таймера для полуения события раз в 5 с
volatile uint8_t event_5s_flag = 0; //флаг события - изначально событие не установленно
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{//прерывание из таймера TIM1 - настроен на обновление раз в 1 мс
//генерируем событие на 500 мс
htim1_event_500ms_count--; //уменьшаем счетчик для события
if(htim1_event_500ms_count==0)
{//счетчик достиг конуа - генерим событие
htim1_event_500ms_count = HTIM1_EVENT_500ms; //установим счетчик в изначальное состояние
event_500ms_flag = 1; //установим флаг события
//запуск действий по событию
//здесь должно быть "легкое действие", без затрагивания сложных модулей микроконтроллера
//мигание светодиодами
HAL_GPIO_TogglePin(GPIOB, LED5_Pin|LED4_Pin|LED3_Pin);
HAL_GPIO_TogglePin(GPIOA, LED2_Pin|LED1_Pin);
event_500ms_flag = 0; //сбросим флаг события - отработали
}

//генерируем событие на 5 секунд
htim1_event_5s_count--; //уменьшаем счетчик для события
if(htim1_event_5s_count==0)
{//счетчик достиг конуа - генерим событие
htim1_event_5s_count = HTIM1_EVENT_5s; //установим счетчик в изначальное состояние
event_5s_flag = 1; //установим флаг события
//этот флаг пойдет для "тяжелого" действия - отправки данных через UART
}
}
} 
while (1)
{
if(event_5s_flag==1)
{ //наступило событие для тяжелой обработки - передачи в UART
sprintf(str_out, "time event\r\n"); //строка послыки
Size_out = strlen(str_out); //размер строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
event_5s_flag=0; //сбросим флаг - обработали событие
}
} 
| Стартуем! |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Пройти еще раз |
| Пройти еще раз |
| Пройти еще раз |