串口通信
- 1、K210 UART
- 1.1 、串口通信函式
- 1.2 、常用函式
- 3、代碼
- 4、效果展示
準備工具 K210開發板
USB轉TTL串口 (俗稱ISP燒錄器)
串口助手
??其實Maix Bit 是自帶CH552 芯片的,燒錄程式使用,如果把代碼燒錄在flash或者保存在SD卡里面,不使用MaixPy IDE連接開發板,那么這個TX 、RX埠就會空出來(下面圖示原理圖示注了自帶TX、TX),可以不使用USB轉TTL就可以實作串口通信,如果既要連接用MaixPy IDE,又想要在串口助手收到資料,那么就需要一個USB轉TTL,
附圖USB轉TTL(類似這種就可以):

??實作Maix Bit 與上位機串口通信,在串口助手發送訊息,Maix Bit 開發板在接收到訊息之后轉發到上位機,實作串口通信,

1、K210 UART
??通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,UART 模塊主要用于驅動開發板上的異步串口,k210 一共有3個 UART,每個 UART可以進行自由的引腳映射,
1.1 、串口通信函式
??K210可以自己隨意的配置I/O口,類似FPGA,不像其它型別的單片機串口是固定好的,在使用 uart 前,我們需要使用 fm 來對芯片引腳進行映射和管理,我使用引腳9和引腳10分別做為UART1_TX和UART1_RX,如果想不使用USB轉TTL,那么把引腳修改為原理圖所示引腳即可4、5(這個一定要和開發板對應,不能錯),然后把代碼燒錄到flash或者保存到SD卡,也可以實作與上位機串口通信,
fm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)
建構式,其實就是配置埠:
uart = machine.UART(uart,baudrate,bits,parity,stop,timeout, read_buf_len)
引數:
uart UART 號,使用指定的 UART,可以通過 machine.UART. 按tab鍵來補全
baudrate: UART 波特率
bits: UART 資料寬度,支持 5/6/7/8 (默認的 REPL 使用的串口(UARTHS)只支持 8 位模式), 默認 8
parity: 奇偶校驗位,支持 None, machine.UART.PARITY_ODD, machine.UART.PARITY_EVEN (默認的 REPL 使用的串口(UARTHS)只支持 None), 默認 None
stop: 停止位, 支持 1, 1.5, 2, 默認 1
timeout: 串口接收超時時間
read_buf_len: 串口接識訓沖,串口通過中斷來接收資料,如果緩沖滿了,將自動停止資料接收
如下是我自己構造的函式:
uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
1.2 、常用函式
用于讀取串口緩沖中的資料
uart.read(num)
用于使用串口發送資料:
uart.write(buf)
在python3中. 默認的編碼是unicode,我們的字串就是unicode,unicode弊端:在存盤和傳輸的時候是很浪費的
在存盤和傳輸的時候不能直接使用unicode, 必須要對字串進行編碼. 編碼成bytes型別(位元組形式的字串),在K210中默認是bytes型別的,解碼和編碼在物聯網通信處理服務器資料是很重要的,
解碼:
read_data是保存的已經收到的資料
read_data.decode('utf-8')
編碼:
read_data.encode("utf-8")
更多串口通信函式的使用:https://maixpy.sipeed.com/zh/api_reference/machine/uart.html
3、代碼
from fpioa_manager import fm
# need your connect hardware IO 9/10 to loopback
fm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)
from machine import UART
uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
import time
time.sleep_ms(100) # wait uart ready
uart_A.write(b'hello world')
while True:
if uart_A.any():
while uart_A.any():
read_data = uart_A.read()
print("recv = ", read_data) # 輸出收到的資料
uart_A.write(read_data+"\r")
#break
time.sleep_ms(10) # ohter event
uart_A.deinit()
del uart_A
4、效果展示

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/183367.html
標籤:其他
