如果使用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的開發板是正點原子的,所以,在...