延時函式怎么實作間隔1秒呢?
void Delay( uint32_t count )
{
for(;count != 0;count--);
}
Delay();
上面的括號里應該填什么?
你們可以解答一下嗎?或者給我資料也行。
謝謝各位了。
uj5u.com熱心網友回復:
很多單片機例程都有ms延時函式,1000ms就是一秒。這是stm32f103的例程。
delay_ms(300); //延時300ms
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//時間加載(SysTick->LOAD為24bit)
SysTick->VAL =0x00; //清空計數器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //開始倒數
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關閉計數器
SysTick->VAL =0X00; //清空計數器
}
uj5u.com熱心網友回復:
這個這個Sys Tick定時器延時暫時超出我的能力范圍,有沒有簡單的?
uj5u.com熱心網友回復:
除錯運行,根據匯編代碼的指令數一個回圈的機器周期數(比如N),根據芯片得知一個機器周期是幾個時鐘(比如M,普通的51芯片為12,單周期,51芯片為1),假設時鐘周期為T(=1/晶振頻率Fosc),則,填入括號的值 1/(N*M*T)uj5u.com熱心網友回復:
我學的是STM32C8T6。
uj5u.com熱心網友回復:
STM32更支持在線除錯了,接上JTAG或者STTAG就可以聯機除錯uj5u.com熱心網友回復:
需要看cpu 的周期和編譯出來的匯編占cpu的執行周期。uj5u.com熱心網友回復:
不建議用delay函式延時一秒,這一秒CPU被搶占的,但是什么活都沒干,用定時器加中斷不是更有效率嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/59968.html
標籤:單片機/工控
上一篇:PIC16F877A的PWM模塊周期(PR2)怎么求?
下一篇:如何寫一個高效可靠的微型檔案系統
