共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| Gravity:中英文语音合成模块V2.0及其串口控制被打赏¥24元 | |
| 全彩色度变化图的绘制被打赏¥27元 | |
| 【FreeRtos】FreeRtos任务栈的生长方向管理方式被打赏¥20元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LVGL添加输入设备:EC11旋转编码器被打赏¥39元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LVGL被打赏¥33元 | |
| 空气质量检测器设计与实现被打赏¥24元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LWIP进行UDP、TCP、HTTP、MQTT功能联合测试被打赏¥41元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LWIP被打赏¥36元 | |
| RTOS怎么选?让我来给你答案!被打赏¥15元 | |
| 【S32K3XX】Flash驱动使用被打赏¥26元 | |
我要赚赏金
