#include "delay.h"

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

void delay_ms(int ms)
{
	for (int i = 0; i < ms; i++)
	{
		for (int j = 0; j < 1000; j++)
		{
			delay_us(1);
		}
	}
} 