stm32笔记:Systick系统tick定时器

 2024-03-01 02:05:46  阅读 0

:系统心跳定时器,提供系统心跳

可在裸机程序中作为独立的延时定时器使用

使用:

1. 生成操作系统时钟节拍

2.方便不同处理器之间的程序移植

定时器捆绑在 NVIC 中,例外编号 15

3.用作闹钟测量时间,

但当处理器在调试期间停止时,计时器也会暂停。

它有四个寄存器

, -- 控制寄存器

, -- 重新加载寄存器

, -- 当前值寄存器

, -- 校准值寄存器

stm32时钟源

选择外部时钟源时,时钟为HCLK/8

选择内核时钟源时,时钟为HCLK

延时编程原理

定时器是一个 24 位递减计数器。 设置初始值并启用后,每个系统时钟周期计数器都会减1。

当计数达到 0 时,将自动从寄存器中重新加载初始计时值。 只要控制和状态寄存器中的使能位不被清除,它就永远不会停止。

延迟编程步骤

1、计算产生1us需要多少个时钟周期;

2.计算寄存器的值

即产生相应延迟所需的时钟周期数

=*努斯

3. 开启计数

4、循环检测计数到0的标志位;

5. 清除计数器并关闭定时器

=========================================

异常配置步骤

1配置三个寄存器CTRL//LOAD/VAL,

2 初始化所使用的时钟,

3 清除当前系统值并加载重载值。

4 使能,使能响应中断

=======================

当定时器达到0时,该位将被设置; 下面的方法可以清除:

1.读取控制和状态寄存器(STCSR)

2. 将任意数据写入当前值寄存器(STCVR)

时钟程序_stm32滴答时钟程序库函数版本_dll时钟

仅当VAL值为0时,计数器才会自动重新加载

=====================

库函数

ST的函数库使用的方法严格按照以下顺序:

1. Call()——禁用计数器

2.Call()——禁用中断

3. 调用fig()——设置时钟源。

4. Call()——设置重载值。

5.Call()——使能中断

6.Call()——启动计数器

中断服务函数

无效(无效);

=========================

注册版本号注释

使用外部8M时钟,锁相环出来的频率是72M,AHB预分频器是72M。

固定HCLK时钟的1/8,即9M,那么1us的延时就是9个时钟

C代码

()//系统时钟为72MHz,=72

->CTRL&=;//将bit2清0,表示配置选择外部时钟

=/8;//硬件将频率除以8,得到的值用于后面的时钟函数

=(u16)*1000;

()//nus如果10us

;

->LOAD=nus*;//如果延时10us,就是10*9=90,加载到加载寄存器中

->VAL=0x00;//计数器清0,因为手动清零字段时,会自动重新加载到VAL中。

->CTRL=0x01; //配置使异常生效,即当计数器倒数到0时,发出异常通知

temp=->CTRL;//时间到后,该位会被硬件置1,但查询后会自动清0。

while(temp&0x01&&!(tmep&(1CTRL=0x00;//关闭计数器

->VAL=0x00;//清除val

//这个while循环判断是否还处于该状态并且计数器还没有计数到0,

只需不停循环地将当前->CTRL寄存器的值写入变量temp中,继续进行下一次判断即可。

当计数或计数器达到0时,停止循环

还有一点需要注意:

LOAD 寄存器最大为 24 位

那么最大延迟值的计算公式为

纳米管

标签: 时钟 计数 定时

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码