STM32定时器的配置-STM32电控学习笔记07

STM32中断&定时器-STM32电控学习笔记07

day7:2022/9/25

【中断回调函数实现LED闪烁】

上一篇帖子我们大致学习了中断和定时器的概念,这一篇就来尝试一下利用中断回调函数来实现LED灯的闪烁。
首先我们按照手册47-53页指示配置好STM32CubeMx(可以之间打开先前点灯时的配置文件然后直接修改,就不用重复前面一大堆配置了)通过配置 TIM1 的分频值和重载值,++使得 TIM1的中断以 500ms 的周期被触发,因此中断回调函数也是以500ms为周期被调用++。
从流程图上看,我们使用STM32CubeMx生成的配置文件已经把前面几步搞定了,是不是很tnd方便(CubeMx yyds),我们前面配置的500ms,即定时器计算每过500ms就执行一次中断函数里的内容,执行完后就继续计时。
接下来打开我们的main.c文件,为了使定时器开始工作,需要调用 HAL 库提供的函数。在int main()函数内输入代码:HAL_TIM_Base_Start_IT(&htim1);
接着,我们要开始写中断回调函数,但是这个函数我们不在int main()函数里写,而是写在其前面

void LED_toggle(void);
    /*
	此次我们定义一个函数,该函数的作用是将LED灯引脚的电平翻转
    */
void LED_toggle(void)
{
	//然后在定义的函数下写上需要的翻转电平代码
    HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_10);
    HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_11);
    HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_12);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	  /*
		htim:定时器指针
	  */
    if(htim == &htim1)
    {
     /*即每过我们设置的500ms时间,系统自动执行一次中断函数,调用LED翻转电平函数,如果你想在中断期间做任何其他事也可以在这个函数里写。
	*/
      LED_toggle();
    }
}

将代码烧录进入单片机可以发现,LED灯以500ms为半周期闪烁,这样我们就实现中断回调函数闪烁LED灯的功能了,中断在我们平时调试机器人时会用到,但是并不会用的很深,只有到后期对电机要求精准把控时才需要多一些操作,因此我们会用就行,够用就行。

【定时器配置】
通过手册我们可以很容易的配置一个500ms为周期的定时器,那么如果我们想要改变定时器时间,例如需要100ms、5000ms、2333ms该怎么配置呢,那么就要在CubeMx中修改分频值和重载值(这俩玩意要搞懂还是有点磨人的,有兴趣的可以去研究研究,但是我没兴趣doge,会用就行)只要利用接下来这个公式:

Tout = ((arr + 1)*(psc + 1))/ Tclk ;

即:定时器溢出时间 = ((重装载值 + 1)*(分频系数 + 1))/ 频率

高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线
通用定时器timer2timer5,通用定时器timer12、timer14以及基本定时器timer6,timer7的时钟来源是APB1总线

由于我们配置的是TIM1的定时器,而TIM1是挂载在 APB2 总线上的,因此我们的芯片配置时钟工作频率Tclk = 168Mhz;
在这里插入图片描述

对于APB2的总线,我们知道其时钟频率是168MHZ,因此我们的预分频值一般设置为16799,然后套公式计算出重装载值即可,例如我们要配置一个1000ms 的定时器,那么频率就应该为1HZ,那么就有公式

168000000 / (16799 + 1) * (arr + 1) = 1;

计算出重装载值为:9999
借此公式我们即可配置我们需要的定时器。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SZTU_ELIAS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值