都在time.c檔案中,這里好像發不了keil檔案,想了解的加我QQ2545407140發你
stm32f4xx_it.c嘀嗒時鐘的中斷函式,滴答時鐘的相關配置已經配置好了
void SysTick_Handler(void)
{
sysTickUptime++;
sys_time();
}
volatile uint32_t sysTickUptime = 0;
uint32_t GetSysTime_us(void)
{
register uint32_t ms;
u32 value;
ms = sysTickUptime;
value = ms * TICK_US + (SysTick->LOAD - SysTick->VAL) * TICK_US / SysTick->LOAD;
return value;//這里LOAD=21K,TICK_US=1000,VAL=0,時鐘平率=21M
}
微秒延時函式
void Delay_us(uint32_t us)//如果要延時10微秒的話us就是10
{
uint32_t now = GetSysTime_us();
while (GetSysTime_us() - now < us);
}//這里的微妙延時不太懂,一開始沒進入中斷,ms=0,value=https://bbs.csdn.net/topics/1000,在Delay_us中now=1000,
while(1000-1000<10),為真,一直在這里等待,時間(LOAD=21K/21M,這樣終端一次就是1ms啊,怎么會出來微秒延時呢?)到后再進入中斷,中斷中sysTickUptime++后,等于1,GetSysTime_us()的值改了,增大了1000,條件為假,退出while。大致程序我就是理解的
[code=c][/code]
void Delay_ms(uint32_t ms)//1ms=1000us
{
while (ms--)
Delay_us(1000);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78652.html
標籤:單片機/工控
上一篇:MHA報錯:mysqlbinlog: unknown variable ‘default-character-set=utf8mb4’
下一篇:用單片機數碼管顯示兩位數
