newPtz/drivers/delay.c

32 lines
1.0 KiB
C
Raw Normal View History

2025-09-26 10:17:39 +00:00
#include "delay.h"
/*
@ brief
@ param
@ return
@ note 2022-5-23
*/
2025-09-29 09:41:58 +00:00
void delay_us(int us)//100us以内
2025-09-26 10:17:39 +00:00
{
uint32_t start, now, delta, reload, us_tick;
2025-09-29 09:41:58 +00:00
start = SysTick->VAL;//记录进入函数时SysTick计数器的当前值。
reload = SysTick->LOAD;//SysTick的重载值即计数器从reload递减到0。
/* 240 */
us_tick = SystemCoreClock / 1000000UL;//每微秒对应的滴答数系统时钟频率除以1000000。SystemCoreClock是系统核心时钟频率单位Hz除以1000000得到每微秒的滴答数。
2025-09-26 10:17:39 +00:00
do
{
2025-09-29 09:41:58 +00:00
now = SysTick->VAL;//在循环中不断读取的SysTick当前值。
delta = start > now ? start - now : reload + start - now;//计算从start到now的时间间隔以滴答数计
} while (delta < us_tick * us);//直到经过的滴答数大于等于所需的微秒数对应的滴答数才退出。
2025-09-26 10:17:39 +00:00
}
2025-09-29 09:41:58 +00:00
void delay_ms(int ms)
2025-09-26 10:17:39 +00:00
{
2025-09-29 09:41:58 +00:00
for (int i = 0; i < ms; i++)
{
for (int j = 0; j < 1000; j++)
{
delay_us(1);
}
}
}