个人对STM32 SysTick的总结(寄存器操作)

9833a53f4092ec89fc4590b4a682b183.png

一、概述:

SysTick是一个简单的递减24位计数器。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。

状态控制寄存器的第0位可以使能计数器,当前值寄存器随着时钟一直递减,当他减到0的时候,重装载寄存器就会重新装载这只的值,计数器继续从这个值递减。

二、相关寄存器:

2.1  SysTick->CTRL 状态和控制寄存器

ce08694382714bba68ec5c93b12420e6.jpeg

位16:当前值寄存器递减到0,位16置1

位2:时钟源选择位,0:使用外部参考时钟;1:使用内核时钟

位1:使能SysTick中断,当前值寄存器递减到0时产生中断

位0:SysTick时钟使能

2.2  SysTick->LOAD 重装载值寄存器

6c79552cebc6993db044ceb2300784cc.jpeg

当前值寄存器为0时,自动将重装载值重装到当前值计数器,重装载值的大小需要自己设置。

2.3  SysTick->VAL当前值寄存器

f32e40635080e12659a555f0c012ff59.jpeg

可读可写,当计数器使能时,这个寄存器的值开始递减,使用前后注意清零。

三、SysTick逻辑图

dac4a77f1267bb27435f27b06d109256.jpeg

6812b90b18d3dfea722094a925a95ab0.jpeg

四、时钟频率与延时

4.1时钟选择

采用参考8分频的参考时钟比较准,所以此处SysTick计数器选择21M的时钟。

02cb49275d97fd2b0f06916ba56ca677.jpeg

4.2  如何延时1us

时钟频率为21M,也就是1s的时间技术21M次。由此可知计数一次用了 (1/21000000)s ,用了(1/21000)ms, 用了(1/21) us,所以,1us计数21次。

4.3  如何延时1ms

因为1ms = 1000us,所以综上所述,1ms计数1000*21次计数,1ms也就是21000次计数

4.4最大延时

24位计数器能保存的最大值 : 16777215。最大延时时间=16777215 /21=798915us=798.915ms

五、示例代码

#include "delay.h"




#define    Value_us    21
#define    Value_ms    21000




void delay_init(void)
{
              SysTick->CTRL &= (1 << 2); //控制寄存器位2置0,选择8分频时钟
              SysTick->CTRL &= ~(1 << 0); //关闭计数器
}
void delay_us(u32 num)
{            
              SysTick->LOAD = num * Value_us;
              SysTick->VAL = 0;
              SysTick->CTRL |= (1 << 0); //使能计数器
              while (!(SysTick->CTRL & 1<<16));              //判断是否计数完毕
              SysTick->VAL = 0;
              SysTick->CTRL &= ~(1 << 0); //关闭计数器            
}
void delay_ms(u32 num)
{                           
              SysTick->LOAD = num * Value_ms;
              SysTick->VAL = 0;
              SysTick->CTRL |= (1 << 0); //使能计数器
              while (!(SysTick->CTRL & 1<<16));
              SysTick->VAL = 0;
              SysTick->CTRL &= ~(1 << 0); //关闭计数器            
}

==========

往期回顾:

解决printf无法打印输出的问题

SHT3x-DIS驱动及应用详解

两步判断一款U盘读写性能

示波器最重要的三个参数

全攻略自制esp8266 WIFI智能排插教程

==========

原文:点击阅读原文

作者:UID:170498

平台:51黑电子网

32773665496d3fe3273199ef9b8ccfa7.png

fd131ce31c6b5aa617ab1b6982fdf0d3.png

df3d68ab39db6bb4b6e45518ec749531.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值