STM32利用滴答定时器延时微秒

           问题引入:江科大提供的延时微秒函数正是用滴答定时器实现的。为了搞清楚原理,以STM32F103C8T6为例,撰写了本博客。

void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				  //设置定时器重装值
	SysTick->VAL = 0x00;				      //清空当前计数值
	SysTick->CTRL = 0x00000005;				  //设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	  //等待计数到0
	SysTick->CTRL = 0x00000004;				  //关闭定时器
}

         滴答定时器是内核外设,编程资料为【STM32F10xxx Cortex-M3编程手册】。

        可以知道,滴答定时器是32位递减计数器。

        下面是对上述代码的解析

        (1)为什么定时器的重装载值是72*xus:系统滴答定时器用的是系统主频72Mhz,这意味着(1/72000000s)也就是(1/72)us跳动一次,如果我们想要计时15us,那么需要跳动1080次,那就是(15us/(1/72)us)

        (2)对VAL任何值的写入都会将字段清除为0,即从LOAD值开始依次往下递减。

        (3)根据CTRL设置滴答定时器的时钟源,启动、关闭定时器,判断定时器是否溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值