STM32串列埠遇到的乙個問題

2022-08-30 13:57:12 字數 765 閱讀 2616

做hlw8032電能表專案中關於usart使用dma接收定長資料的問題

1:由於hlw8032晶元一上電,晶元就會通過串列埠每隔50ms向stm32傳送24位元組的資料,且我不能通過stm32控制hlw8032傳送資料,由於stm32初始化需要一段時間,所以當stm32接收資料時會出現丟包的情況。。

2:解決方法:使用usart空閒中斷,在初始化時先不使能串列埠dma,只開啟串列埠,在stm32串列埠空閒時,跳入串列埠空閒中斷,

先判斷資料是否正確,是否接收到24個位元組的資料,如果資料校驗錯誤,將緩衝區清零,如果資料正確,關掉串列埠空閒中斷,最後使能串列埠dma和dma。

//

串列埠1中斷

//做資料傳送結束判斷

void

usart1_irqhandler()

}else

if(dma_getcurrdatacounter(dma1_channel5)==24&&check_true_data()==1

)

}//注意:只有讀取暫存器dr sr才能清楚空閒中斷標誌位

clear=usart1->dr;

clear=usart1->sr;

//使能dma1,通道5

dma_cmd(dma1_channel5,enable);

//使能串列埠dma

usart_dmacmd(usart1,usart_dmareq_rx,enable);

}

STM32 串列埠DMA(一)

今天調usart,資料在晶元內部用dma傳到串列埠快取,發現dma真的很好,很快,而且不消耗系統資源。只是在傳輸完的時候中斷的標誌置位。下面解釋一下程式。void dma configuration void 再弄幾個重要的語句。這裡是開始dma傳輸前的一些準備工作,將usart1模組設定成dma方...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...