简介
基于前面几篇, 增加定时器方面内容, LED定时闪动, 串口定时打印;
如前几篇所说, 使用BearPi Std板进行学习测试, 本例
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
定时器: TIM2/预分频(2000-1)/计数周期(10000-1)/定时1s/APB1 Time Clock设置20MHz
步骤
-
基于前面的项目, 创建STM32CubeMX项目
BearPi Std 板从入门到放弃 - 引气入体篇(5)(printf打印到串口) -
新增TIM2的定时器配置
配置TIM2\内部中断\预分频值(2000-1)\计数周期(10000-1)
开启TIM2 定时器中断
配置APB1时钟输出20MHz
-
生成项目BearPi_TIM2
-
加入用户代码
int main(void)
{
...
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2); // 开启定时器中断
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(8000);
}
/* USER CODE END 3 */
}
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(USER_LED_GPIO_Port, USER_LED_Pin); // LED等亮灭
printf("Are You OK!!!\r\n"); // 打印信息到串口
}
/* USER CODE END 4 */
前言后说
关于时间的计算公式如下 :
Tout = ((arr+1)*(psc+1))/Tclk
Tclk为定时器的输入时钟频率
Tout则为定时器溢出时间
arr为计数周期
psc为预分频器的值
所以本例中1s的定时中断 就是
1s = ((10000-1+1) * (2000-1+1)) / 20MHz
BearPI_TIM2 完整工程代码
参考:
定时器计算方法