|
计算机的串口调试助手向STM32F103的串口1发送十六进制数,芯片接收并分析数据头和尾后,向计算机回传数据,但总是遇到第二个数出错的情况,并且每次都是出现0X0C,无论我第二个数发的是什么,都这样,并且只在复位后的第一次出现这种情况,感觉好奇怪,部分代码如下:
串口1配置如下:
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStruct);
// USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1, ENABLE);
单字节发送函数如下:
void USART_Send_Byte(u8 mydata)
{
USART_ClearFlag(USART1,USART_FLAG_TC);
USART_SendData(USART1, mydata);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
USART_ClearFlag(USART1,USART_FLAG_TC);
}
中断接收部分代码如下:
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //中断产生
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
Uart1_Buffer[Uart1_Rx] = USART_ReceiveData(USART1);
Uart1_Rx++;
Uart1_Rx &= 0xFF;
}
if((Uart1_Buffer[Uart1_Rx-1] == 'J')&&(Uart1_Buffer[Uart1_Rx-2] == 'Z')&&(Uart1_Buffer[Uart1_Rx-3] == 'T')&&(Uart1_Buffer[Uart1_Rx-4] == 'X')
&&(Uart1_Buffer[Uart1_Rx-5] == '$'))
Uart1_Tx = Uart1_Rx-5;
if((Uart1_Rx-Uart1_Tx==13)&&(Uart1_Buffer[Uart1_Tx] == '$')&&(Uart1_Buffer[Uart1_Tx+1] == 'X')&&(Uart1_Buffer[Uart1_Tx+2] == 'T')&&(Uart1_Buffer[Uart1_Tx+3] == 'Z')&&(Uart1_Buffer[Uart1_Tx+4] == 'J'))
{
Uart1_Len = Uart1_Rx-1- Uart1_Tx; //长度
Uart1_Sta=1; //标志位
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET) //溢出
{
USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
USART_ReceiveData(USART1); //读DR
}
主函数部分如下(共发送13字节,最后一字节为异或校验位):
if( Uart1_Sta )
{
tx1=Uart1_Tx;
for(i=0;i<12;i++)
{
temp=Uart1_Buffer[tx1++]^temp;
}
if(Uart1_Buffer[Uart1_Tx+12] == temp)
{
for(tx1=0;tx1 <= Uart1_Len;tx1++,Uart1_Tx++)
{
USART_Send_Byte(Uart1_Buffer[Uart1_Tx]); //发送数据
}
}
Uart1_Rx = 0; //初始化
Uart1_Tx = 0;
temp=0;
Uart1_Sta=0;
}
程序的意思就是进行校验,并回传正确的数据,可是为什么总是第二个数据出错,为0X0C呢,望高手前来解答! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|