完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
通常,在linux下面,设置串口使用终端IO的相关函数设置,如tcsetattr等函数,linux内部有一个对常用波特率列表的索引,根据设置的波特率用底层驱动来设置异步通信芯片的寄存器 对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和ioctl(fd, TIOCSSERIAL, p)的配合,ioctl的最后一个参数是struct serial_struct *类型,在linux/serial.h中定义。其中baud_base是基准晶振频率/16,通常是115200,你需要设的是custom_divisor这个值,最终的波特率为baud_base/custom_divisor,比如你需要28800,因为115200/4=28800,所以要设置custom_divisor=4,。 具体过程为,先设置波特率设为38400(tcsetattr),然后用TIOCGSERIAL得到当前的设置,将flags设置ASYNC_SPD_CUST位,设置custom_divisor,最后用TIOCSSERIAL设置。 使用setserial其实就是利用上述方法,来设置baud_base, custom_divisor等, 其内部实现就是使用ioctl来进行设置, 另外还可以用硬件更换晶振,根据比例来达到使用一些非标准的波特率的目的. 参考: http://blog.ednchina.com/seam_liu/7181/post.aspx #include #include #include struct serial_t { int fd; char *device;/*/dev/ttyS0,...*/ int baud; int databit;/*5,6,7,8*/ char parity;/*O,E,N*/ int stopbit;/*1,2*/ int startbit;/*1*/ struct termios options; }; //设置为特诉波特率,比如28800 int serial_set_speci_baud(struct serial_t *tty,int baud) { struct serial_struct ss,ss_set; cfsetispeed(&tty->options,B38400); cfsetospeed(&tty->options,B38400); tcflush(tty->fd,TCIFLUSH);/*handle unrecevie char*/ tcsetattr(tty->fd,TCSANOW,&tty->options); if((ioctl(tty->fd,TIOCGSERIAL,&ss))<0){ dprintk("BAUD: error to get the serial_struct info:%sn",strerror(errno)); return -1; } ss.flags = ASYNC_SPD_CUST; ss.custom_divisor = ss.baud_base / baud; if((ioctl(tty->fd,TIOCSSERIAL,&ss))<0){ dprintk("BAUD: error to set serial_struct:%sn",strerror(errno)); return -2; } ioctl(tty->fd,TIOCGSERIAL,&ss_set); dprintk("BAUD: success set baud to %d,custom_divisor=%d,baud_base=%dn", baud,ss_set.custom_divisor,ss_set.baud_base); return 0; } 用法:只要指定serial_t的baud就可以了 static struct serial_t __seri_conf[] = { [0] = {//connect with b board, ttyS0 .device = "/dev/ttyS0", .baud = 28800, .databit = 8, .parity = 'N', .stopbit = 1, }, }; |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1924 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2406 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5193 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:17 , Processed in 0.644941 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号