做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...