打印
[STM32F1]

USART->DR接收数据

[复制链接]
900|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()。我不是很明白呢

使用特权

评论回复
5
戈卫东| | 2015-3-5 20:59 | 只看该作者
小浣熊 发表于 2015-3-5 20:34
为什么去掉中断里面的delay_ms()。我不是很明白呢

因为在他delay()的时候,后面的数据丢失掉了。

使用特权

评论回复
6
玉洋子| | 2015-3-5 21:25 | 只看该作者
给个建议:在中断函数里面最好对标志位操作,然后在主函数里面对标志位判断、处理

使用特权

评论回复
7
复仇之矛|  楼主 | 2015-3-6 08:43 | 只看该作者
戈卫东 发表于 2015-3-5 10:44
为什么同一个问题在同一个地方发两个贴?。。。。。

网速卡,点了两次,不好意思哈

使用特权

评论回复
8
复仇之矛|  楼主 | 2015-3-6 08:45 | 只看该作者
wowow 发表于 2015-3-5 11:09
去掉中断里面的delay_ms()

对的,原因就在这个延时上,本以为的中断提醒,成了错误源

使用特权

评论回复
9
小浣熊| | 2015-3-7 00:01 | 只看该作者
戈卫东 发表于 2015-3-5 20:59
因为在他delay()的时候,后面的数据丢失掉了。

哦哦 是的:)

使用特权

评论回复
10
小班儿| | 2015-3-7 09:49 | 只看该作者
中断函数要尽量的短,不要有复杂或用时很长的函数

使用特权

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

本版积分规则

23

主题

185

帖子

3

粉丝