打印
[i.MX]

正在用I.MX283,UART编程有些问题

[复制链接]
3474|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jhf7777777|  楼主 | 2015-5-16 12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.我使用I.MX UART0,1编程,程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>  
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>   
#include <limits.h>
#include <asm/ioctls.h>
#include <time.h>
#include <pthread.h>

#define DATA_LEN                0xFF                                    /* test data's len              */


//#define DEBUG                 1


/*********************************************************************************************************
** Function name:           openSerial
** Descriptions:            open serial port at raw mod
** input paramters:         iNum        serial port which can be value at: 1, 2, 3, 4
** output paramters:        NONE
** Return value:            file descriptor
** Create by:               zhuguojun
** Create Data:             2008-05-19
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
static int openSerial(char *cSerialName)
{
    int iFd;

    struct termios opt;

    iFd = open(cSerialName, O_RDWR | O_NOCTTY);                        
    if(iFd < 0) {
        perror(cSerialName);
        return -1;
    }

    tcgetattr(iFd, &opt);      

    //cfsetispeed(&opt, B57600);
    //cfsetospeed(&opt, B57600);

     cfsetispeed(&opt, B2400);
     cfsetospeed(&opt, B2400);

   
    /*
     * raw mode
     */
    opt.c_lflag   &=   ~(ECHO   |   ICANON   |   IEXTEN   |   ISIG);
    opt.c_iflag   &=   ~(BRKINT   |   ICRNL   |   INPCK   |   ISTRIP   |   IXON);
    opt.c_oflag   &=   ~(OPOST);
    opt.c_cflag   &=   ~(CSIZE   |   PARENB);
        opt.c_cflag   |=   PARENB;
        opt.c_cflag   &=   ~PARODD;
    opt.c_cflag   |=   CS8;
        opt.c_iflag   |= (INPCK | ISTRIP);
    /*
     * 'DATA_LEN' bytes can be read by serial
     */
    opt.c_cc[VMIN]   =   DATA_LEN;                                      
    opt.c_cc[VTIME]  =   150;

    if (tcsetattr(iFd,   TCSANOW,   &opt)<0) {
        return   -1;
    }


    return iFd;
}

int main(void)
{
        char tmp[1024];
        int len;
        int fd, i;
        char sendbuf[]={0xFE,0xFE,0xFE,0x68,0x46,0x53,0x00,0x13,0x27,0x00,0x00,0x00,0x01,0x03,0x90,0x1F};
    int lenbuf = sizeof(sendbuf);
        fd = openSerial("/dev/ttySP4");
        printf("serial test111!\n");
        for(i = 0; i < 16; i++)
                tmp[i] = i%0xFF;

        //write(fd, tmp, 16);
        write(fd,sendbuf,lenbuf);
        while (1) {
                len = read(fd, tmp, 0x01);       
                for(i = 0; i < len; i++)
                        printf(" %x", tmp[i]);
                printf("\n");
        }
}
然后外部RX和TX短接,发现上来的数据高位都变成了0,也就是接收本来正确的应该是0xfE,现在变成了0x7e,有时候还会出现
mxs-auart mxs-auart.1: Unhandled status 500400,
请问是啥问题

相关帖子

沙发
FSL_TICS_Rita| | 2015-6-17 17:27 | 只看该作者
楼主你好,请问你帖中的问题是否已经解决了呢?

使用特权

评论回复
板凳
FSL_TICS_Rita| | 2015-6-17 17:27 | 只看该作者
楼主很抱歉啊,前段时间休假了漏掉了好多帖子,欢迎有问题继续在本论坛中交流讨论哈~~

使用特权

评论回复
地板
FSL_TICS_Rita| | 2015-6-17 17:28 | 只看该作者
关于uart的调试建议你参考一下文档:
Debug UART Customization on i.MX6x.zip (1.05 MB)
希望对你有帮助的哈

使用特权

评论回复
5
FSL_TICS_Rita| | 2015-6-17 17:28 | 只看该作者
非常感谢你关于i.mx的技术问题。如果你没有其他问题,我们将此帖默认为已解决。
如果没有解决,欢迎继续在这里讨论哈~~

使用特权

评论回复
6
大苏牙| | 2015-6-17 20:47 | 只看该作者
波特率设置的正确吗,是不是有误差?

使用特权

评论回复
7
643757107| | 2015-6-17 22:02 | 只看该作者
晶振要选那种误差小的。

使用特权

评论回复
8
jhf7777777|  楼主 | 2015-8-9 20:04 | 只看该作者
谢谢FSL 答疑,已经解决了

使用特权

评论回复
9
jangel_lee| | 2015-10-6 10:03 | 只看该作者
jhf7777777 发表于 2015-8-9 20:04
谢谢FSL 答疑,已经解决了

请问你是怎么解决的

使用特权

评论回复
10
fyf350232349| | 2015-10-17 10:22 | 只看该作者
你好,我想请问一下,你的mxs-auart mxs-auart.0: Unhandled status 500080问题是怎么解决的

使用特权

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

本版积分规则

10

主题

29

帖子

0

粉丝