前言
UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART,俗称串口)是一种串行异步收发协议,下到8位单片机,上到64位Soc,一般都会提供UART接口,应用范围广。
MaixII-Dock使用UART
在Linux系统中,UART在用户空间会生成名为/dev/ttyS*的设备(ttyS名称是驱动给出的,可能因驱动而异),应用程序通过读写设备就可以进行UART通信。Linux内核实现了tty层和serial core,serial core会调用tty层的接口,注册tty driver,同时提供了底层uart的抽象
由引脚功能图可以看出,MaixII-Dock有两个UART可以使用,但因为不要使用 UART-0 通道来进行串口通讯,这个串口是直连芯片,会有一些其他数据吞吐,所以只有UART-1可以使用。
python串口模块
serial是python的标准库,常用方法:
ser = serial.Serial(“/dev/ttyS1”,115200) # 实例化串口,设置波特率
ser.write(“hello") # 输入需要通讯的内容
data = ser.read()#可以读一个字符
data = ser.read(20)# 是读20个字符
data = ser.readline() #是读一行,以/n结束,要是没有/n就一直读,阻塞。如果timeout设置 则不堵塞。
ser.setDTR(True)#设置引脚状态
ser.setDTR(False)#设置引脚状态
ser.setRTS(True)#设置引脚状态
ser.setRTS(False)#设置引脚状态
ser.close() #关闭串口
ser.open() #打开串口
MaixII-Dock串口收发
准备USB转TTL板一块,将ch340的tx接PG7,ch340的rx接PG6,还要接一根地线,使ch340与MaixII-Dock工地。
打开串口助手,运行下列代码,即可进行串口通讯:
import serial
ser = serial.Serial("/dev/ttyS1",115200) # 连接串口
print('serial test start ...')
ser.write(b"Hello Wrold !!!\n") # 输入需要通讯的内容
while True:
ser.setDTR(True)
ser.setRTS(True)
tmp = ser.readline() #接收到的内容
if tmp:
print(tmp)
ser.write(b"Get datas successful")
MaixII-Dock与stm32串口通讯
MaixII-Dock与stm32串口通讯和单片机之间的串口通讯差不多,tx接rx,rx接tx,然后共地即可,这里我用的是stm32rc6,stm32的代码可以之间用正点原子的例程。
MaixII-Dock上电后运行下列代码:文章来源:https://www.toymoban.com/news/detail-424626.html
import serial
ser = serial.Serial("/dev/ttyS1",115200) # 连接串口
print('serial test start ...')
ser.write(b"1") # 输入需要通讯的内容
while True:
ser.setDTR(True)
ser.setRTS(True)
tmp = ser.readline() #接收到的内容
if tmp:
print(tmp)
ser.write(b"Get datas successful\n")
MaixII-Dock上电后运行代码后会像stm32发送b"1",也就是0x31,当stm32收到后LED1亮。stm32的代码用printf()函数就可以发送信息,不过要注意结尾加上\n,要是没有\n就一直读,阻塞。stm32端部分代码:文章来源地址https://www.toymoban.com/news/detail-424626.html
while(1)
{
t=KEY_Scan(0); //得到键值
switch(t)
{
case KEY0_PRES:
LED0=!LED0;
printf("0x31\n");
break;
case KEY1_PRES:;
break;
case WKUP_PRES:
break;
default:
delay_ms(10);
}
if(USART_RX_BUF[0]==0x31)
{
LED1=0;
}
else if(USART_RX_BUF[0]==0x32)
{
LED1=1;
}
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
USART_RX_STA=0;
}else
{
times++;
delay_ms(10);
}
}
到了这里,关于MaixII-Dock(v831)学习笔记——UART的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!