主题 : 关于设置  任意串口波特率  的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 14764
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2010-02-22
最后登录: 2017-09-13
楼主  发表于: 2010-02-22 15:49

 关于设置  任意串口波特率  的问题

各位大侠好:
    最近在用mini2440,linux下编一个任意串口波特率 的设置程序,网络上已经有参考例程


#include <termios.h>
#include <sys/ioctl.h>
#include <linux/serial.h>

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:%s\n",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:%s\n",strerror(errno));
        return -2;
    }

    ioctl(tty->fd,TIOCGSERIAL,&ss_set);
    dprintk("BAUD: success set baud to %d,custom_divisor=%d,baud_base=%d\n",
            baud,ss_set.custom_divisor,ss_set.baud_base);

    return 0;
}




但是我在做测试的时候,发现
ioctl(tty->fd,TIOCGSERIAL,&ss)
总是得不到串口的参数,即SS总是为0

也就无法继续进行了

请高手指点一下
我的邮箱mcu51net@163.com




QT 的布局怎么搞?
级别: 侠客
UID: 5575
精华: 0
发帖: 81
金钱: 485 两
威望: 193 点
综合积分: 162 分
注册时间: 2009-04-29
最后登录: 2013-12-02
1楼  发表于: 2010-02-23 11:53

 Re:关于设置 任意串口波特率 的问题

先看看/dev下是否有ttyS0这个设备.


你这个不是全部代码吧?
char    *device;/*/dev/ttyS0,...*/
初始化了吗?
在初始化时
XXXX->device="/dev/ttyS0";


.
[ 此帖被backup在2010-02-23 12:00重新编辑 ]
SBC2410+8' LCD
mini2440+NEt 3.5'