1、通訊協議是什么?
在使用單片機的過程中,通信協議是其中必不可少的一部分,上位機與下位機,單片機與單片機,單片機與外設模塊之間的通信都需要依靠通訊協議來實現信息交換和資源共享。由於設備之間不同的傳輸速率、電氣特性、可靠性要求的不同,也產生了許多類型的適用於不同情況的通信協議,並被廣泛的接受和使用。
2、常見的通訊協議有哪些?
通訊協議按照不同的划分各有不同。如串行通訊、並行通訊。而單片機中最常用的是UART、I2C、SPI通訊。
3、什么是UART?
UART全稱為通用異步收發傳輸器(串口),其工作原理是約定好通訊的波特率,然后將數據一位位地進行傳輸。
圖一:UART時序圖
4、RP2040的UART參數
- 收發獨立的FIFO
- 可編程波特率生成器
- 換行符檢測
- 可編程串行接口(5、6、7、或8位)
- 1位或者2位停止位
- 可編程序硬件流量控制
- 標准異步通信位在發送時添加,在接收時刪除。
硬件流量控制:添加兩個引腳RTS和CTS
RTS:(Require ToSend,發送請求)為輸出信號,用於指示本設備准備好可接收的數據,低電平有效。
CTS:(Clear ToSend,發送允許)為輸入信號,用於判斷是否可以向對方發送數據,低電平有效。
兩個設備通過串口通信時,兩者處理速度不同,可能造成數據丟失。如台式機和單片機之間的通訊,接收端接收數據緩沖區已滿,則此時還接收到發送過來的數據就可能造成數據丟失。使用流控制后,可以有效的避免這種情況發生。
machine.UART(id,baudrate = 115200,bits = 8,parity = None,stop =1 ,tx = None,rx = None)
#id為使用UART通道,可為0或1.
baudrate為使用波特率。
bits為數據位長度(現階段僅8位有效)。
parity為奇偶檢驗位。
stop為停止位長度。
tx和rx為收發引腳,為Pin對象。
UART.any() #用於檢測當前接收緩沖區是否有數據,若有數據時返回1,否則返回0
UART.read([nbytes]) #用於讀取字符串,nbytes:如果指定了“nbytes”,則最多讀取這么多字節,否則盡可能多的讀取數據。
UART.readline() #讀取一行,以換行符為結束標志
UART.readinto(buf[, nbytes]) #readinto將讀取字符串存入指定緩存中,buf用於指定緩存。
UART.write(buf) #用於發送字符串,並返回發送的字節數。buf為需要發送字符串
UART.sendbreak() #往總線上發送停止狀態,拉低總線13Bit時間。
from machine import UART,Pin
import utime
uart =UART(0,baudrate = 115200,bits = 8,parity = None,stop = 1 ,tx = Pin(0),rx = Pin(1))
led = Pin(25,Pin.OUT)
flog = 0
receiveStr = ''
while True:
flag = uart.any()
if flag>0:
led.value(1)
utime.sleep(1)
print(flag)
receiveStr = uart.readline()
uart.write(receiveStr)