函数解析,路过写下你的答案吧

2017年04月08日 11:08    发布者:FWW7
    while (1)
                {
                        if(flag==0x01)
                        {
                                flag=0;//标志位清0
                                iPose=0;
                                USART1_Printf("123456789");
                                memcpy(&XY2_position,Receie_data,9);
                                if(XY2_position.num)Line_Bresenham(XY2_position.x0,XY2_position.y0,XY2_position.x1,XY2_position.y1);
                                else                      Line_DDA(XY2_position.x0,XY2_position.y0,XY2_position.x1,XY2_position.y1);
                        }
                }
}
void USART1_IRQHandler(void)        //串口1中断函数
{
        USART_ClearFlag(USART1,USART_FLAG_TC);
        if(USART1->SR & 0x00000020)//检查指定的USART中断发生与否
        {
                Receie_data=USART1->DR & (uint16_t)0x01FF;//读取接收到的数据
                iPose++;//计数器加1
                if(iPose==9)flag=0x01;               
                USART1->DR = (flag & (uint16_t)0x01FF);
                while((USART1->SR&0x00000040) == 0);//准备发送一个数据        
        }
}
程序在一个STM32单片机上运行,可以检测到反馈的数据正常,但是单片机检测不到  flag==1,但是串口反馈的数据中到第9个字节数据时,flag确实=1
更换一个单片机后,程序第一次运行正常,在第二次就会出现flag始终等于1的状况这个是怎么做的?