Uart進行的串列埠收發

2021-10-13 17:13:47 字數 1139 閱讀 3081

使用hal庫來完成,使用快取陣列進行儲存

hal_uart_transmit(&huart1,txt,sizeof(txt),1);

第乙個引數是要使用的串列埠控制代碼位址,比如要使用u(s)art1,引數就設定為u(s)art1的控制代碼位址&huart1

第二個引數是要傳送的資料緩衝區首位址

第三個引數是傳送的資料長度,這裡可以直接用sizeof()函式獲取傳送緩衝區的長度

第四個引數是超時時間,單位是ms,如果超過設定的時間,則函式返回hal_timeout,如果設定為hal_max_delay,處理器就會一直等到資料傳送完成再執行下一條語句。

(設定usart1為非同步模式,無硬體流控)

txt陣列為uint8_t,按asc碼儲存,即char

使用printf過載函式以便於串列埠輸出

複製**

#include 「stdio.h」

#ifdefgnuc

#define putchar_prototype int __io_putchar(int ch)

#else

#define putchar_prototype int fputc(int ch, file *f)

#endif

putchar_prototype

複製**

串列埠接收

hal_uart_receive_it(&uart1,txt,sizeof(txt))

hal_uart_transmit_it(&uart1,txt,sizeof(txt))

第乙個引數時要使用的串列埠控制代碼位址

第二個引數是傳送/接受緩衝區的首位址,用於存放要傳送/接收的資料

第三個引數是傳送/接受緩衝區長度

前三個引數和阻塞方式完全一致,為什麼沒有超時時間了呢?

因為中斷(it)方式配置完成暫存器之後不需要再占用cpu,會在接受完成後觸發中斷。

(使uart全域性中斷

void hal_uart_rxcpltcallback(uart_handletypedef *huart)

接受後發送回串列埠

這裡想要取出txt的值可以在trans前操作,注意txt為u8即字串陣列,故按索引取出,取數字注意減『0』;

同時陣列注意多開兩位,回車為\r\n,佔兩位。

UART通訊收發

在使用串列埠時,只需掌握zigbee協議棧提供的串列埠操作相關的三個函式即可。uint8 haluartopen uint8 port,haluartcfg t config uint16 haluartread uint8 port,uint8 buf,uint16 len uint16 halu...

關於串列埠開啟DMA進行收發的配置

之前在用stm32進行開發的時候,有用到485進行資料的採集。因為資料量相對較大,所以開啟了dma通道。這邊就對485串列埠配置和dma的配置以及後續相關的收發操作進行一點總結。首先我485接的是板子上的串列埠一。根據手冊可以看出這邊使用的是dma1的通道4和通道5,接下來就是相關的配置。ps 用庫...

UART串列埠通訊

先簡單說說串列埠通訊 uart 我做的這個實驗只針對rs232標準,在fpga與上位機給出的rs232口之間通過電平轉換電路 最上面圖中的max232晶元 實現ttl電平與rs232電平之間的轉換。我們只關心rs232 tx和rs232 rx兩個訊號,rs232 tx是資料傳送埠,rs232 rx是...