• MaixII-Dock(v831)学习笔记——UART



    前言

      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")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    MaixII-Dock与stm32串口通讯

      MaixII-Dock与stm32串口通讯和单片机之间的串口通讯差不多,tx接rx,rx接tx,然后共地即可,这里我用的是stm32rc6,stm32的代码可以之间用正点原子的例程。
    在这里插入图片描述
    MaixII-Dock上电后运行下列代码:

    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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    MaixII-Dock上电后运行代码后会像stm32发送b"1",也就是0x31,当stm32收到后LED1亮。stm32的代码用printf()函数就可以发送信息,不过要注意结尾加上\n,要是没有\n就一直读,阻塞。stm32端部分代码:

    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);   
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    微服务12:系统服务熔断、限流
    OpenSSL之RSA用法
    Python学习笔记——基本类型、函数、输入和输出
    【深圳五兴科技】Java后端面经
    水利遥测终端机水文监测应用
    20231014后台面经总结
    RibbitMQ学习笔记之MQ练习
    历法、节日、节气
    ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators
    聚观早报 | 苹果秋季发布会定档9月7日;​饿了么与抖音达成合作
  • 原文地址:https://blog.csdn.net/Thousand_drive/article/details/126312092