STM32F103滴答計時器之delay函式

2021-10-08 13:29:26 字數 1031 閱讀 5403

如果使用freertos

void delay_us(u32 nus)};

delay_osschedunlock();

}

原始碼如上,delay_us()主要是靠計數值的變化,系統時鐘為72m,每變化一次過1/72m s,從而完成延時。

void delay_ms(u32 nms)

nms%=fac_ms;

} delay_us((u32)

(nms*

1000));

}

原始碼如上,delay_ms()主要是用vtaskdelay()來進行延時,如果時間太短就變為delay_us()。

如果不使用freertos

void delay_us(u32 nus)

while((temp&

0x01)&&

!(temp&(1

<<

16))

);

systick->ctrl&

=~systick_ctrl_enable_msk;

systick->val =0x00;

}

原始碼如上,這delay_us()延時主要是靠計數器計數至0查詢狀態暫存器從而實現。系統的時鐘設定為9m,fac_us設定為9,這樣每次計數器到底時就是1us,設定systick->load=nus*fac_us設定計數器重灌值;

void delay_ms(u16 nms)

while((temp&

0x01)&&

!(temp&(1

<<

16))

);

systick->ctrl&

=~systick_ctrl_enable_msk;

systick->val =0x00;

}

原始碼如上,主要是設定fac_ms=1000*fac_us就可以了

STM32F103 滴答定時器定時不准

緣由 做了五片同樣的板子,功能是使用板子上的感測器採集資料後,利用stm32f103串列埠將資料傳輸出去,就其中一片板子資料傳輸比其他的慢,原本正常使用串列埠115200波特率傳輸一幀資料只需要1s多,而那塊板子傳輸資料得十幾秒。一開始用示波器對時鐘測量都是ok的,外部晶振也是8mhz起振。在看程式...

STM32 滴答定時器

在arm cortex m3核心中有乙個systick定時器,它是乙個24位的倒計數定時器,當計數到0時,它就會從load暫存器中自動重灌定時初值,只要不把ctrl暫存器中的enable清0,它就永不停。對於滴答定時器的理解主要分為下面幾項 1.滴答定時器的時鐘 看上面的圖會有乙個錯覺,以為滴答定時...

對於STM32滴答定時器複習

好久都沒有複習一下關於stm32硬體部分的知識,每次都是在不停的抄襲其他人開發板的資料和程式,自己也沒有乙個很好的總結,所以,最近打算,重新閱讀一下關於stm32資料手冊和一些晶元手冊,按照自己的想法,看看自己能不能憑藉著自己的能力重新編寫那些 因為自己購買的stm32的開發板是正點原子的,所以,在...