• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

串口中断函数接受多次数据

闭上眼睛就是天黑 2019-10-11 浏览量:682
中断中的程序如下:
void USART1_IRQHandler(void)
{
        u8 rasrbsrcs;
         if(USART_GetITStatus(USART1USART_IT_RXNE))
{
     ras= USART_ReceiveData(USART1);
        rbs= USART_ReceiveData(USART1);
        rcs= USART_ReceiveData(USART1);
     USART_SendData(USART10x49);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);         
        USART_SendData(USART1ras);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);
        USART_SendData(USART10x48);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);         
     USART_SendData(USART1rbs);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);       
     USART_SendData(USART10x50);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);
     USART_SendData(USART1rcs);
     while(USART_GetFlagStatus(USART1USART_FLAG_TXE)!=SET);         
  }
}

int main(void)
{
         delay_init();
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_USART1_Init();
         while(1);
}
发送1与12与想的一样,之后发送123以及1234直到123456都与发送12的结果一样,到1234567的时候才会把7的内容显示出来。

一个中断函数中接受两个数据会有怎么得结果?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:2
  • 串口中断函数里面不要用阻塞的接收函数,这样会导致接收异常,你可以在主循环里面通过接收中断标志位判断

  • 你没有明白串口中断的规则:

    STM32的单片机串口接收中断,是接收到一个字符,那就进一次中断。


    任何中断,都是要求快进快出的设计原则,你这串口中断函数里面做了太多的事情。

    建议你把发送函数挪到while(1)里面。



相关问题

问题达人换一批

串口中断函数接受多次数据