【NUCLEO-F446RE试用体验】+5.定时器计数--LED闪烁

  • lygo
  • LV4工程师
  • |      2017-08-30 13:51:07
  • 浏览量 1514
  • 回复:8
本帖最后由 lygo 于 2017-9-5 23:44 编辑 前面那一篇帖子学习了按键点灯,那么接下来这篇帖子咱们就玩高大上一点行不行(其实是nucleo外设没多少,还在点灯),由于第一篇帖子是延时来点灯,那么本帖子就来一下定时器计数来实现点灯吧。首先先介绍下定时器吧,我相信学过STM32的人肯定都会知道定时器吧,而定时器本质就是计数器,计数器对内部计数也就构成了定时器。其原理如下:假设为向上计数模式:比如设定一个计数上限,但是不能超过65535(最大值),然后让计数器开始计数,当计数值到达上限了,它再从头开始计数。只不过,当这一轮计数完毕时,会产生一个更新中断,我们可以让 MCU 为我们做点事,比如打开或关闭一个 LED 灯。这里还需要介绍个概念预分频器:起到一个时钟分频作用,比如设定计数器的工作频率(比如时钟频率为48M,48分频后就变为了1M,即就是1us)。当计数值到达上或下限时,你让定时器产生一个事件,还是让定时器产生一个中断,你得告诉定时器。然后设计一个事件处理函数或中断处理函数,在里面完成要 MCU 完成的操作。配置定时器的步骤如下: 1. 选一个定时器来操作,有高级也有通用定时器,这里我们选 TIM2,这是个通用定时器。 2. 设置定时器的计数频率,也就是定时器的预分频器 3. 指定计数上限 4. 当计数器到达上或下限时,定时器产生事件还是中断 5. 打开定时器 实现的效果:LED灯一会灭,一会亮,话不多说,直接上吧。 第一步:选择定时器,如下: 即就是选择定时器时钟源,内部时钟。(2)配置定时器参数上面第一个参数是预分频系数,我选择的时钟是48M的,所以经过47999+1分频后就变为了时钟频率为1M,即时间为1us.第二个参数是计数模式,这里选择的是向上计数模式。第三个参数是:计数上限为999,0-999就是1000,所以溢出时间为1s。由于会用到更新中断标志位,所以开启定时器中断,即NVIC: 把上面的勾打上即可。(3)编写代码首先要说明一个约定,STM32CubeMX 使用的是新的 HAL 库,HAL 库对中断及事件的处理采用的是 所谓回调机制。也就是说中断程序的框架已做好,且不能修改。那么如何加入用户代码呢,就是通过所谓的回调函数来实现的。如下图: 下载进开发板没效果,检查了发现定时器都没打开,加上下面这句就行了: 最后实验完成,谢谢大家!!!
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
SingleYork 2017-08-30
果断点赞,期待楼主更多大作……:lol
0   回复
举报
发布
lygo 回复 2017-08-31
谢谢嘿嘿
0   回复
举报
辛迪可乐 回复 2017-09-01
来点效果图
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子