引用:
本例程通過pc機的串列埠除錯助手將資料傳送至stm32,接收資料後將所接收的資料又傳送至pc機,具體下面詳談。。。
例項一:
void usart1_irqhandler(u8 getdata) }
這是最基本的,將資料接收完成後又傳送出去,接收和傳送在中斷函式裡執行,main函式裡無其他要處理的。
優點:簡單,適合很少量資料傳輸。
缺點:無快取區,並且對資料的正確性沒有判斷,資料量稍大可能導致資料丟失 。
例項二:
void usart2_irqhandler()
if((uart2_buffer[0] == 0x5a)&&(uart2_buffer[uart2_rx_num-1] == 0xa5)) //判斷最後接收的資料是否為設定值,確定資料正確性
uart2_sta=1;
if(usart_getflagstatus(usart2,usart_flag_ore) == set) //溢位 }
if( uart2_sta )
這是加了資料頭和資料尾的接收方式,資料頭和尾的個數可增加,此處只用於除錯之用。中斷函式用於接收資料以及判斷資料的頭尾,第二個函式在main函式裡按照查詢方式執行。
優點:較簡單,採用快取區接收,對提高資料的正確行有一定的改善 。
缺點:要是第一次資料接收錯誤,回不到初始化狀態,必須復位操作 。
例項三:
void usart2_irqhandler()
if(usart_getflagstatus(usart2,usart_flag_ore) == set) //溢位 }
if( uart2_tx != uart2_rx )
採用fifo方式接收資料,由0x3f可知此處最大接收量為64個,可變,中斷函式只負責收,另一函式在main函式裡執行,fifo方式傳送。
優點:傳送和接收都很自由,中斷占用時間少,有利於mcu處理其它。
缺點:對資料的正確性沒有判斷,一概全部接收。
例項四:
void usart2_irqhandler()
if(uart2_buffer[uart2_rx-1] == 0x5a) //頭
uart2_tx = uart2_rx-1;
if((uart2_buffer[uart2_tx] == 0x5a)&&(uart2_buffer[uart2_rx-1] == 0xa5)) //檢測到頭的情況下檢測到尾
if(usart_getflagstatus(usart2,usart_flag_ore) == set) //溢位 }
if( uart2_sta )
資料採用資料報的形式接收,接收後存放於快取區,通過判斷資料頭和資料尾(可變)來判斷資料的「包」及有效性,中斷函式用於接收資料和判斷頭尾以及資料報長度,另一函式在main函式裡執行,負責傳送該段資料。
優點:適合打包傳輸,穩定性和可靠性很***,可隨意傳送,自動挑選有效資料。
缺點:快取區資料長度要根據「包裹」長度設定, 要是多次接收後無頭無尾,到有頭有尾的那一段資料恰好跨越快取區最前和最後位置時,可能導致本次資料丟失,不過這種情況幾乎沒有可能
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...
STM32串列埠通訊
串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...