打印

Linux下如何设置256000串口波特率

[复制链接]
3734|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cxphope|  楼主 | 2018-5-25 13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// 设置为特殊波特率,比如200000
int set_speci_baud(int fd, int baud)
{
        struct serial_struct ss, ss_set;
        struct termios Opt;
        tcgetattr(fd, &Opt);
        cfsetispeed(&Opt, B38400);
        cfsetospeed(&Opt, B38400);
        tcflush(fd, TCIFLUSH);/*handle unrecevie char*/
        tcsetattr(fd, TCSANOW, &Opt);
        if((ioctl(fd, TIOCGSERIAL, &ss)) < 0)
        {
                printf("BAUD: error to get the serial_struct info:%s\n", strerror(errno));
                return -1;
        }
        ss.flags = ASYNC_SPD_CUST;
        ss.custom_divisor = ss.baud_base/baud;
        if((ioctl(fd, TIOCSSERIAL, &ss)) < 0)
        {
                printf("BAUD: error to set serial_struct:%s\n", strerror(errno));
                return -2;
        }
        ioctl(fd, TIOCGSERIAL, &ss_set);
        printf("BAUD: success set baud to %d,custom_divisor=%d,baud_base=%d\n",baud, ss_set.custom_divisor, ss_set.baud_base);
        return 0;
}
我用这段代码设置只能设置到最接近的250000,分辨率不够,请问还有什么别的方法吗

相关帖子

沙发
dukedz| | 2018-5-26 00:04 | 只看该作者
你到底要設置多少?標題是 256000, 註釋是 200000, 代碼是 38400.

設定任意波特率可以直接使用我的這個函數:
https://github.com/dukelec/cdnet_tun/blob/master/usr/uart_dev.c

具體準確度跟硬件芯片有關,你這波特率不高,應該可以比較準確,至少 USB 轉 串口 的芯片可以。。。

使用特权

评论回复
板凳
cxphope|  楼主 | 2018-6-4 15:09 | 只看该作者
dukedz 发表于 2018-5-26 00:04
你到底要設置多少?標題是 256000, 註釋是 200000, 代碼是 38400.

設定任意波特率可以直接使用我的這個函 ...

那个注释是原来的没改,代码里的38400是设置任意波特率必须先设置成38400再往下设置操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