搜索
bottom↓
回复: 4

求助 关于串口通讯 LPC2132 如果程序接收的数据大于程序设定的接收位 如何

[复制链接]

出0入0汤圆

发表于 2010-10-11 22:27:09 | 显示全部楼层 |阅读模式
具体现象:
LPC2132程序设置接受PC发送的 6位数据,并返回给PC接收的6位数据 。但是如果,PC一次发送8位数据给LPC2132,则第一次接收的数据为PC发送的前6位数据,第二次PC发送8位数据值LCP2132的时候,返回的数据为前一次接收的最后一位数据+但前接收的前5位数据!  查看手册中解释 U0RBR 为只读,那我如何做才能把 多余的数据舍弃?


uint8 UART0_SeceiveByte (void)
{        uint8 data;
        while((U0LSR&0x01)==0);         //µÈ´ýÊý¾Ý½ÓÊÕ
        data=U0RBR;
        return (data);

}

void get_com0(uint8  *s,uint32 n)
{
        int nm;
        for(nm=0;nm<n;nm++)
        //for (;n>0;n--)
        {
        jshou[(nm)]=UART0_SeceiveByte();
        }


}

void send_com0(uint8 const *aa,uint32 n)
{
//while(1)
// {
int nm1;
for (nm1=0;nm1<n;nm1++)
{
//if(*aa=='\0')  break;
UART0_SendByte (jshou[(nm1)]);
}

}

int main (void)
{
        int k;
        int m,i;
       
        char *tem11;
        char *tem00,jieshou;
       
        int   biaozhi;
        uint8 kan1,kan2;
        float fa,fb,fc,fd,fe;
       
       
       
        biaozhi=0;
        shi=19;
        fen=13;
        miao=0;
        //PINSEL0 = 0x00000000;                // &Eacute;è&Ouml;&Atilde;&sup1;&Uuml;&frac12;&Aring;&Aacute;&not;&frac12;&Oacute;GPIO
        PINSEL0 = 0x00000005;            // &sup1;&Uuml;&frac12;&Aring;&Aacute;&not;&frac12;&Oacute;&acute;&reg;&iquest;&Uacute;UART0
        PINSEL1 = 0x00000000;       
        PINSEL2 = 0x00000004;            //&Eacute;è&Ouml;&Atilde;&sup1;&Uuml;&frac12;&Aring;&Aacute;&not;&frac12;&Oacute;GPIO       
        IO0DIR = 0x00000000 ;
        IO0CLR = 0x00000000 ;
        IO0SET = 0x00000000 ;
        IO0CLR = 0x00000000 ;       
       
        UART0_Init();                               
        while (1)
        {
                 get_com0(jshou,6);
                DelayNS(10);               
                 send_com0(jshou,6);
                 DelayNS(10);
                if ((U0LSR&0x01)==0) IO1CLR|=(1<<17);
                else IO1CLR|=(1<<17);
        }
        return -1;

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-10-11 22:55:56 | 显示全部楼层
U0FCR 这个寄存器 可以清除 FIFO 中的数据  bit1 置位是 Rx FIFO  bit2 是Tx FIFO


另外你也可以把接收FIFO 设置大点 比如 8/14  然后软件屏蔽掉不用的

出0入0汤圆

 楼主| 发表于 2010-10-12 21:11:09 | 显示全部楼层
回复【1楼】A-smith
u0fcr 这个寄存器 可以清除 fifo 中的数据  bit1 置位是 rx fifo  bit2 是tx fifo
另外你也可以把接收fifo 设置大点 比如 8/14  然后软件屏蔽掉不用的
-----------------------------------------------------------------------

谢谢  

如果使用U0FCR  寄存器的bit2 位  清除fifo中的数据,那么在什么时候清除这个判断就比较难把握了。
第二种把接收点设置大点的啊,考虑还是会有点小问题,例如设置为接受12个数据,第一次发送8个,第二次发送8个那么接收到的数据就是第一次发送的8个+第二次发送的4个。循环下去的话就无法判断哪个数据是正确的了? 当然这个前提是没有约定数据格式是以何种格式开始,和结束!

出0入0汤圆

发表于 2010-10-12 21:55:15 | 显示全部楼层
1 FIFO 只能设置成 1 4 8 14 4种中的一种

2 给数据包加上包头包尾和效验=来区分不同的数据包   虽然增加了数据长度但是可靠性高

出0入0汤圆

 楼主| 发表于 2010-10-12 22:24:31 | 显示全部楼层
回复【3楼】A-smith
-----------------------------------------------------------------------

再次感谢您的耐心指导!
目前使用的查询方式接收数据!正在思考如何写程序,串口程序是新事物,正在一边根据例程测试。一边学习!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 02:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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