打印

急!急!急!UART串口问题

[复制链接]
1660|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjwyczj|  楼主 | 2013-4-25 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zjwyczj 于 2013-4-25 18:48 编辑

程序大概是这样
main()
{
  init_A();//①
  for(i=0;i<8;i++)
  {
    a(i)=UART_readdata(UART0); ②显示问题,我把a数组的方括号这里写成括号
  }
  UART_TR(a,8);③
  while(1)
  {}
}  程序大概是这样

A模块是我的一个设备,初始化发一个信号,然后发回一串8字节的标准的串口数据。9600波特            率,7位数据,一个停止位,偶校验。*/
②/*这里是接受串口数据,其中UART_readdata(UART0)函数具体为
    UINT8 UART_readdata(UART_typed *pUART)
   {
     while(pUART->status & Rx_Ready)=0;  //等到可以读接受寄存器标志为1,读取收寄存器的数据
     return pUART->rxdata;
   }
③这是uart将8字节数据发送出去,即发送到电脑上看。

问题:我通过qt里的signalTab(就相当于逻辑分析仪吧)软件分析A设备引进传输回来的串行数据是正确的。然后我又看uart模块的数据接受寄存器rxdata里的数据,也都是对的。然而我把从rxdata寄存器读取数据存到 a数组里(如②所示),最后a 数组 里的8byte数据就有时候对的,有时候少一个两个,有时候就乱了,有时候不是想要的数据,还有时候死在while里了(没接收到rx_ready信号??可是那信号我还是用signalTab看的,也是很正常的,接收到新的数据就有)。这是咋回事??有没有人有过这方面的经验??????

相关帖子

沙发
lianhe1| | 2013-4-25 19:17 | 只看该作者
看下while里的设置

使用特权

评论回复
板凳
zjwyczj|  楼主 | 2013-4-25 19:27 | 只看该作者
lianhe1 发表于 2013-4-25 19:17
看下while里的设置

感觉是没问题啊,当有新数据写入时,status寄存器中rx_ready位就会置1。我根据这位去读数据啊,读完后这位会清零的。

使用特权

评论回复
地板
jlass| | 2013-4-26 09:24 | 只看该作者
用示波器+打印调试

不过从你的描述来看还是软件问题居多,你可以尝试死循环调用pUART->rxdata(就是不管pUART->status的状态,强制读数据),查看所有的数据然后分析问题的所在

使用特权

评论回复
5
zjwyczj|  楼主 | 2013-4-28 12:16 | 只看该作者
本帖最后由 zjwyczj 于 2013-4-28 12:19 编辑
jlass 发表于 2013-4-26 09:24
用示波器+打印调试

不过从你的描述来看还是软件问题居多,你可以尝试死循环调用pUART->rxdata(就 ...


示波器不太好看啊异步数据,我用的qt里的signalTap看的,接收寄存器里的data是很正常的。而且状态寄存器的rx_ready看上去也很正常,新的数据一写入接收数据寄存器就变为 1.可是我根据这位从数据寄存器读出的数据就有时候对的有时候不对了。所以在纳闷呢。。。就是刚开始用打印调试发现输出的数据不对了,在用signalTap分析里边的信号的。还有我那模块的串行数据不是一直有的,是刚启动的时候发过来8字节,所以我只能在刚开始的时候读一下,循环里没法读啊。

使用特权

评论回复
6
jlass| | 2013-4-28 16:35 | 只看该作者
zjwyczj 发表于 2013-4-28 12:16
示波器不太好看啊异步数据,我用的qt里的signalTap看的,接收寄存器里的data是很正常的。而且状态寄存器 ...

所以才叫你死循环读(不要操作其他任何代码),先区分出到底是data的数据本身就不对,还是你的软件读取有问题。虽然其中会有大量的无效数据但是可以过滤一下,做一个数据比较,数据出现变化才打印。

使用特权

评论回复
7
zjwyczj|  楼主 | 2013-5-31 20:45 | 只看该作者
jlass 发表于 2013-4-28 16:35
所以才叫你死循环读(不要操作其他任何代码),先区分出到底是data的数据本身就不对,还是你的软件读取有 ...

我那模块的串行数据不是一直有的,是刚启动的时候发过来8字节,所以我只能在刚开始的时候读一下,循环里没法读啊。

使用特权

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

本版积分规则

40

主题

204

帖子

2

粉丝