[STM32F1] USART->DR接收数据

[复制链接]
1283|9
 楼主| 复仇之矛 发表于 2015-3-5 08:42 | 显示全部楼层 |阅读模式

各位大神,小白刚刚接触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:44 | 显示全部楼层
为什么同一个问题在同一个地方发两个贴?。。。。。
wowow 发表于 2015-3-5 11:09 | 显示全部楼层
去掉中断里面的delay_ms()
小浣熊 发表于 2015-3-5 20:34 | 显示全部楼层
wowow 发表于 2015-3-5 11:09
去掉中断里面的delay_ms()

为什么去掉中断里面的delay_ms()。我不是很明白呢
戈卫东 发表于 2015-3-5 20:59 | 显示全部楼层
小浣熊 发表于 2015-3-5 20:34
为什么去掉中断里面的delay_ms()。我不是很明白呢

因为在他delay()的时候,后面的数据丢失掉了。
玉洋子 发表于 2015-3-5 21:25 | 显示全部楼层
给个建议:在中断函数里面最好对标志位操作,然后在主函数里面对标志位判断、处理
 楼主| 复仇之矛 发表于 2015-3-6 08:43 | 显示全部楼层
戈卫东 发表于 2015-3-5 10:44
为什么同一个问题在同一个地方发两个贴?。。。。。

网速卡,点了两次,不好意思哈
 楼主| 复仇之矛 发表于 2015-3-6 08:45 | 显示全部楼层
wowow 发表于 2015-3-5 11:09
去掉中断里面的delay_ms()

对的,原因就在这个延时上,本以为的中断提醒,成了错误源
小浣熊 发表于 2015-3-7 00:01 | 显示全部楼层
戈卫东 发表于 2015-3-5 20:59
因为在他delay()的时候,后面的数据丢失掉了。

哦哦 是的:)
小班儿 发表于 2015-3-7 09:49 | 显示全部楼层
中断函数要尽量的短,不要有复杂或用时很长的函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

185

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部