F407中全局变量值不稳定

2019-07-21 02:08发布

我在usart.c中定义了全局变量vu8 flag;在usart.h中声明为 extern vu8 flag;然后在usart.c中的串口中断处理函数中根据串口接收到的值来修改flag变量的值,
代码示意如下:(......表示其他代码省略)
void usart_hander()
{
   ........
   receive_data();
   .........
}
receive_data()
{
  u8 res;
  res=USART_ReceiveData(USART6);
  switch(res)
     case 0: flag=0;break
     case 1: flag=1;break;
     default:  flag=0;break;
  ...............................
}
然后在包含了usart.h的main.c中的主函数main()中扫描此标志
void main()
{
while(1)
 {
 if(flag==1)   {do a;}
 else {do b;}
 }
}
程序全速运行时用串口调试助手向串口发送数据1后发现main函数中只执行一次do a后flag值就变为0了,当在 receive_data();后加上延时函数delay_us(200);
后才flag的值才能一直稳定为1,而且这个延时最小为200us,小了就没用。此工程中就跑了这一个线程,为何全局变量赋值后稳定不下来,需要延时后才能稳定下来,难道是F407保存一个全局变量的值需要200us?这也太慢了吧,还是其他问题,求解。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。