使用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是...