【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断

it2023-05-05  80

文章目录

0、前言1、CubeMX上的TIM2、软件设计


  下载工程文件:   https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151-c8-t6   MCU:STM32L151C8T6-A   IDE:MDK-Keil5   固件库:STM32Cube FW_L1 V1.10.1


0、前言

  关于STM32定时器的介绍在之前的文章中说过,可看这篇文章。本节实验将会实现200Ms通过USART1发送一次Hello World!。


1、CubeMX上的TIM

  串口配置部分可参考链接文章的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   时钟设置和工程管理设置参见系列文章中前三章的设置。

2、软件设计

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 */

▲ 实现效果图
最新回复(0)