STM32的四種延時方法
玩轉(zhuǎn)單片機與嵌入式 2021-09-06 15:22
收藏
▼點擊下方名片,關(guān)注公眾號▼歡迎關(guān)注【玩轉(zhuǎn)單片機與嵌入式】公眾號,回復(fù)關(guān)鍵字獲取更多免費資料。回復(fù)【電容】,獲取電容、元器件選型相關(guān)的內(nèi)容;
回復(fù)【阻抗匹配】,獲取電磁兼容性、阻抗匹配相關(guān)的資料回復(fù)【資料】,獲取全部電子設(shè)計、單片機開發(fā)相關(guān)的資料回復(fù)【終端電阻】,獲取CAN終端電阻相關(guān)的資料回復(fù)【單片機】,獲取單片機全套視頻教程和參考設(shè)計
回復(fù)【STM32】,獲取STM32相關(guān)設(shè)計和視頻教程回復(fù)【PCB】,獲取PCB設(shè)計相關(guān)的資料回復(fù)【硬件知識】、【硬件設(shè)計】,獲取硬件開發(fā)工程必備手冊
回復(fù)【經(jīng)典電路】,獲取5000個經(jīng)典電路
回復(fù)【論文】,獲取畢業(yè)設(shè)計、電子競賽、學(xué)術(shù)專業(yè)等相關(guān)論文資料…………
歡迎關(guān)注【玩轉(zhuǎn)單片機與嵌入式】公眾號,本公眾號會以連載的形式對電容進行深入講解,歡迎持續(xù)關(guān)注。?單片機編程過程中經(jīng)常用到延時函數(shù),最常用的莫過于微秒級延時delay_us()和毫秒級delay_ms()。本文基于STM32F207介紹4種不同方式實現(xiàn)的延時函數(shù)。一:普通延時
這種延遲方式應(yīng)該是每個人在51臺單片機時接觸最早的延遲函數(shù)。這個比較簡單,讓單片機做一些無關(guān)緊要的工作來打發(fā)時間,經(jīng)常通過循環(huán)來實現(xiàn)。在一些編譯器下,代碼會被優(yōu)化,導(dǎo)致精度低,用于一般延遲和對精度不敏感的應(yīng)用場景。//微秒級的延時void delay_us(uint32_t delay_us){ volatile unsigned int num; volatile unsigned int t; for (num = 0; num < delay_us; num ) { t = 11; while (t != 0) { t--; } }}//毫秒級的延時void delay_ms(uint16_t delay_ms){ volatile unsigned int num; for (num = 0; num < delay_ms; num ) { delay_us(1000); }}二:定時器中斷
定時器精度很高,可以配置定時器中斷,比如配置1ms中斷一次,然后間接判斷進入中斷的次數(shù),達(dá)到精確延遲的目的。這種方法的精度可以保證,但是系統(tǒng)一直在中斷,不利于在其他中斷中調(diào)用這個延遲函數(shù)。有些高精度的應(yīng)用場景不適合,比如其他外部設(shè)備輸出,不允許中斷。STM32任何定時器都可以實現(xiàn),下面我們以SysTick 定時器為例介紹:初始化SysTick 定時器:/* 配置SysTick為1ms */RCC_GetClocksFreq(