主函数读取是0,但是回调函数已经给改了,并且每次自加都是从上次 的基础上,打印正常。我把主函数中的不正常的数据提出来封装成回调就可以了。但是有个串口文件中定义的标志位又出问题(main中原来是没问题的)。标志位初始化为0,串口中断置1,回调函数检测到1后清零(清完打印确实为0)。但是这个判断还是能进去,我尝试在串口中断里自加没影响,说明只进了一次串口中断。我在if上面打印标志位时发现正常了。后来发现是只要加了串口发送的程序(if判断上面和if里的第一条语句)就会变正常!!!!
bug太强大,只是太少!!求助大神们~~~~·~支援支援
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
jpeg_image image_number[IMAGE_MAX_NUMBER];
uint16_t image_amount;
uint16_t image_write_No;
volatile uint16_t image_read_No;
}valid_image_data;
volatile valid_image_data image; //声明
void usart_order_handle()
{
if(Order_come_flag == 1) //现在问题在这下面置0再返回会识别为1,串口发送读一下就不识别为1了。 (这部分代码放到main,image 结构体里的变量读取错,在回调函数和main中读的地址是一样的。但是主函数无法正常操作)
{
//若在这加上串口发送程序就会正常,在if上面是一样可以的。是读取发送的Order_come_flag <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
delay_ms(10000);
if(aRxBuffer_usart3[0] == 'F')
{
// USART3->DR=aRxBuffer_usart3[0];
// while((USART3->SR&0X40)==0);
// delay_ms(10);
// USART3->DR=image.image_read_No;
// while((USART3->SR&0X40)==0);
if(image.image_read_No == 0)
image.image_read_No = 2;
else image.image_read_No --;
delay_ms(10);
// USART3->DR=(uint8_t)image.image_read_No;
// while((USART3->SR&0X40)==0);
}
// uint8_t point[4];
// sprintf(point,"%08x",&image.image_read_No);
// usart3_send_bytes(point,sizeof(point));
USART3->DR=(uint8_t)image.image_read_No;
while((USART3->SR&0X40)==0);
USART3->DR=(uint8_t)(image.image_read_No >> 8);
while((USART3->SR&0X40)==0);
delay_ms(5000);
// flash_read_to_usart();
Order_come_flag = 0; //现在置0,再回到上面读取会识别为1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
///串口中程序
volatile uint8_t Order_come_flag = 0; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void USART3_IRQHandler(void)
{
u8 Res;
if((__HAL_UART_GET_FLAG(&USART3_Handler,UART_FLAG_RXNE)!=RESET)) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
{
HAL_UART_Receive(&USART3_Handler,&Res,1,1000);
// if(Res == 0x41)
aRxBuffer_usart3[0] = Res;
Order_come_flag = 1; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
HAL_UART_IRQHandler(&USART3_Handler);
HAL_UART_Receive_IT(&USART3_Handler, (u8 *)aRxBuffer_usart3, 1);
}
一周热门 更多>