急!急!急!UART串口问题
本帖最后由 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看的,也是很正常的,接收到新的数据就有)。这是咋回事??有没有人有过这方面的经验??????
看下while里的设置 lianhe1 发表于 2013-4-25 19:17 static/image/common/back.gif
看下while里的设置
感觉是没问题啊,当有新数据写入时,status寄存器中rx_ready位就会置1。我根据这位去读数据啊,读完后这位会清零的。 用示波器+打印调试
不过从你的描述来看还是软件问题居多,你可以尝试死循环调用pUART->rxdata(就是不管pUART->status的状态,强制读数据),查看所有的数据然后分析问题的所在 本帖最后由 zjwyczj 于 2013-4-28 12:19 编辑
jlass 发表于 2013-4-26 09:24 https://bbs.21ic.com/static/image/common/back.gif
用示波器+打印调试
不过从你的描述来看还是软件问题居多,你可以尝试死循环调用pUART->rxdata(就 ...
示波器不太好看啊异步数据,我用的qt里的signalTap看的,接收寄存器里的data是很正常的。而且状态寄存器的rx_ready看上去也很正常,新的数据一写入接收数据寄存器就变为 1.可是我根据这位从数据寄存器读出的数据就有时候对的有时候不对了。所以在纳闷呢。。。就是刚开始用打印调试发现输出的数据不对了,在用signalTap分析里边的信号的。还有我那模块的串行数据不是一直有的,是刚启动的时候发过来8字节,所以我只能在刚开始的时候读一下,循环里没法读啊。 zjwyczj 发表于 2013-4-28 12:16 static/image/common/back.gif
示波器不太好看啊异步数据,我用的qt里的signalTap看的,接收寄存器里的data是很正常的。而且状态寄存器 ...
所以才叫你死循环读(不要操作其他任何代码),先区分出到底是data的数据本身就不对,还是你的软件读取有问题。虽然其中会有大量的无效数据但是可以过滤一下,做一个数据比较,数据出现变化才打印。 jlass 发表于 2013-4-28 16:35 static/image/common/back.gif
所以才叫你死循环读(不要操作其他任何代码),先区分出到底是data的数据本身就不对,还是你的软件读取有 ...
我那模块的串行数据不是一直有的,是刚启动的时候发过来8字节,所以我只能在刚开始的时候读一下,循环里没法读啊。
页:
[1]