一下是中断处理函数。
uint8_t i=0;
if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) //判断读寄存器是否非空
{
USART_ClearITPendingBit(UART4,USART_IT_RXNE); //请中断标志
UARTRcvBuffer[RxCounter1++] = USART_ReceiveData(UART4); //将读寄存器的数据缓存到接收缓冲区里
}
if((UARTRcvBuffer[0]==0x41 && UARTRcvBuffer[1]==0x54))
{
if((UARTRcvBuffer[RxCounter1-2]==0x0d && UARTRcvBuffer[RxCounter1-1]==0x0a)) //判断结束标志是否是0x0d 0x0a
{
flag_a = 1;
memcpy( DataProcQuene , UARTRcvBuffer , RxCounter1 );
DataProcQueneLengh = RxCounter1;
memset( UARTRcvBuffer , 0x00 , RxCounter1 );
RxCounter1=0;
}
}
在这里我发现一个问题。就是说 我发送 41 54 00 11 22 33 0d 0a 是正常接收并且处理的
但是 当我发送41 54 00 11 22 33 0d 0a 01 的时候,处理器就会回返41 54 00 11 22 33 0d 0a 然后我在利用串口精灵向mcu发送41 54 00 11 22 33 0d 0a 01,这个时候cpu就不知道怎么发送了,就是说我利用串口精灵回显时,接收不到数据了。
我看到了stm32 uart4 的中断机制是 一个字节(8位)中断一次。也就是说我的通信协议有问题,我没有找出问题来
请同学们帮我看一下吧,谢谢
|