【STM32 HAL Proteus】系列学习教程—定时器(TIM2)详解
实现目标
1、STM32 基于HAL库定时器的使用;
2、加强学习GPIO取反函数的学习。
3、具体实现:利用定时器2定时1mS,定时器中断回调函数里计数1000次,也就是1S。最后利用1S定时实现LED1 1S亮,1S灭。
一、定时器概述?
1、生活中哪些场景会用到定时器?
许多家用电器都配备了定时器功能,如电饭煲、热水器、空调等。通过设定开始和结束时间,用户可以确保在需要的时候这些设备能够自动开启或关闭,从而节省能源和电费。例如,晚上临睡前可以设定好电饭煲的定时功能,第二天早上就能吃到热腾腾的早餐。
2、STM32F1定时器
STM32定时器种类多,功能强大,这些定时器完全独立、互不干扰,可以同步操作。
3、 STM32定时器分类比较表
STM32定时器分类比较表
4、 STM32定时器的主要功能
定时器的主要功能
二、原理图设计
三、STM32CubeMX 配置
1.定时器时钟挂载
定时器TIM2~TIM7挂接在APB1上 ,定时器TIM1和TIM8挂接在APB2上。在计算定时器计时参数时要相应的要调节他们时钟频率。注:此步默认不用修改。
2.定时器2及LED的配置
定时器的定时时间主要取决于定时周期和预分频因子,计算公式为: 定时时间=(ARR+1)×(预分频值PSC+1)/输入时钟频率 或 T=(TIM_Period +1)*(TIM_Prescaler +1)/TIMxCLK 这里ARR+1是因为计数器都是从0开始计数的。
例如:使用通用定时器定时1ms。假设系统时钟为8MHz,通用定时器时钟TIMxCLK为8MHz,设置如下: 预分频系数PSC=8-1; ARR=1000-1; 则,定时时间=8×1000/8000000=1ms。
3.开启定时器2中断
四、程序设计
1.打开定时器2中断
开启定时中断函数: HAL_TIM_Base_Start_IT(&htimx); //x 为要开启的定时器号,下面代码为开启定时器2中断,x= 2.
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);//开启定时器2中断
/* USER CODE END 2 */
2.重写中断回调函数
先在main.c 文件 前面定义一个全局变量: int ms = 0 ; 中断回调函数内尽量少放我们处理的代码。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == htim2.Instance) //1mS进入1次中断
{
//书写我们想要执行的功能
ms++;//毫秒 ++
if ( ms >= 1000)//1s 到
{
ms = 0;
HAL_GPIO_TogglePin(GPIOB, LED1_Pin); //LED1状态取反
}
}
}
五、实验现象
六、仿真实现
总结
作者:面包板扎