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[iPose]=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的状况,
菜鸟跪求大神指点? |