[原创] 【Luckfox幸狐 RV1106 Linux 开发板测评】07 串口设备应用

damiaa   2024-3-4 09:00 楼主

      【Luckfox幸狐 RV1106 Linux 开发板测评】07 串口设备应用

 

LuckFox Pico Plus/Pro/Max 有五个串口,UART2、UART3、UART4 和 UART0,UART1其中 UART2 为调试串口。
默认开启的串口有 UART3 、 UART4 和调试串口。
 
205648aqdnue9eu44aud4w.png
/dev设备目录
/dev目录中可以看到一些ttySx 的目录,用ls /dev/ttyS*可以查看。
205648av14j6hlvjoz9omu.png
 
配置和查询通信参数可以用stty命令:
stty -F /dev/ttyS3 查询通信参数
stty -F /dev/ttyS3 ispeed 115200 ospeed 115200 修改通信参数
205648i3zn6zdph12qkr9l.png
与Windows主机usb-uart ttl通讯
 将串口模块一端连接电脑,另一端连接 LuckFox UART3的引脚18(GND)、19(UART7_TX)和20(UART7_TX)上。
205648epal1i5dq4l8j8d4.png
 下载并打开 MObaXterm,选择串口,设置波特率(115200,上面已经设置)。
记得把串口设置一下参数,每次重上电都要设置:
stty -F /dev/ttyS3 查询通信参数
stty -F /dev/ttyS3 ispeed 115200 ospeed 115200 修改通信参数
实验结果如下:
205648izabxc848u8g72ob.png
同样,将串口模块一端连接电脑,另一端连接 LuckFox UART4的引脚3(GND)、6(UART7_TX)和7(UART7_TX)上。电脑端一样。
设置串口参数:
stty -F /dev/ttyS4 查询通信参数
stty -F /dev/ttyS4 ispeed 115200 ospeed 115200 修改通信参数
实验结果如下:
205648q82cm8ac0545ema3.png
 
串口通信 python程序实验
使用Python 的 serial 库,实现串口3收发数据。
205648uwkcccgrdrwcztmk.png
还是将usb-ttl接到串口3 运行,结果如下:
205648l2t9j6hl6qkv4fjz.png
使用python-periphery,实现串口3收发数据。
205648b4rsnj5enr0rnpro.png
还是将usb-ttl接到串口3 运行,结果如下:
205648jkmk7gcbbu44bhc8.png
 
C语言实现串口通信(这个程序适合串口0 1 3 4 也就是max板的所有串口)
程序如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

int main() {
    int serial_port_num;
    char serial_port[15];
    
    printf("Select a serial port (0/1/3/4): ");
    scanf("%d", &serial_port_num);
    
    sprintf(serial_port,"/dev/ttyS%d",serial_port_num);
    int serial_fd;

    serial_fd = open(serial_port, O_RDWR | O_NOCTTY);
    if (serial_fd == -1) {
        perror("Failed to open serial port");
        return 1;
    }

    struct termios tty;
    memset(&tty, 0, sizeof(tty));

    if (tcgetattr(serial_fd, &tty) != 0) {
        perror("Error from tcgetattr");
        return 1;
    }
    int bt_num =3;
    
    int baud_val=B115200;
    
    printf(" baud rate select is \n 1:   9600 \n 2:  19200\n 3:  38400\n 4:  57600\n 5: 115200\n");
    scanf("%d", &bt_num);
    switch(bt_num)
    {
        case 1:
            cfsetospeed(&tty, B9600);
            cfsetispeed(&tty, B9600);  
            baud_val =9600;
            break;
        case 2:
            cfsetospeed(&tty, B19200);
            cfsetispeed(&tty, B19200);  
            baud_val =19200;
            break;
        case 3:
            cfsetospeed(&tty, B38400);
            cfsetispeed(&tty, B38400);  
            baud_val =38400;
            break;
        case 4:
            cfsetospeed(&tty, B57600);
            cfsetispeed(&tty, B57600);  
            baud_val =57600;
            break;
        case 5:
            cfsetospeed(&tty, B115200);
            cfsetispeed(&tty, B115200);  
            baud_val =115200;
            break;
          default:
            cfsetospeed(&tty, B115200);
            cfsetispeed(&tty, B115200);  
            baud_val =B115200;
            break;  
    }              
    printf("baud rate is %d\n",baud_val);
    tty.c_cflag &= ~PARENB;
    tty.c_cflag &= ~CSTOPB;
    tty.c_cflag &= ~CSIZE;
    tty.c_cflag |= CS8;

    if (tcsetattr(serial_fd, TCSANOW, &tty) != 0) {
        perror("Error from tcsetattr");
        return 1;
    }

    char tx_buffer[] = "please send data\n";
    int tims=10;
    while(tims){
        tims--;
        ssize_t bytes_written = write(serial_fd, tx_buffer, sizeof(tx_buffer));
        if (bytes_written < 0) {
            perror("Error writing to serial port");
            close(serial_fd);
            return 1;
        }
        printf("\rtx_buffer: \n %s ", tx_buffer);
        usleep(100000);
        char rx_buffer[256];
        int bytes_read = read(serial_fd, rx_buffer, sizeof(rx_buffer));
        if (bytes_read > 0) {
            rx_buffer[bytes_read] = '\0';
            printf("\rrx_buffer: \n %s ", rx_buffer);
        } else {
            printf("        \n");
        }
    }
    close(serial_fd);

    return 0;
}

 

