【STM32】STM32f4学习之路--嘀嗒定时器

嘀嗒定时器,作为stm32特有的系统定时器,它的出现,旨在为用户在使用OS以及延时的时候提供一个精确的定时。

SysTick 是 MDK 定义了的一个结构体(在 core_m4.h 里面),里面包含 CTRL、LOAD、VAL、CALIB 等 4 个寄存器;


CTRL寄存器:顾名思义就是SYSTick的控制寄存器。它的几个常用位如下图,其中CLKSOURCE位为1的时候,嘀嗒计时器将选择系统时钟8分频后的时钟(即168/8=21),我们一般采用这个。
这里写图片描述


LOAD:重装载的值(0-23位)
这里写图片描述


VAl:返回当前倒计数的值(0-23)
这里写图片描述


根据以上,我们可以编写一小段程序作为延时程序:

//nus应小于2^24/21=798915
void _Delay_us(u32 nus)
{
	
	SysTick->CTRL&=~(1<<2);//选择时钟源为21MHz
	SysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作
	SysTick->LOAD=21*nus;//装载的值,此值每减1,需要1/21us,故用21*nus
	SysTick->CTRL|=(1<<0);//使能SySTick
	while(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0
	
}
void _Delay_ms(u32 nms)
{
	
	SysTick->CTRL&=~(1<<2);//选择时钟源为21MHz
	SysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作
	SysTick->LOAD=21000*nms;//装载的值,此值每减1,需要1/21us,故用21*nus
	SysTick->CTRL|=(1<<0);//使能SySTick
	while(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0
	
}

Systick 的时钟来自系统时钟 8 分频, 正因为如此,系统时钟如果不是 8 的倍数(不能被 8 整除),则会导致延时函数不准确,所以STM32的外部晶振一般采用8MHz的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值