STM32串列埠IDLE中斷

2021-10-08 15:28:06 字數 1033 閱讀 7905

stm32串列埠的收發似乎不太一樣,發只要你把資料送出去就行了,電腦會自動讀取(電腦不知道你啥時候發,總不能一直等你的資料吧),而你的stm32要接受乙個資料呢?一直在usart_receivedata嗎?(當時這個問題也困擾了我,直到接觸了esp8266才用到接收)

後面我發現有個很好的東西,串列埠idle中斷,能自動響應你從電腦(別的串列埠)接收到的不定長資料。而不是一直幹等著。

先簡單說說原理吧,大概是,你的stm32接收資料時,並不會馬上把資料馬上處理掉,而是寫到你定義的緩衝區裡,然後你串列埠線上乙個byte長度的時間如果沒接收到資料,就會產生了idle中斷(只會產生一次,別擔心一直會卡在裡面,除非等下次再接收時)

**很簡單,不多說,附上

static

void

nvic_configuration

(void

)//在初始化串列埠的前提下,呼叫此函式初始化空閒接收中斷

void

uart_idle_receive_config

(void

)

中斷服務函式如下

#ifdef	use_idle_receive			

//使用串列埠空閒中斷,開啟中斷服務

static u16 uart_rec_count =0;

uint8_t uart_receive_buf[

100]

;void

usart1_irqhandler

(void)if

(usart_getitstatus

(debug_usart,usart_it_idle)

!= reset)

}#endif

加個預編譯頭,避免你不用的時候,寫了個中斷服務函式程式卡在這裡,要用就define一下就好了

注意:千萬別軟體清除中斷標誌位,不然會一直進idle中斷,不信自己試試。

就是usart_clearitpendingbit(),不然程式卡死在中斷裡了。你讀出來,人家硬體會自動清除.

STM32串列埠空閒中斷idle說明

1.空閒中斷的觸發機制 空閒中斷是在監測到資料接收後 即串列埠的rxne位被置位 開始檢測,當匯流排上在乙個位元組對應的週期內未再有新的資料接收時,觸發空閒中斷idle位被硬體置1.2.idel位清零實現 檢視stm32參考手冊,要注意idel位的清零是通過先讀取usart sr,再讀取usart ...

STM32串列埠接收中斷BUG

除錯串列埠時,發現串列埠會出現頻繁跳中斷,導致無法執行主迴圈的問題!除錯發現是串列埠中斷硬體bug 1.usart itconfig usart 1,usart it rxne,enable 使能了接收中斷,那麼ore中斷也同時被開啟了。2.ore中斷只能使用usart getflagstatus ...

STM32 串列埠 通訊 中斷

一 資料傳送與接收。1 stm32 的傳送與接收是通過資料暫存器usart dr來實現的,這是乙個雙暫存器,包含了 tdr 和 rdr。當向該暫存器寫資料的時候,串列埠就會自動傳送 當收到資料的時候,也是存在該暫存器內。1 stm32 庫函式操作 usart dr 暫存器傳送資料的函式是 void ...