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