日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于STM32的延时问题

發(fā)布時(shí)間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于STM32的延时问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近一直在搞一輛智能小車,用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。