【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;
}
printf("receive %d: %s\n",res,buf);是打印板卡收到的数据
write(fd,"ttytest send:",13);发送数据显示在串口助手中 在linux中是通过终端设备文件进行串口通讯
页:
[1]