首页 > 代码库 > 飞凌ok6410的串口测试程序
飞凌ok6410的串口测试程序
调了好几天,问题很奇葩
不过最终还是解决了,先上代码吧
#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 512int 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岁的生日…太过意不去了…
飞凌ok6410的串口测试程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。