Я хочу отправить 10 байтов данных через UART loopback в режиме прерывания.Хотя я могу получать данные, я не понимаю, почему мой HAL_UART_RxCpltCallback () не выполняется.Но мой HAL_UART_TxCpltCallback () выполняется каждый раз после передачи байта данных.Я сгенерировал код через cubeMX.Я включил глобальное прерывание USART2.Мой контрольный регистр (CR1) для моего USART2 - 0x300c.То есть биты UE, M, TE, RE устанавливаются только.Биты TXIE, TCIE НЕ устанавливаются в регистр CR1.Теперь, что здесь означает «глобальный» в глобальном прерывании?Означает ли это, что прерывание генерируется из любого из 10 источников (упомянутых в техническом описании, например, завершение передачи, заполнение буфера приема и т. Д.)?
Ни один из битов, соответствующих прерываниям, не разрешен в регистре CR1.Но элемент управления обращается к HAL_UART_TxCpltCallback () каждый раз, когда передает байт данных.Почему это происходит?
Пожалуйста, раскройте тайну.
PS: Я использую плату STM32F407G-DISC1, Attolic Truestudio IDE, ОС Ubuntu 16.04.
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++;
}