USART中断无法按预期工作

2019-07-14 17:41发布

有人可以解释为什么我只能收到带有USART中断的13个字符吗?我使用' n'来检测字符串的结尾。
1.png
  1. #define BUFFER_SIZE 100

  2. char receive_buffer[BUFFER_SIZE];
  3. char receive_data;
  4. int receive_index = NULL;
  5. int data_ready_index = NULL;

  6. void USART2_receive(void const * argument){
  7.          for(;;){
  8.                 if(data_ready_index == 1){
  9.                 HAL_UART_Transmit_IT(&huart2, (uint8_t *)"Received data: ", strlen("Received data: "));
  10.                 HAL_Delay(50);
  11.                 HAL_UART_Transmit_IT(&huart2, (uint8_t *)receive_buffer, strlen(receive_buffer));
  12.                 memset(receive_buffer, NULL, sizeof(receive_buffer));
  13.                 HAL_Delay(50);
  14.                 HAL_UART_Transmit_IT(&huart2, (uint8_t *)" ", strlen(" "));
  15.                 data_ready_index = NULL;
  16.                 }
  17.          }
  18.      }

  19.     void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

  20.         if (huart->Instance == USART2){
  21.             if (receive_data != 13){
  22.                 receive_buffer[receive_index++]=receive_data;
  23.             }else{
  24.                     receive_index = NULL;
  25.                     data_ready_index = 1;                                                               
  26.                     // Received data ready to be processed
  27.             }
  28.       }
  29.     }

  30.     void USART2_IRQHandler(void){

  31.       HAL_UART_IRQHandler(&huart2);
  32.       HAL_UART_Receive_IT(&huart2, (uint8_t *) &receive_data, 1);
  33.     }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
fhdgxfvx
2019-07-15 04:43
我发现了问题。在void USART2_receive(void const * argument)函数中,我将延迟从50增加到100,然后一切正常。正如@MITURAJ所提到的,这可能是由缓冲区溢出引起的。
  1. void USART2_receive(void const * argument){
  2.     for(;;){
  3.         if(data_ready_index == 1){
  4.             HAL_UART_Transmit_IT(&huart2, (uint8_t *)"Received data: ",
  5.             strlen("Received data: "));
  6.             HAL_Delay(100);
  7.             HAL_UART_Transmit_IT(&huart2, (uint8_t *)receive_buffer,
  8.             strlen(receive_buffer));
  9.             HAL_Delay(100);
  10.             HAL_UART_Transmit_IT(&huart2, (uint8_t *)" ", strlen(" "));
  11.             data_ready_index = NULL;
  12.             memset(receive_buffer, NULL, sizeof(receive_buffer));
  13.         }
  14.     }
  15. }
复制代码

一周热门 更多>