USART1中断IRQHandler如何接收字符串

时间:2019-10-09 02:37:26

标签: c stm32 interrupt-handling iar usart

我能够从PC到STM32051板通过串行接收输入数据的字节,但是只要我键入2个或更多字符以发送一次,中断就会停止,直到我复位板以重复相同的过程为止。 。如何更改IRQHandler代码以接收23个字节或字符串的有效载荷?谁能帮助我提供示例代码或修改当前代码,以便我可以接收此有效载荷?谢谢,

这里是IRQHandler函数,只能接收一个字节。

void USART1_IRQHandler(void)
{
  unsigned char getbuffer [200], finalbuffer, targetdata[];
  if(USART_GetITStatus(USART1, USART_IT_RXNE) )
  {
    getbuffer [i] = USART_ReceiveData(USART1);
    buffer = (getbuffer [i]); 
    USART_SendData(USART1, buffer);//Feedback 
    i++;          
  }
}

1 个答案:

答案 0 :(得分:0)

您需要为USART清除中断处理程序中的RXNE中断位。

if(USART_GetITStatus(USART1, USART_IT_RXNE) )
{
  __HAL_USART_CLEAR_IT(USART1, USART_IT_RXNE);
…
}

请删除USART_SendData(USART1, buffer);,因为这是一项阻止功能,与发送数据所花费的时间相同。因此,它将无法正常工作。请在您的主循环中创建一个传输,以便在接收到某些内容时传输缓冲区。

USART_ReceiveData也不是HAL标准,因此我假设但:它只需要读取RDR寄存器,而不必等待使用中断时的传入数据。