下载工程文件: https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151-c8-t6 MCU:STM32L151C8T6-A IDE:MDK-Keil5 固件库:STM32Cube FW_L1 V1.10.1
关于STM32定时器的介绍在之前的文章中说过,可看这篇文章。本节实验将会实现200Ms通过USART1发送一次Hello World!。
串口配置部分可参考链接文章的2.1部分。
设置定时器中断周期为20ms。
▲ CubeMX定时器配置定时器时钟选择内部时钟 Clock Source(时钟来源): 1:Internal Clock 内部时钟 2:ETR2 外部触发输入(ETR)(仅适用TIM2,3,4) Prtscaler(定时器分频系数) : 32-1 Counter Mode(计数模式) Up(向上计数模式) Counter Period(自动重装载值) : 20000 CKD(时钟分频因子) :No Division 不分频 auto-reload-preload(自动重装载) : Enable 使能 其他保持默认即可
定时器溢出时间计算公式: T o u t = ( ( a r r + 1 ) ∗ ( p s c + 1 ) ) / T c l k T_{out}=((arr+1)\ast(psc+1))/Tclk Tout=((arr+1)∗(psc+1))/Tclk 时钟设置和工程管理设置参见系列文章中前三章的设置。
main.c
/* USER CODE BEGIN 2 */ /*使能定时器2中断*/ HAL_TIM_Base_Start_IT(&htim2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(Flag200Ms) { printf("Hello World!"); Flag200Ms = 0; } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */中断回调函数: TIM.c
/* USER CODE BEGIN 1 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint8_t TIM_Count = 0; if(TIM_Count >= 10) { TIM_Count = 0; Flag200Ms = 1; } else { TIM_Count++; } } /* USER CODE END 1 */ ▲ 实现效果图