天嵌 ARM开发社区

 找回密码
 注册
查看: 3954|回复: 12

关于qtopia2.2.0串口发送数据的困惑

[复制链接]
ZNbutterfly 发表于 2010-5-14 15:49:23 | 显示全部楼层 |阅读模式
void mycom::sentdatas()
{
       
        if(fd1!=-1)
        {
        QString str=LineEdit_sentdatas->displayText();
                write(fd1,str,strlen(str));
        }
        else
                qWarning("Can't Open Serial Port");
}
上面是发送部分的代码,编译后下到板子上出现比较诡异的情况

打开串口1,板子向PC发送字符串,关闭控制终端,PC上用一般的串口调试助手接收,一直显示是中文繁体乱码

但是,如果先不用串口调试助手,直接在控制终端上显示,  先显示乱码,敲回车之后,再发送就能正确显示,此时,关闭控制终端,打开串口调试助手也能正确接收收到的字符了

PC上能正确接收,说明波特率设置这些都是正确的。但为什么会出现乱码呢?
亚瑟王 发表于 2010-5-14 15:55:37 | 显示全部楼层
检查一下你的程序中初始化串口部分的代码。
回复

使用道具 举报

 楼主| ZNbutterfly 发表于 2010-5-16 11:09:29 | 显示全部楼层
本帖最后由 ZNbutterfly 于 2010-5-16 11:11 编辑

void mycom:: openmycom()
{
        fd1=OpenDev(dev); //选择的是串口1
        if(fd1==-1)
                {
                        printf("Can't Open Serial Port");
                }
        else       
                {
                        set_speed(fd1,SPEED);
                        set_Parity(fd1);
                }
}

这是初始化部分   里面的函数用的都是教程上的
回复

使用道具 举报

 楼主| ZNbutterfly 发表于 2010-5-17 16:53:26 | 显示全部楼层
网上查了下资料   
觉的可能是字符编码的问题

如果是这个问题该怎么解决呢?
回复

使用道具 举报

亚瑟王 发表于 2010-5-18 11:31:02 | 显示全部楼层
波特率设置的是多少?
字符编码这个可能性不大。
回复

使用道具 举报

 楼主| ZNbutterfly 发表于 2010-5-18 13:12:13 | 显示全部楼层
波特率设置的是115200
set_speed(fd1,115200)
void mycom::set_speed(int fd,int speed)
{
        int i;
        int status;
        struct termios Opt;
        tcgetattr(fd,&Opt);
        printf("speed is %d\n",speed);
        for(i=0;i<sizeof(speed_arr)/sizeof(int);i++)
        {
                if(speed==name_arr[i])
                {
                        tcflush(fd,TCIOFLUSH);
                        cfsetispeed(&Opt,speed_arr[i]);
                        cfsetospeed(&Opt,speed_arr[i]);
                        status=tcsetattr(fd,TCSANOW,&Opt);
                        if(status!=0)
                        {
                                perror("tcsetattr fd1");
                                return;
                        }
                        tcflush(fd,TCIOFLUSH);
                }
        }
}
回复

使用道具 举报

亚瑟王 发表于 2010-5-19 17:35:15 | 显示全部楼层
void mycom::set_speed(int fd,int speed)
{
        int i;
        int status;
        struct termios Opt,OldOpt;
        tcgetattr(fd,&OldOpt);
        printf("speed is %d\n",speed);
把你的代码中的Opt改成红色部分所示。
回复

使用道具 举报

vvb9137 发表于 2012-2-11 14:12:03 | 显示全部楼层
亚瑟王 发表于 2010-5-19 17:35
void mycom::set_speed(int fd,int speed)
{
        int i;

你好 请问   串口怎么发送十六进制数啊?    例如发送cmd[3]=(0x05,0xhh,0x8h)
回复

使用道具 举报

亚瑟王 发表于 2012-2-13 11:55:07 | 显示全部楼层
亲,直接发送0xXX就行。
回复

使用道具 举报

vvb9137 发表于 2012-2-27 21:28:12 | 显示全部楼层
亚瑟王 发表于 2012-2-13 11:55
亲,直接发送0xXX就行。

亚瑟王  麻烦帮我看看,这样为什么设置不了串口的波特率?
void Widget::set_speed(int fd)
{



        int status;
                struct termios Opt;
                struct termios oldOpt;
                tcgetattr(fd, &oldOpt);
                tcflush(fd, TCIOFLUSH);
                cfsetispeed(&Opt, B115200);
                cfsetospeed(&Opt, B115200);
                status = tcsetattr(fd, TCSANOW, &Opt);

                if(status != 0)
                {
                    ui->textBrowser->insertPlainText("speed");
                }
              tcflush(fd, TCIOFLUSH);
}
回复

使用道具 举报

TQ-lkp 发表于 2012-2-28 14:33:44 | 显示全部楼层
vvb9137 发表于 2012-2-27 21:28
亚瑟王  麻烦帮我看看,这样为什么设置不了串口的波特率?
void Widget::set_speed(int fd)
{

先打开设备再进行设置,另外你设置不了报的什么错?
回复

使用道具 举报

vvb9137 发表于 2012-2-28 15:34:36 | 显示全部楼层
TQ-lkp 发表于 2012-2-28 14:33
先打开设备再进行设置,另外你设置不了报的什么错?

哦哦 PC上是可以的   到开发板就不行!
回复

使用道具 举报

TQ-lkp 发表于 2012-2-28 18:15:06 | 显示全部楼层
报什么错嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-4 11:52 , Processed in 2.032085 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表