STM32Cube学习笔记-定时器中断

    今天聊一聊使用STM32Cube MX配置STM32F429IGT6的定时器中断。

    定时器中断是常用的一个功能,主要是希望自己的程序经过一定的时间执行一段代码。定时器一般和PWM联系比较紧密,本文不介绍PWM的内容。STM32F429系列的定时器有很多,基本定时器、一般定时器和高级定时器,本文介绍的是基本定时器,使用的定时器是TIM2。具体哪个是基本的哪个是高级的哪个是一般的可以去查相关手册。

    硬件:野火STM32F429挑战者开发板;软件:STM32Cube MX、Keil 5、串口调试助手。

    今天要完成的目标:希望LED灯每0.5s闪烁一次。打开STM32Cube MX软件进行配置。(本程序是在《STM32Cube学习笔记-ADC_DMA调试》的基础上进行配置的);

    我们先去找定时器配置所在的位置。

在左边的Timers中选择TIM2,在TIM2 Mode and Configuration中的Clock Source中选择internal Clock,使用的是内部时钟。那么去看一下时钟频率,打开时钟树;

APB1的定时器时钟为90MHz,APB2的定时器时钟为180MHz。我们去查阅相关资料看一下定时器时钟2挂接在什么地方。

    可以看这张图,TIM2最大定时器时钟为90MHz;

我们配置分频系数为900,那么90 000 000/900 = 100 000;

那么定时一次为1/100 000 = 0.00001;

将计数周期设定为100,0.00001*100 = 0.001s,设计为向上计数,就是说,从0开始计数,一直到99计数100次,然后重新循环计数,自动重载周期重载使能。

点击NVIC Setting使能中断,然后生成代码,分析一下代码。

在main函数的初始化中多了一个MX_TIM2_Init();(再次说明,本程序是在《STM32Cube学习笔记-ADC_DMA调试》基础上继续开发的)

打开stm32f4xx_it.c文件,找到 void TIM2_IRQHandler(void),然后找到HAL_TIM_IRQHandler()函数。

在HAL_TIM_IRQHandler中找到了很多的回调函数,看一下主要的作用,/*Capture compare 1 event*/,比较1发生的事情。可以猜想到是使用到PWM了。

我们可以找到

这个是定时器更新的时候中断了。去找HAL_TIM_PeriodElapsedCallback();

是以__weak 引导的函数,可以直接在main文件中定义这个函数,编写自己的程序。

定义了一个计数器,因为定时器的中断周期是1ms,那么当计数器达到1000时就让计数器清零,然后让LED引脚跳变一次。

对了在写好这个程序后,别忘了在初始化的时候使能定时器中断,不然还是不行。

编译,下载,可以看到LED灯开始按照预定的思路开始闪烁了。

如果想知道定时的时间准不准,可以在定时器中断中加一个CAN发送的函数,然后使用CAN test测试一下发送的周期。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值