共2条
1/1 1 跳转至页

问
我在编PC机和ARM通过串口通讯的程序,调试中遇到了奇怪的问题。
我在ARM中用Uart_Getch()函数接收字符,用PC机发字符0x55和0xaa,ARM中调用两次Uart_Getch()接收,存到数组RvData[]中。
ARM中的程序如下:
RvData[0]=Uart_Getch();
RvData[1]=Uart_Getch();
奇怪的是:
当我分两次把0x55和0xaa填入上位机程序的发送区,点击“发送”按钮发送后,ARM可以正确地收到两个数据。但是,当我把0x55和0xaa一起填入上位机程序的发送区,点击“发送”按钮发送后,ARM只接收到0x55,RvData[1]=Uart_Getch()这句程序还在等待接收中断,说明0xaa没有接收到,就丢失了。
难道Uart_Getch()还没把0x55从接收缓冲保持寄存器中读出,0xaa就传输到了,造成了0xaa的丢失。
另外,我用上位机给单片机发0x55和0xaa,却可以正确收到这两个数据。按理说,ARM和单片机的接收原理都是一样的,都是等待中断的啊。 答 1: re:ARM比51快啊,你的ARM接收不到是由于你在第二个数据没有进来的时候就去读寄存器了 答 2: 看看这个函数的原形或者跟踪一下我通常的做法是直接控制硬件,不用系统提供的这些函数。没出现过这种问题。 答 3: RE:Uart_Getch()的函数原型如下:
char Uart_Getch(void)
{
if(whichUart==0)
{
while(!(rUTRSTAT0 & 0x1)); //Receive data read
return RdURXH0();
}
else
{
while(!(rUTRSTAT1 & 0x1)); //Receive data ready
return rURXH1;
}
}
我觉得这个函数和51不同的是:51的接收中断RI是自己手动清零,而ARM中rUTRSTAT0不是手动清零.
我在Uart_Getch()后加了rUTRSTAT0=rUTRSTAT0&0x0,但是RvData[1]中收到的还不是我想要的0xaa.
我以前用单片机通过串口和ARM通讯,使用Uart_Getch()进行数据接收都没有出过问题,为什么偏偏接收PC机的数据时会出问题啊? 答 4: 又有了新的问题我现在连续发多个0x55,ARM可以正确接收到.但我发其他数据时,却不能全部收到正确的数据.
我在ARM中用Uart_Getch()函数接收字符,用PC机发字符0x55和0xaa,ARM中调用两次Uart_Getch()接收,存到数组RvData[]中。
ARM中的程序如下:
RvData[0]=Uart_Getch();
RvData[1]=Uart_Getch();
奇怪的是:
当我分两次把0x55和0xaa填入上位机程序的发送区,点击“发送”按钮发送后,ARM可以正确地收到两个数据。但是,当我把0x55和0xaa一起填入上位机程序的发送区,点击“发送”按钮发送后,ARM只接收到0x55,RvData[1]=Uart_Getch()这句程序还在等待接收中断,说明0xaa没有接收到,就丢失了。
难道Uart_Getch()还没把0x55从接收缓冲保持寄存器中读出,0xaa就传输到了,造成了0xaa的丢失。
另外,我用上位机给单片机发0x55和0xaa,却可以正确收到这两个数据。按理说,ARM和单片机的接收原理都是一样的,都是等待中断的啊。 答 1: re:ARM比51快啊,你的ARM接收不到是由于你在第二个数据没有进来的时候就去读寄存器了 答 2: 看看这个函数的原形或者跟踪一下我通常的做法是直接控制硬件,不用系统提供的这些函数。没出现过这种问题。 答 3: RE:Uart_Getch()的函数原型如下:
char Uart_Getch(void)
{
if(whichUart==0)
{
while(!(rUTRSTAT0 & 0x1)); //Receive data read
return RdURXH0();
}
else
{
while(!(rUTRSTAT1 & 0x1)); //Receive data ready
return rURXH1;
}
}
我觉得这个函数和51不同的是:51的接收中断RI是自己手动清零,而ARM中rUTRSTAT0不是手动清零.
我在Uart_Getch()后加了rUTRSTAT0=rUTRSTAT0&0x0,但是RvData[1]中收到的还不是我想要的0xaa.
我以前用单片机通过串口和ARM通讯,使用Uart_Getch()进行数据接收都没有出过问题,为什么偏偏接收PC机的数据时会出问题啊? 答 4: 又有了新的问题我现在连续发多个0x55,ARM可以正确接收到.但我发其他数据时,却不能全部收到正确的数据.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |