你好 !我正在测试 UART 中断模式以使用
STM32L4R5(IDE:STM32CubeIDE)传输数据。
我正在使用 HAL_UART_Transmit_IT 并且 UART 处理程序有问题。没有发送数据,也没有执行main函数中while循环中的指令,因为UART Handler没有停止就被触发了。
在调试模式下,我看到 HAL_UART_IRQHandler 中的 isrflags 和 errorflags 变量等于 0。这就是我认为没有发送数据并且永远不会调用回调函数的原因。
我不明白我的问题。谁能帮帮我?
这是我的代码:
// main.c 文件 //
/* 私有变量-------------------------------------------- ----------*/
UART_HandleTypeDef hlpuart1;
UART_HandleTypeDef huart1;
/* 用户代码开始 PV */
uint8_t tx_buf[] = "你好nr";
/* 用户代码结束 PV */
/* 私有函数原型-------------------------------------------- --*/
void SystemClock_Config (
void );
静态无效MX_GPIO_Init (
无效);
静态无效MX_LPUART1_UART_Init (
无效);
void HAL_UART_TxCpltCallback (UART_HandleTypeDef *huart)
{
//不幸的是没有到达
}
诠释主要(
无效)
{
/* 重置所有外设,初始化 Flash 接口和
Systick。*/
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/* 初始化所有配置的外设 */
MX_GPIO_Init();
MX_LPUART1_UART_Init();
HAL_UART_Transmit_IT(&hlpuart1, tx_buf,
sizeof (tx_buf));
// 它返回 HAL_OK
而(1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_7);
// 在这里阻塞
HAL_延迟(1000);
}
}
静态无效MX_LPUART1_UART_Init (
无效)
{
hlpuart1.Instance = LPUART1;
hlpuart1.Init.BaudRate = 9600;
hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
hlpuart1.Init.StopBits = UART_STOPBITS_1;
hlpuart1.Init.Parity = UART_PARITY_NONE;
hlpuart1.Init.Mode = UART_MODE_TX_RX;
hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
如果(HAL_UART_Init(&hlpuart1)!=
HAL_OK)
{
错误处理程序();
}
如果(HAL_UARTEx_SetTxFifoThreshold(&hlpuart1,UART_TXFIFO_THRESHOLD_1_8)!=
HAL_OK)
{
错误处理程序();
}
如果(HAL_UARTEx_SetRxFifoThreshold(&hlpuart1,UART_RXFIFO_THRESHOLD_1_8)!=
HAL_OK)
{
错误处理程序();
}
如果(HAL_UARTEx_DisableFifoMode(&huart1) !=
HAL_OK )
{
错误处理程序();
}
}
// stm32l4xx_it.c 文件
void LPUART1_IRQHandler (
无效)
{
HAL_UART_IRQHandler(&huart1);
// 有 isrflags = 0 和 errorflags = 0
}