打印
[STM32F1]

USART->DR接收数据

[复制链接]
1977|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
复仇之矛|  楼主 | 2015-3-5 08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

各位大神,小白刚刚接触STM32,在练习串口时,出现一下问题,请教各位了,此次先谢谢指教的大神。
程序在接收数据时,电脑调试助手发送16进制比如同时36 39 38和结束字符OD时,只接收并显示(LCD)到36,但是依次发送时却能显示36 39 38,不知问题出在何处,请大神指点。
此次贴上中断处理函数

u8 USART2_RX_STA=0;      
  
void USART2_IRQHandler(void)
{
        u8 res;        
         BEEP=0;
         delay_ms(1);
         BEEP=1;
         delay_ms(10);
         BEEP=0;
if(USART2->SR&(1<<5))
{
         res=USART2->DR;
         if(res==0x0D)
         {
    USART2_RX_STA|=0x80;
                 finish=1;
    }
                else
                {
   USART2_RX_BUF[USART2_RX_STA&0X3F]=res;
   USART2_RX_STA++;
     if(USART2_RX_STA>(USART2_MAX_LEN-1))
           {
                 USART2_RX_STA=0;
     }
    }        
}                                                                        
}
沙发
戈卫东| | 2015-3-5 10:34 | 只看该作者
中断服务程序里面做软件延时不是好主意啊。

使用特权

评论回复
板凳
戈卫东| | 2015-3-5 10:39 | 只看该作者
问题可能就在延时上面。ST的手册说,如果RXNE非0,那么后来接收到的数据不会保存到DR,而是丢掉了。
你在UART中断里面延时了若干毫秒才去读DR,第一个字节可以得到,后面的都因为RXNE非0而丢了。

使用特权

评论回复
地板
复仇之矛|  楼主 | 2015-3-6 08:48 | 只看该作者
戈卫东 发表于 2015-3-5 10:39
问题可能就在延时上面。ST的手册说,如果RXNE非0,那么后来接收到的数据不会保存到DR,而是丢掉了。
你在UA ...

恩恩

使用特权

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

本版积分规则

23

主题

185

帖子

3

粉丝