C USART1中断IRQHandler如何接收字符串

C USART1中断IRQHandler如何接收字符串,c,stm32,interrupt-handling,iar,usart,C,Stm32,Interrupt Handling,Iar,Usart,我能够通过串行方式从pc接收到STM32051板的输入数据字节,但每次输入2个或更多字符时,中断会停止,直到我重置板以重复相同的过程。。。如何更改IRQHandler代码以接收23字节或字符串的有效负载?有人能帮我提供一个示例代码或修改我的当前代码以便我可以接收此有效负载吗?谢谢 下面是IRQHandler函数,它只能接收一个字节 void USART1_IRQHandler(void) { unsigned char getbuffer [200], finalbuffer, target

我能够通过串行方式从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++;          
  }
}

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

if(USART_GetITStatus(USART1, USART_IT_RXNE) )
{
  __HAL_USART_CLEAR_IT(USART1, USART_IT_RXNE);
…
}
请删除
USART\U SendData(USART1,缓冲区)因为这是一个阻塞功能,传输数据所需的时间与接收数据所需的时间相同。这样做是行不通的。请在主循环中创建一个传输,当接收到某个内容时,该循环将传输缓冲区


另外,
USART\u ReceiveData
不是HAL标准,所以我假设:它只需要读取
RDR
寄存器,而不是在使用中断时等待输入数据。

你弄乱了StdPeriph API。不能在中断处理程序中使用
USART\u ReceiveData
USART\u SendData
。UART数据接收不是简单的操作。互联网上有大量的例子。还可以阅读StdPeriph的来源:开发者用commnts编写了完整的说明如何使用它。谢谢你的回答,先生,我已经解决了这里的问题。谢谢你的回答,先生,我已经解决了这里的问题