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