STM32微秒级别延时实现

HAL库函数中有延时函数HAL_Delay();进行毫秒级别的延时,但是在实际的开发中编写时序时有时需要进行较为准确的微秒级别延时像SSI协议接口等,本文章采用一个通用定时器的方式实现微秒级别的延时,而不采用滴答定时器是由于HAL库函数中很多地方需要使用滴答定时器进行超时判断,更改滴答配置恐引发意外,另外传统的for循环延时不太准确。

首先配置使能定时器(我选择的是定时器6)

在这里插入图片描述

第二步:配置定时器(当然在此步骤前默认读者已经完成了系统时钟的配置,F1系列我配置为72MHz,那么对于定时器6来说时钟也是72MHz)

在这里插入图片描述

进行72分频(71+1)那么得出分频后定时器的时钟为1MHz即1us进行数据变化一次,根据这个思想,我将定时器配置为向上计数,自动重装,好方目前位置cubeMX配置方面已经完成了,生成工程就行

第三步:打开工程 在tim.c 文本中的begin 和end之间添加以下代码即可

void delayXus(uint16_t us)

{

uint16_t differ=0xffff-us-5;					//设定定时器计数器起始值

__HAL_TIM_SET_COUNTER(&htim6,differ);

HAL_TIM_Base_Start(&htim6);					//启动定时器

while(differ<0xffff-6) //补偿,判断

{

differ=__HAL_TIM_GET_COUNTER(&htim6);			//查询计数器的计数值

}

HAL_TIM_Base_Stop(&htim6);

}

第四步:将void delayXus(uint16_t us);添加至tim.h头文件中 在其他地方引用该头文件即可使用该延时,经过实际测试可得还是比较准的。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值