HAL庫下串列埠接收中斷接收OPENMV傳送的資訊

2021-10-24 14:17:41 字數 1779 閱讀 5175

最小系統:stm32f103rct6

開發環境:stm32cubeide

實現功能:openmv作為上位機傳送識別物體後獲取的座標資訊,加上幀頭幀尾表示資訊結構

舉個例子,如果你需要傳送兩個座標(x,y),傳送的座標資訊之間沒有間隔。那資料流應該是這個樣子:xyxyxyxyxyxy

微控制器在接受時很容易分不清本次接收的值是x座標還是y座標。所以直接傳送直接接收是不可行的。

我們可以定義自己的資料報,定義幀頭幀尾 將自定義規則的資料放在中間(不追求嚴謹可不考慮校驗位)。

**:

/*

* protol.h

* * created on: 2023年9月27日

* author: kindresy

*/#ifndef inc_protol_h_

#define inc_protol_h_

#include

"usart.h"

#include

"string.h"

#include

"stdio.h"

#include

"stdbool.h"

#define datalength 24

typedef

struct __protol_handletypedef

protolhandletypedef;

void

protol_init

(uint8_t framehead,uint8_t frametail,protolhandletypedef * protol)

;bool usart_dataget

(protolhandletypedef * protol)

;#endif

/* inc_protol_h_ */

/* * protol.c

* * created on: 2023年9月27日

* author: kindresy

*/#include

"protol.h"

void

protol_init

( uint8_t framehead,

uint8_t frametail,

protolhandletypedef * protol)

bool usart_dataget

(protolhandletypedef * protol)

else

if(protol->data == protol->frametail)

if(protol->rec)

return protol->packflag;

}protolhandletypedef ov_usart;

protolhandletypedef * ov_usarthandler=

&ov_usart;

void

hal_uart_rxcpltcallback

(uart_handletypedef *huart)

}hal_uart_abortreceive_it

(&huart1)

;hal_uart_receive_it

(&huart1,

&(ov_usarthandler->data),1

);}int

main()

需要注意的事:

hal庫的串列埠接收中斷每次接收完畢都需要重新開啟

hal_uart_transmit_it(&huartx,&protol->data,1);

基於HAL庫處理UART中斷並接收串列埠傳入的資料

正確的獲取接收資料的方法是 1.在進入中斷後使用hal庫函式中的hal uart getstate函式確定uart的接收是否結束,這個函式也可以判斷傳送資料是否忙碌等 hal uart busy xx 2.處理快取中的資料,提取儲存到自定義的變數陣列中,用hal uart receive函式實現 3...

STM32使用HAL庫寫串列埠接收中斷

硬體 正點原子戰艦開發板 stm32f103zet6 軟體 mdk5,stm32cubemx 下面講解使用hal庫配置串列埠1,使串列埠1可以使用中斷接收位元組並原樣返回。uint8 t uart1 rxbuf 10 用於存放接收到的資料 void mx usart1 uart init void ...

STM32 HAL庫使用中斷實現串列埠接收不定長資料

以前用dma實現接收不定長資料,dma的方法接收串列埠助手的資料,全部沒問題,不過如果接收模組返回的資料,而這些資料如果包含回車換行的話就會停止接收,例如接收 at r nok r n,就只能接收到at r,導致沒有接收完成,具體原因還沒搞懂,有了解的,希望可以告知一下,dma不定長接收方法傳輸門 ...