交叉编译,传到板子,修改执行属性。
205648rbpzivyb91ox333x.png
运行
选择串口,选择波特率
查看发送接收结果
205648w7255ep2oj621707.png
 
使用设备树开启串口0和串口1
我们拿到得是rg1106-pico-pro/max板 所以有串口0 和1 注意这里不是串口5!!!
从下面文件中查看:
205648gjm35q84rqubm24r.png
205648h4clkswsoob2hzo2.png
发现是rv1106g-luckfox-pico-pro-max.dts文件
找到这个文件
205648swn2hc3hwquumawq.png
去掉下面串口0 串口1的注释:
205648h49c2volv2s0vdzh.png
205648f7wrwiv7ipzizozo.png
编译内核
  1. 编译选择分支
    ./build.sh lunch
    选择8
  2. 重新编译内核: 好像只要几分钟(因为前面编过)
    205648hpdes7djp2jmbsps.png
    205648buak5fa01akh0r5i.png
    发现有两个文件更新了
    205648ek23urb2wd8r61n3.png
  3. 烧录固件 使用
      把文件上面文件和boot.img、download.bin、.env.txt拷贝到windows共享目录,用瑞芯微的烧录软件烧录:
     注意:如果Maskrom xx 没出来,就按板子的boot几秒钟,就出来了。
      然后选择搜索路径找到文件的路径,然后就都出来了,左边勾上要下载的文件,然后按下载就ok
205648yc3glrg7g979gcgg.png
205648tqpqccdu707ojqav.png
       4. 重新启动板子后连接板子查看,发现串口0 串口1 出来了
205648usoc801clwv88qjc.png
       把usb-ttl连接板子的串口1 和电脑的usb口试一下
205648bf6c6gjcjw24wfw6.png
     然后连接串口调试软件到usb-ttl显示的那个串口,波特率设置9600,并用命令操作串口一,
查看结果:发现串口是可以通信的,串口0就不试了。
205648qvgwezvptlgqh4fl.png
 
    上面的C程序也适合测试这个串口0 和串口1,只需要运行时输入串口号就行了。
 
    好先汇报到这里,谢谢大家。
本帖最后由 damiaa 于 2024-3-2 21:14 编辑

回复评论 (2)

版主大佬亲自上阵评测,学习了,这板子下载程序是不是特别麻烦呀?
点赞  2024-3-7 07:10
引用: lugl4313820 发表于 2024-3-7 07:10 版主大佬亲自上阵评测,学习了,这板子下载程序是不是特别麻烦呀?

谢谢鼓励。

下载很简单的,专门一个工具,把编译的文件加载进去用usb口烧录就行了。

和单片机差不多。只是分了一些文件 环境env文件、uboot、 内核、文件系统、工具等等,反正可以一次烧录进去。

点赞  2024-3-7 08:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复