ST意法半导体
直播中

张娜

7年用户 945经验值
私信 关注
[问答]

STM32L4R5 UART中断模式不适用于UART处理程序阻塞如何解决?

你好 !我正在测试 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
}









回帖(1)

常静娜

2023-2-3 14:14:26
看起来您正在 LPUART 处理程序中使用 UART 句柄。毫无疑问你想要这个:


  • void LPUART1_IRQHandler(void)
  • {
  •   HAL_UART_IRQHandler(&hlpuart1);
  • }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分