请大家帮我看看这段stm32串口接收中断代码有什么问题?

2019-07-16 09:02发布

小弟恳请各位大侠挤出宝贵时间帮我看一下这个问题,我是用是STM32串口接收中断接收数据 可是为什么每次进入中断都会死在里面出不来?单步运行后发现,每次进接收中断后只能接收到数据帧的第一个字节,然后就会陷在 USART1_ReceiveChar()这个函数里出不来了,请问各位大侠,USART_ReceiveData()这个库函数执行后会清零USART_FLAG_RXNE这个标识么 我看了库函数体  貌似不会清零啊 不知怎么的 就是不能完整接收一帧数据 求大侠指导  讲解stm32串口接收的原理啊  跪求串口收发相关例程



void USART1_IRQHandler(void)
{
  if ( USART_GetiTStatus(USART1, USART_IT_RXNE)!= RESET)//查询是否为秒中断标志
  {
   
    while(USART1_ReceiveChar()!=0xaa);//寻找帧头
    while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收
    rbuff[i++]=USART1_ReceiveChar();
    for(char j=0;j<i;j++)USART1_Putc(rbuff[j]);//把接收到的数据发送出去
    USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清中断标识
  }
  
}

void USART1_Putc(char c)
{
    USART_SendData(USART1, c);
        /* Loop until the end of transmission */
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}


unsigned char USART1_ReceiveChar(void)
{
  while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
  return(USART_ReceiveData(USART1));
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
xuelanwgf
1楼-- · 2019-07-16 09:23
你的中断配置是什么样的啊,我认为是中断没配置好,所以一直停在那里
zjk2752
2楼-- · 2019-07-16 10:23
我也刚刚在学,我觉得是这样的:中断是一个字节触发一次的,而不是只在第一个字节触发以后就一直在中断里面了。比如说,你发的字符串是0xaa 0xbb 0x11 ...,当收到aa的时候会进中断,这时候 while(USART1_ReceiveChar()!=0xaa);//寻找帧头 这句应该没问题,但是在 while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收 这一句就通过不了了,死在这里了。我的意思就是说,每次进中断只能处理一个字节,而不是进一次中断处理一个字符串
zts329547875
3楼-- · 2019-07-16 13:07
解决了没有了?

一周热门 更多>