HAL_UART_RxCpltCallback()未执行

时间:2019-03-23 07:56:17

标签: interrupt uart stm32f4discovery

我想通过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++;
}

0 个答案:

没有答案