运行环境
- Windows10
- STM32CubeMX___Version 6.1.0
- Keil5(MDK5)___Version 5.27
简介
本例程主要用一个_bool类型变量,一个普通的stm32定时器,实现一个简单的时间片任务管理功能,有时候有些任务其实并不需要一个很大的任务系统,尤其是一些竞赛当中,用任务系统来做,可能会增加其工作量,尤其是对初学者。
STM32CubeMx配置
- 选择外部晶振
- DEBUG选项选择"Serial Wire"(4线烧录,CLK,DIO,VCC,GND)
- 烧录用的CLK和DIO
- 开启一个普通计数器,这里的计时为(1ms)
- 定时1ms的计算公式:1.定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 72 /1000 = 1000Hz;2.定时时间T = 1 / f 则: 1s / 1000Hz = 1000 000us / 1000Hz = 1000us =1ms。
- 打开定时器中断
- 在main中定义变量(此处在it.c中以及定义)
/* USER CODE BEGIN 0 */
extern _Bool key_flag;
/* USER CODE END 0 */
- 在stm32f1xx_it.c中定义
-
/* USER CODE BEGIN EV */ _Bool key_flag=0; /* USER CODE END EV */
- TIM6中断处理函数
-
void TIM6_IRQHandler(void) { /* USER CODE BEGIN TIM6_IRQn 0 */ /* USER CODE END TIM6_IRQn 0 */ HAL_TIM_IRQHandler(&htim6); /* USER CODE BEGIN TIM6_IRQn 1 */ static uint16_t key_count=0; key_count++; if(key_count==10) { key_count=0; key_flag=1; } /* USER CODE END TIM6_IRQn 1 */ }
- mian函数while(1)中判断(每10ms调用一次)
-
while (1) { if(key_flag) { } }