我在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?这也太慢了吧,还是其他问题,求解。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
试试把keil的优化级别设为0.
一周热门 更多>