串口接受中断,在中断服务函数中写的控制等闪烁次数的代码。闪烁次数由串口接受的数据决定。为何运行时闪烁次数总是不对

2019-10-14 23:11发布

void USART1_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
        {
        u16 Res,i;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
                {
                Res =USART_ReceiveData(USART1);        //¶á衽óêÕμ½μÄêy¾Y                 
    }
  for(i=0;i<Res;i++)
        {
                USART_SendData(USART1,Res);
                LED0=!LED0;
                delay_ms(300);
                LED0=!LED0;
                delay_ms(300);
        }               
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
氢氦李铍硼
1楼-- · 2019-10-15 04:25
李广321 发表于 2017-2-25 22:38
试了一下全局变量,返回串口调试助手的值是正确的,但用的时候不对

你用上位机往下位机发值的时候是字符格式还是数字格式
1850334772qq
2楼-- · 2019-10-15 09:40
你的清除中断标志位那里去了
氢氦李铍硼
3楼-- · 2019-10-15 14:45
 精彩回答 2  元偷偷看……
李广321
4楼-- · 2019-10-15 16:00
1850334772qq 发表于 2017-2-25 15:47
你的清除中断标志位那里去了

USART_ClearFlag(USART1,USART_FLAG_RXNE);
添加清除标志位还是不行,闪烁次数不对
李广321
5楼-- · 2019-10-15 18:38
1850334772qq 发表于 2017-2-25 15:47
你的清除中断标志位那里去了

void USART1_IRQHandler(void)                        //′&#174;&#191;ú1&#214;D&#182;&#207;·t&#206;&#241;3ìDò
        {
          if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //&#189;óê&#213;&#214;D&#182;&#207;(&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y±&#216;D&#235;ê&#199;0x0d 0x0a&#189;á&#206;2)
                {
                   Res=USART_ReceiveData(USART1);        //&#182;áè&#161;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y       
       USART_SendData(USART1,Res);               
    }
                USART_ClearFlag(USART1,USART_FLAG_RXNE);
}

用串口调试助手,传入什么值返回什么值,但是这个数值用的时候就是不对
李广321
6楼-- · 2019-10-15 20:43
氢氦李铍硼 发表于 2017-2-25 21:25
串口中断函数最好不要这么写,中断时间太长了,很容易出现各种各样的问题。你可以把Res设置为全局变量,根 ...

用过了,和不是全局变量一样。我再试一下看看

一周热门 更多>