【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状态取反
		}	
	}  
}

五、实验现象

六、仿真实现


总结

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面包板扎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值