作为高铁高校结业的中学生,难免和高铁设备打交道。机车安全信息综合检查装置(简称TAX箱)就是这样一个雷人的设备,数据输出的码率为28800.而通用的并口码率设置方式并没有配置成这个码率的方式。没有办法,只能查资料。各类搜索引擎尝试了以后,发觉也有臣子遇见这些问题,而且基本所有的搜索条目都指向了同一个贴子,或则其复制品。而这个贴子只给出了思路和部份代码,没有给出可运行的程序,无奈,只能自己去尝试,去更改,去建立,最终成功搞定,记录一下,供后来人使用,如需转载,请标明出处马哥linux,感谢。
对于非标准的任意码率须要用ioctl(fd,TIOCGSERIAL,p)和ioctl(fd,TIOCSSERIAL,p)的配合,ioctl的最后一个参数是structserial_struct*类型,在linux/serial.h中定义。其中baud_base是基准晶振频度/16,一般是115200linux串口波特率,你须要设的是custom_divisor这个值,最终的码率为baud_base/custom_divisor,例如你须要28800,由于115200/4=28800,所以要设置custom_divisor=4,。
具体过程为,先设置码率设为38400(tcsetattr),之后用TIOCGSERIAL得到当前的设置,将flags设置ASYNC_SPD_CUST位,设置custom_divisor红旗linux系统,最后用TIOCSSERIAL设置。
使用setserial虽然就是借助上述方式,来设置baud_base,custom_divisor等,其内部实现就是使用ioctl来进行设置。
网上的东西真的是良莠不齐,希望能呈现建立的正确的Blog给你们。附代码如下,如有疑惑,欢迎留言讨论。因为是测试代码,只是保证可以运行。另外推荐一个并口调试助手AccessPortlinux串口波特率,可以提供28800的并口比特率作为测试。