STM32串列埠中斷接收方式詳細比較

2021-03-04 00:29:42 字數 1519 閱讀 9092

本例程通過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函式裡按照查詢方式執行。

優點:較簡單,採用快取區接收,對提高資料的正確行有一定的改善 。

缺點:要是第一次資料接收錯誤,回不到初始化狀態,必須復位操作 。

例項三:

vvoid 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外部中斷詳解

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...

ARM彙編STM32F103VE串列埠中斷傳送接收

本文件是在stm32103ve中實現串列埠中斷接收和中斷傳送資料,將採用迴圈邊收邊發將串列埠接收到的資料實時傳送出去。串列埠接收傳送 用彙編編寫。本軟體測試在波特率115200通過串列埠軟體從上位機傳送節的文件,微控制器接收後將資料傳送回上位機。u8 recevie num u8 recevie s...

STM32的can匯流排實驗心得

標籤 匯流排心得實驗 2010 09 01 21 08 工作模式 bxcan有3個主要的工作模式 初始化 正常和睡眠模式。初始化模式 軟體通過對can mcr暫存器的inrq位置1,來請求bxcan進入初始化模式,然後等待硬體對can msr暫存器的inak位置1來進行確認。軟體通過對can mcr...