yuyy1989 发表于 2025-9-19 20:00

【STM32MP257学习笔记】6.串口通讯

串口通讯 是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持,在调试设备时也经常使用串口来输出调试信息,在linux中是通过终端设备文件进行串口通讯的
在 Linux 下终端的设备文件都位于/dev/目录下,以 tty* 开头的字符命名,可使用如下命令查看
ls /dev/tty*
Linux 下有一个专门的 stty 命令可以查看或设置终端的参数
stty//输出当前终端的配置参数
stty -F /dev/ttyACM0 //输出指定终端的配置参数
stty -F /dev/ttyACM0 speed 115200 cs8 -parenb -cstopb//设置终端波特率115200 8位数据位 1位停止位 无校验

输出指定内容到串口

显示串口接收到的内容(最要添加\n作为结束符)

编程实现串口通讯
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <termios.h>
#include <sys/ioctl.h>

#define TTY_PATH "/dev/ttyACM0"
#define TTY_BUFF_LEN 1024

int main(int argc,char **argv)
{
    int fd,res;
    u_int8_t buf;
    struct termios config;

    fd = open(TTY_PATH,O_RDWR);
    if(fd < 0)
    {
      printf("can not open %s\n",TTY_PATH);
      return -1;
    }
    tcflush(fd,TCIOFLUSH);
    tcgetattr(fd,&config);
    //设置波特率
    cfsetispeed(&config,B115200);
    cfsetospeed(&config,B115200);
    //接收使能
    config.c_cflag |= CREAD;
    //原始模式
    config.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    //禁用软件流控制
    config.c_iflag &= ~(IXON | IXOFF | IXANY);
    //禁用输出处理
    config.c_oflag &= ~OPOST;
    //设置数据位数
    config.c_cflag &= ~CSIZE;
    config.c_cflag |= CS8;
    //停止位1
    config.c_cflag &= ~CSTOPB;
    //无校验
    config.c_cflag &= ~PARENB;
    config.c_iflag &= ~INPCK;
    //超时500ms
    config.c_cc = 5;
    config.c_cc = 0;
    tcsetattr(fd, TCSANOW, &config);
    printf("/dev/ttyACM0 115200\n");
    while (1)
    {
      res = read(fd,buf,TTY_BUFF_LEN-1);
      if(res > 0)
      {
            buf = '\0';
            printf("receive %d: %s\n",res,buf);
            write(fd,"ttytest send:",13);
            write(fd,buf,res);
      }
    }
   
    close(fd);
    return 0;
}



地瓜patch 发表于 2025-10-14 16:57

printf("receive %d: %s\n",res,buf);是打印板卡收到的数据

write(fd,"ttytest send:",13);发送数据显示在串口助手中

星辰大海不退缩 发表于 2025-10-14 21:59

在linux中是通过终端设备文件进行串口通讯
页: [1]
查看完整版本: 【STM32MP257学习笔记】6.串口通讯