STM32F10X(Cortex-M3)系统定时器寄存器笔记和系统定时器精准延时函数

Cortex-M3系统定时器寄存器笔记和系统定时器精准延时函数

简介

在STM32F10X(Cortex-M3)除了通用定时器和看门狗定时器外,还有一个系统定时器(SysTick)
拿STM32F103C8T6来说,有7个定时器,3个通用定时器,1个高级定时器,2个看门狗定时器,最后还有一个24位倒计数器,也就是系统定时器
在这里插入图片描述
由于它没有像通用定时器和高级定时器的PWM或者其它功能,只能用来计数。所以通常用来计时,利用用它写精准延时函数。
因为这是Cortex-M3共有的,所以在STM32手册里是看不见系统定时器的寄存器。
在ST官网STM32F103C8T6的编程手册可以看见Cortex-M3的编程手册
在这里插入图片描述

系统定时器寄存器

STK_CTRL

在这里插入图片描述
SysTick control and status register,这个寄存器就是控制寄存器了。
COUNT FLAG就是看计数值计完没0还没计完 1记完了。
CLK SOURCE顾名思义就是时钟了,0就是AHB的时钟除以8,如果你AHB是72M,那么系统定时器就是9M。
TICK INT就是使能中断事件的,0不使能,1使能,使能完后应该要去NVIC里开启系统定时器的中断使能。
ENABLE就是使能计数了,1使能。

STK_LOAD

在这里插入图片描述
SysTick reload value register顾名思义就是加载计数值的寄存器,22位的。

STK_VAL

在这里插入图片描述
这个就是看现在计数值是多少的寄存器。

STK_CALIB

在这里插入图片描述
这个寄存器是或者定时器时钟/8的1ms的校准值的,比如72M/8=9M,1ms的计数值就是9000,那么TENMS得到的值就是9000。

STM32F10X(Cortex-M3)精准延时函数

代码如下,这是堵塞延时。

void delay_ms(uint32_t ms)
{
	SysTick->LOAD=ms*9000;//预装载值
	SysTick->CTRL |=(1<<0);//系统定时器开始计数
	while(!(SysTick->CTRL&(1<<16)));
	SysTick->CTRL&=~(1<<0); //系统定时器停止计数
	SysTick->CTRL&=~(1<<16); //清空计数标志
}

void delay_us(uint32_t us)
{
	SysTick->LOAD=us*9;//预装载值
	SysTick->CTRL |=(1<<0);//系统定时器开始计数
	while(!(SysTick->CTRL&(1<<16)));
	SysTick->CTRL&=~(1<<0); //系统定时器停止计数
	SysTick->CTRL&=~(1<<16); //清空计数标志	
}
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月明Mo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值