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

[复制链接]
553|0
yuyy1989 发表于 2025-9-19 20:00 | 显示全部楼层 |阅读模式
串口通讯 是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持,在调试设备时也经常使用串口来输出调试信息,在linux中是通过终端设备文件进行串口通讯的
在 Linux 下终端的设备文件都位于/dev/目录下,以 tty* 开头的字符命名,可使用如下命令查看
  1. ls /dev/tty*
屏幕截图 2025-09-17 201602.png
Linux 下有一个专门的 stty 命令可以查看或设置终端的参数
  1. stty//输出当前终端的配置参数
  2. stty -F /dev/ttyACM0 //输出指定终端的配置参数
  3. stty -F /dev/ttyACM0 speed 115200 cs8 -parenb -cstopb//设置终端波特率115200 8位数据位 1位停止位 无校验
屏幕截图 2025-09-17 202532.png
屏幕截图 2025-09-17 203718.png
输出指定内容到串口
屏幕截图 2025-09-17 203839.png
显示串口接收到的内容(最要添加\n作为结束符)
屏幕截图 2025-09-17 204225.png
编程实现串口通讯
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <stdio.h>
  5. #include <errno.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <stdlib.h>
  9. #include <termios.h>
  10. #include <sys/ioctl.h>

  11. #define TTY_PATH "/dev/ttyACM0"
  12. #define TTY_BUFF_LEN 1024

  13. int main(int argc,char **argv)
  14. {
  15.     int fd,res;
  16.     u_int8_t buf[TTY_BUFF_LEN];
  17.     struct termios config;

  18.     fd = open(TTY_PATH,O_RDWR);
  19.     if(fd < 0)
  20.     {
  21.         printf("can not open %s\n",TTY_PATH);
  22.         return -1;
  23.     }
  24.     tcflush(fd,TCIOFLUSH);
  25.     tcgetattr(fd,&config);
  26.     //设置波特率
  27.     cfsetispeed(&config,B115200);
  28.     cfsetospeed(&config,B115200);
  29.     //接收使能
  30.     config.c_cflag |= CREAD;
  31.     //原始模式
  32.     config.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
  33.     //禁用软件流控制
  34.     config.c_iflag &= ~(IXON | IXOFF | IXANY);
  35.     //禁用输出处理
  36.     config.c_oflag &= ~OPOST;
  37.     //设置数据位数
  38.     config.c_cflag &= ~CSIZE;
  39.     config.c_cflag |= CS8;
  40.     //停止位1
  41.     config.c_cflag &= ~CSTOPB;
  42.     //无校验
  43.     config.c_cflag &= ~PARENB;
  44.     config.c_iflag &= ~INPCK;
  45.     //超时500ms
  46.     config.c_cc[VTIME] = 5;
  47.     config.c_cc[VMIN] = 0;
  48.     tcsetattr(fd, TCSANOW, &config);
  49.     printf("/dev/ttyACM0 115200\n");
  50.     while (1)
  51.     {
  52.         res = read(fd,buf,TTY_BUFF_LEN-1);
  53.         if(res > 0)
  54.         {
  55.             buf[res] = '\0';
  56.             printf("receive %d: %s\n",res,buf);
  57.             write(fd,"ttytest send:",13);
  58.             write(fd,buf,res);
  59.         }
  60.     }
  61.    
  62.     close(fd);
  63.     return 0;
  64. }
屏幕截图 2025-09-19 143347.png



您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:同飞软件研发工程师
简介:制冷系统单片机软件开发,使用PID控制温度

168

主题

826

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部