首页 > 解决方案 > HAL_UART_RxCpltCallback() 没有被执行

问题描述

我想通过中断模式通过UART环回发送10个字节的数据。虽然我能够接收数据,但我不明白为什么我的 HAL_UART_RxCpltCallback() 没有被执行。但是我的 HAL_UART_TxCpltCallback() 每次传输一个字节的数据后都会被执行。我已经通过 cubeMX 生成了代码。我已启用 USART2 全局中断。我的 USART2 的控制寄存器 (CR1) 是 0x300c。也就是说,仅设置了 UE,M,TE,RE 位。CR1 寄存器中未设置 TXIE、TCIE 位。现在,全局中断中的“全局”在这里是什么意思?这是否意味着 10 个源中的任何一个都会产生中断(在数据表中提到,如 Tx 完成、Rx 缓冲区已满等)?

CR1 寄存器中没有任何对应于中断的位被使能。但是每次传输一个字节的数据时,控件都会转到 HAL_UART_TxCpltCallback() 。为什么会这样?

请揭开谜底。

PS:我使用的是STM32F407G-DISC1板,Attolic Truestudio IDE,Ubuntu 16.04 OS。

UART_HandleTypeDef huart2;


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
uint8_t tx_data[] = {0,1,2,3,4,5,6,7,8,9};
uint8_t rx_data[10];

int main(void)
{
   int i=0;
   HAL_Init();
   SystemClock_Config();
   MX_GPIO_Init();
   MX_USART2_UART_Init();
   while (1)
   {
      HAL_UART_Transmit_IT(&huart2, &tx_data[i], 10);
      HAL_Delay(1500);
      HAL_UART_Receive_IT(&huart2, &rx_data[i] , 10);
      HAL_Delay(1500);

      if((xferCnt==10) || (rxCnt==10))
           break;
      else
           i++;
   }

 }

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    xferCnt++;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    rxCnt++;
}

标签: interruptuartstm32f4discovery

解决方案


推荐阅读