我用STM32F103C8T6写串口接收中断,将接收的数据,再通过串口发送出来。但是出了一个很奇怪的问题,不知道具体什么原因,请问有没有大神能给个答复呢?怎么都想不到为什么会这样。我用串口调试助手发送55 04 58 22,点一次发送,串口助手收到单片机回应只有一个55,再点一次发送,收到回应04 58 22,再点一次又是55 就是这样,每次都是分两次才接受得完,不知道这个是什么原因呢。
[mw_shl_code=c,true] while(1)
{
if(ReceiveState==1)
{
ReceiveState=0;
for(i=0;i<4;i++)
{
USART_SendData(USART1,Rec);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
Rx_Counter=0;
}
}
void USART1_IRQHandler(void)
{
u8 Clear=Clear;
if (USART_GetITStatus(USART1,USART_IT_RXNE))
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
Rec[Rx_Counter++]=USART_ReceiveData(USART1);
if(Rx_Counter==4)
{
ReceiveState=1;
}
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
您好,我volatile了过后还是一样的效果
您好,我有点没懂,第一次进中断函数的时候Rx_Counter应该就是0呀,执行了一次Rec[Rx_Counter++]=USART_ReceiveData(USART1);后,Rx_Counter才为1的。所以第一次应该是赋值到了Rec[0]里面呀。 Rx_Counter我之前是放在中断函数里面清零,但是,那样的话,同样发送55 04 58 22的话 收到的就更奇怪了,第一次收到55 第二次收到04 58 22 55了
Rec[Rx_Counter++]
这句话会先执行Rec[Rx_Counter] 后执行Rx_Counter++,所以存放的地方还是0,1,2,3
楼主单步调试一下问题在哪吧。
一周热门 更多>