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)