STM32串列埠接收中斷BUG

2021-08-17 16:12:21 字數 914 閱讀 6769

除錯串列埠時,發現串列埠會出現頻繁跳中斷,導致無法執行主迴圈的問題!

除錯發現是串列埠中斷硬體bug:

1.  usart

_itconfig(usart

1, usart

_it_rxne, enable);使能了接收中斷,那麼ore中斷也同時被開啟了。

2.  ore中斷只能使用usart

_getflagstatus(usart

1, usart

_flag_ore) 讀到   (沒有使能usart

_it_err中斷時)

解決辦法:

1.  初始化時,開啟中斷

usart_itconfig(usart1, usart_it_pe, enable);    //開啟pe錯誤接收中斷bit 8peie: pe interrupt enable

usart_itconfig(usart1, usart_it_err, enable);    //cr2 開啟err中斷

2. 在stm32中斷函

數增加usart

_it_ore等異常中斷的處理!

//開啟cr3,bit0的eie: error interrupt enable, 處理usart_it_err,usart_it_ore_er,usart_it_ne,usart_it_fe   錯誤

if(usart_getflagstatus(usart1, usart_flag_ore) != reset)

if(usart_getflagstatus(usart1, usart_flag_ne) != reset)

if(usart_getflagstatus(usart1, usart_flag_fe) != reset)

if(usart_getflagstatus(usart1, usart_flag_pe) != reset)

STM32串列埠通訊中斷接收

串列埠的時序和工作原理就不寫了,主要寫如何應用 串列埠的設定除了gpio外,需要設定的引數有波特率 資料位 停止位,校驗方式 gpio輸出配置af pp復用推挽輸出 gpio出入配置in flaoting浮空輸入 usart的配置為115200的波特率,8位資料長度,1位停止位,無校驗,無硬體流控制...

STM32串列埠接收策略

如果我們需要接收乙個序列協議,怎麼做呢?先放到緩衝區然後再檢查標誌位是一種思路。道理簡單,關鍵要看怎麼設計。這裡介紹的方法是巧妙利用定時器,與串列埠中斷進行耦合,得到一種魯棒的接收方法。具體 開啟定時器與串列埠中斷 首先用示波器檢視完整幀所需要的時間,並且設定為timmax。定時器以適當的中斷頻率開...

STM32串列埠IDLE中斷

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