【ufun使用】普通的延时和使用SysTick(系统定时器)延时

本文介绍了如何在STM32单片机上利用SysTick定时器实现精确延时,包括寄存器配置和代码实现,并对比了传统空循环延时方法。

上次点了一个灯之后,总觉得没有什么意思,因为LED一直亮的也没什么意思,所以就得让它闪动起来,学过C语言的同学都知道一个空的循环函数就可以使CPU在那里空转,以达到延时的目的,所以这是我们的第一个延时的代码

void delay(unsigned int t)
{
	while(t --);
}

但是,如果这样就结束了,那就太没意思了,这可是stm32单片机啊,一个普普通通的延时就可以搞出花儿来。学过51的都知道,51有一个定时器的东西,stm32也有一个叫定时器的东西,当然stm32不只有一个定时器,它有一堆定时器,但是我现在主要说的是它的SysTick(系统定时器),人们常说的是滴答定时器,它属于Cortex-M3内核的一个外设,内嵌早NVIC(嵌套中断向量)中。系统定时器是一个24bit的向下递减的计数器,计数器每记数一次的时间是1/系统时钟,注意:系统时钟是八分频的,看图

如果是72M,经过分频之后是9M, 所以系统定时器定时一次是1/9M。那么我们计九次就是1us。当重装载数值寄存器的值递减到0时,系统定时器就产生一次中断,以此循环往复。
因为SysTick属于CM3内核的外设,所以所有基于CM3内核的单片机都具有这个系统定时器,这使得软件在CM3单片机中可以很容易移植。系统定时器在一般用于操作系统,用于产生时基,维持系统的心跳。在裸机中也常用作延时。
系统定时器有4个寄存器。使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准计时器不需要使用。
CTRL(控制及状态控制器) LOAD(重装载数值寄存器 )
VAL(当前数值寄存器) CALIB  校准寄存器

介绍如图

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值