共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
