初级会员
- 积分
- 99
- 金钱
- 99
- 注册时间
- 2020-2-4
- 在线时间
- 14 小时
|
楼主 |
发表于 2024-5-10 10:30:09
|
显示全部楼层
代码如下
#include "delay.h"
#include "stdio.h"
#include "core_cm4.h"
void delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told, tnow, tcnt = 0;
uint32_t reload = SysTick->LOAD; /* LOAD的值 */
ticks = nus * 168; /* 需要的节拍数 */
told = SysTick->VAL; /* 刚进入时的计数器值 */
while (1)
{
tnow = SysTick->VAL;
if (tnow != told)
{
if (tnow < told)
{
tcnt += told - tnow; /* 这里注意一下SYSTICK是一个递减的计数器就可以了 */
}
else
{
tcnt += reload - tnow + told;
}
told = tnow;
if (tcnt >= ticks)
{
break; /* 时间超过/等于要延迟的时间,则退出 */
}
}
}
} |
|