STM32 使用SysTick实现微秒延时

发布于 2021-06-24  558 次阅读


/** 函数名:rt_hw_us_delay
  * 功能	:微秒延时
  * 输入	:延时时间(微秒)
	* 输出	:NULL
	* 编写人:ZJ
  */
void rt_hw_us_delay(uint32_t us)
{
    uint32_t start, now, delta, reload, us_tick;
    start = SysTick->VAL;
    reload = SysTick->LOAD;
    us_tick = SystemCoreClock / 1000000UL;
    do {
        now = SysTick->VAL;
        delta = start > now ? start - now : reload + start - now;
    } while(delta < us_tick * us);
}
/** 函数名:rt_hw_ms_delay
  * 功能	:毫秒延时
  * 输入	:延时时间(毫秒)
	* 输出	:NULL
	* 编写人:ZJ
  */
void rt_hw_ms_delay(uint32_t ms)
{
	 do {
			rt_hw_us_delay(1000);
	 }while(ms--);
}

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。