关于STM32的延时问题
最近一直在搞一輛智能小車,用STM32單片機(jī)驅(qū)動(dòng),往上面加了很多外設(shè),外型如下:
今天下午打算在LCD顯示一個(gè)溫度,卻發(fā)現(xiàn)怎么都顯示不了,也找不出原因,還好我們公司的鄭工幫我看出了問題,讓我順利改過來成功的顯示在LCD上,畢竟比我先進(jìn)公司的工程師還是要有經(jīng)驗(yàn)一些。o(︶︿︶)o 唉,就是定時(shí)計(jì)數(shù)器少加了一個(gè)0,于是延時(shí)慢了10倍,導(dǎo)致溫度傳感器時(shí)序沒有配置正確,找了一個(gè)下午。就這個(gè)問題我做下總結(jié),在STM32中,延時(shí)的方法有兩種,一種是普通延時(shí)法,用循環(huán)實(shí)現(xiàn),另外一種就是嘀嗒定時(shí)器的實(shí)現(xiàn)方法,我們來看下網(wǎng)上一些大神還有野火開發(fā)板自帶的杰作:
1、輪詢的準(zhǔn)確延時(shí):
傳進(jìn)去1就表示1us
void Delay_us(__IO u32 nTime) { u16 i = 0 ; while(nTime--){i = 10 ; while(i--);} }
2、嘀嗒定時(shí)器的精準(zhǔn)延時(shí)法: #include "bsp_SysTick.h"static __IO u32 TimingDelay;/*** @brief 啟動(dòng)系統(tǒng)滴答定時(shí)器 SysTick* @param 無* @retval 無*/ void SysTick_Init(void) {/* SystemFrequency / 1000 1ms中斷一次* SystemFrequency / 100000 10us中斷一次* SystemFrequency / 1000000 1us中斷一次*/ // if (SysTick_Config(SystemFrequency / 100000)) // ST3.0.0庫版本if (SysTick_Config(SystemCoreClock / 1000000)) // ST3.5.0庫版本{ /* Capture error */ while (1);} //NVIC_SetPriority (SysTick_IRQn, 0);// 關(guān)閉滴答定時(shí)器 SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; }/*** @brief us延時(shí)程序,10us為一個(gè)單位* @param * @arg nTime: Delay_us( 1 ) 則實(shí)現(xiàn)的延時(shí)為 1 * 10us = 10us* @retval 無*/ void Delay_10us(__IO u32 nTime) { TimingDelay = nTime; // 使能滴答定時(shí)器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;while(TimingDelay != 0); }/*** @brief 獲取節(jié)拍程序* @param 無* @retval 無* @attention 在 SysTick 中斷函數(shù) SysTick_Handler()調(diào)用*/ void TimingDelay_Decrement(void) {if (TimingDelay != 0x00){ TimingDelay--;} } 中斷哪里要記得配置:嘀嗒定時(shí)器其實(shí)就是用了這個(gè)中斷的服務(wù)函數(shù)來實(shí)現(xiàn)的,每幾u(yù)s或者nms來達(dá)到精準(zhǔn)的延時(shí) /*** @brief This function handles SysTick Handler.* @param None* @retval None*/ void SysTick_Handler(void) {TimingDelay_Decrement(); }
由于溫度控制器的時(shí)序和紅外的時(shí)序不同,故我在紅外的時(shí)序上用了嘀嗒定時(shí)器來操作延時(shí)計(jì)數(shù),在溫度控制器上用了普通的延時(shí)方法,這樣才能讓我的小車的LCD上可以顯示實(shí)時(shí)溫度,有點(diǎn)小激動(dòng),今天晚上特別特別要感謝鄭工,是他幫我找出了少寫了一個(gè)0的bug,萬分感謝,今晚學(xué)到東西了!
接下來,我將會(huì)在小車上添加攝像頭,測距模塊,循跡模塊,RFID模塊,重力傳感器模塊等等,勵(lì)志把它打造起來,也算是我作為一名合格的工程師的一個(gè)業(yè)余項(xiàng)目,加油!
總結(jié)
以上是生活随笔為你收集整理的关于STM32的延时问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery Ajax全解析
- 下一篇: 5.3多线程条件变量