调了好几天,问题很奇葩
不过最终还是解决了,先上代码吧
#include <stdio.h>/*标准输入输出定义*/ #include <stdlib.h>/*标准函数库定义*/ #include <unistd.h>/*UNIX标准函数定义*/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>/*文件控制定义*/ #include <termios.h>/*PPSIX 终端控制定义*/ #include <errno.h>/*错误号定义*/ #include <string.h> #define STTY_DEV "/dev/ttySAC2" #define BUFF_SIZE 512 int main() { int stty_fd, n; char buffer[BUFF_SIZE]; struct termios opt; printf("---->> input test 1 !\n\n"); /*打开串口设备*/ stty_fd = open(STTY_DEV, O_RDWR|O_NOCTTY|O_NDELAY); if(stty_fd == -1) { perror("open device error"); return 0; } fcntl(stty_fd, F_SETFL, 0); printf("---->> input test 2 !\n\n"); //printf("---->> input test 3 !\n\n"); /*设置波特率 - 19200*/ cfsetispeed(&opt, B19200); cfsetospeed(&opt, B19200); //printf("---->> input test 4 !\n\n"); /*设置数据位 - 8位数据位*/ opt.c_cflag &= ~CSIZE; opt.c_cflag |= CS8; opt.c_cflag |= CREAD; opt.c_cflag |= CLOCAL; /*设置奇偶位 - 无奇偶校验*/ opt.c_cflag &= ~PARENB; opt.c_iflag &= ~INPCK; opt.c_iflag &= ~HUPCL; /*设置停止位 - 1位停止位*/ opt.c_cflag &= ~CSTOPB; /*设置超时时间 */ opt.c_cc[VTIME] = 0; opt.c_cc[VMIN] = 0; /*设置写入设备*/ tcflush(stty_fd, TCIOFLUSH); if(0 != tcsetattr(stty_fd, TCSANOW, &opt)) { perror("set baudrate"); return 0; } memset(buffer, 0, BUFF_SIZE); n = write(stty_fd, "hello world",11); /*读取数据,直到接收到‘quit’字符串退出*/ while(1) { n = read(stty_fd, buffer, BUFF_SIZE); if(n < 0) { perror("read data"); break; } if(n > 0) { buffer[n] = ‘\0‘; printf("%d\n", n); printf("%s\n", buffer); if(0 == strncmp(buffer, "quit", 4)) { printf("User send quit!\n"); break; } } } close(stty_fd); }
问题出在大约第三十行的地方,本来写了一句 tcgetattr(stty_fd, &opt);这句是用来获取当前串口状态的参数付给要设置的参数的
加了这句飞凌的板子上的串口就不能用,可能是原来默认设置的问题吧,总之,我记下只是为了以后的参考
论坛帖子: http://bbs.witech.com.cn/forum.php?mod=viewthread&tid=58085&page=1#pid197007
我忘记了我弟弟18岁的生日…太过意不去了…
时间: 2024-10-10 14:27:18