除錯串列埠時,發現串列埠會出現頻繁跳中斷,導致無法執行主迴圈的問題!
除錯發現是串列埠中斷硬體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...