电子产业一站式赋能平台

PCB联盟网

搜索
查看: 202|回复: 0
收起左侧

STM32CubeMx之TIM定时中断

[复制链接]

482

主题

482

帖子

2746

积分

三级会员

Rank: 3Rank: 3

积分
2746
发表于 2020-3-8 22:34:00 | 显示全部楼层 |阅读模式
STM32有多个定时器可供使用,且有多种使用方式,包括普通定时、PWM输出、输入捕获、触发ADC等。本篇文章主要介绍普通定时中断的使用。前期准备:
  •     STM32硬件电路板及仿真器(以STM32F072C8单片机为例)
  •     Keil v5以上版本(MDK-ARM)
    首先新建工程后,配置系统时钟为48MHz(参考上一篇GPIO使用中的配置步骤)。以TIM1为例,使能TIM1的时钟源为Internal Clock(即48MHz系统时钟),设置定时器的周期、分频系数等。假设定时周期为100ms,则设置参数如下图。

    nthuqd2gflp64048946639.jpg

    nthuqd2gflp64048946639.jpg

    其中:预分频值,取值范围为0~65535。计数模式可以是 向上计数、向下计数、中间对齐计数等。
    计数周期,对于16位定时器,取值范围为0~65535。时钟分频因子, 可以选择不分频、二分频或四分频。 重复计数次数,表示定时器计数值达到计数周期n次后才产生中断。自动重装,设置为Enable或Disable。触发输出部分本节用不到,暂不做说明。定时(溢出)周期 = (预分频值+1)*(计数周期+1)*分频因子*(重复计数次数+1) / 系统时钟48MHz,单位为秒。
    上图中(999+1)*(4799+1)*1*1 / 48MHz = 0.1秒,即100ms。定时器设置完成后,需要在NVIC Setting中打开定时器的溢出中断,TIM1作为高级定时器,其捕获比较中断(capture compare interrupt)和其它中断是独立的,而其它的普通定时器只有统一的一个中断源。这里只用到了溢出(update)中断,所以只打开溢出中断即可。

    1uzrcnkoqq464048946739.png

    1uzrcnkoqq464048946739.png

    设置完成后点击 Generate Code生成代码。
    可以看到定时器的初始化已经完成,但是此时中断还没有打开,需要自己添加代码启动定时器打开中断。

    3no10aozphc64048946840.png

    3no10aozphc64048946840.png

    同时,需要自己编写中断回调函数,假设程序功能是定时100ms时间到后翻转LED端口,则代码如下。

    41ysk0t4miw64048946940.png

    41ysk0t4miw64048946940.png

    编译程序后下载到电路板,可以看到相应的LED灯按照设定的周期开始闪烁。定时器的作普通定时用,使用较简单,后面将介绍PWM模式、输入捕获比较、编码器模式等的使用。
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表