OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3661|回复: 0

教你如何使用滴答定时器点灯!

[复制链接]

1155

主题

1167

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4980
金钱
4980
注册时间
2019-5-8
在线时间
1259 小时
发表于 2021-10-9 16:31:50 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2021-11-1 10:47 编辑

以下文章摘自微信公众号——开源电子网《教你如何使用滴答定时器点灯!》
更多技术文章,请扫下方二维码关注

开源电子网,扫码2222222.png



使用滴答定时器点灯



本文我们来学习将滴答定时器当成普通定时器使用,实现滴答定时器控制LED灯的闪烁。

一、了解滴答定时器

    系统滴答定时器是一个非常基本的24bit倒计时定时器也就是(0-16777215),当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE清0,它就永不停,即使是系统在睡眠模式下也能工作。


滴答定时器时钟来源:

1.内核时钟也就是系统时钟(本文使用F103ZET6,系统时钟配置为72M)

2.将系统时钟进行8分频之后作为滴答定时器时钟来源(72/8=9M)

1.png


那他由哪个寄存器设置呢?

1.SysTick控制及状态寄存器,由该寄存器的位2设置,

该位为1 : 选择系统时钟  (以F103ZET6为例:72M)

该位为0 : 选择外部时钟源(这里指的外部时钟源,实质就是将系统时钟8分频:72/8=9M)

2.png


2.滴答定时器的重装载寄存器LOAD

(注意是24位的,所以可设置范围:0-16777215)

3.png

3.当前值寄存器VAL寄存器描述

4.png

二、滴答定时器中断步骤

    我们要实现Systick(滴答定时器)中断,只需要:

1、设置LOAD的值;

2、清空当前值VAL的值;

3、设置控制及状态寄存器

(使能滴答定时器、使能滴答定时器中断、选择时钟源等)

4、设置中断优先级及分组

5、编写中断服务函数

    1~4这些步骤在一个HAL库函数内实现SysTick_Config;不过该函数默认选择内核时钟,需要修改时钟来源的话需调用函数:HAL_SYSTICK_CLKSourceConfig。

三、代码设计

实验目的:实现滴答定时器1s控制LED灯闪烁一次。

假设如果我们设置滴答定时器的时钟源为内核时钟也就是72M,

计数一次的时间就为1/72us,

要计数1s,需要把LOAD设置为72000000才满足,

但是LOAD他是24位的寄存器最大值只能16777215,很明显满足不了。

所以我们需要设置滴答定时器的时钟源为外部时钟源也就是经过8分频后的:72/8=9M

需要1s中断一次的话,LOAD需要设置9000000即可,在正常范围内,所以可行

代码实现:


5.png

主函数:


6.png

中断服务函数:

7.png

这样就实现滴答定时器的中断效果了,大功告成啦!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 00:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表