[STM32F4] USART3 接收中断问题

[复制链接]
82|3
地瓜patch 发表于 2026-5-8 12:48 | 显示全部楼层 |阅读模式
在 STM32F407 上用 USART3 中断模式进行数据接收,但接收函数不工作。
我从pc向 F4 发送这样的数据格式:$en:X#,在调试时发现,这个数据没有接收到。
我可以确定数据已经从 PC成功发送出去了,但不知道接收端出了什么问题。
下面是我的函数代码。
while (1)
  {
    /* USER CODE END WHILE */
        HAL_UART_Receive_IT(&huart3, buffer, 6);
    /* USER CODE BEGIN 3 */
  }

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        HAL_UART_Receive_IT(&huart3, buffer, 6);
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);
}
static void MX_USART3_UART_Init(void)
{

  /* USER CODE BEGIN USART3_Init 0 */

  /* USER CODE END USART3_Init 0 */

  /* USER CODE BEGIN USART3_Init 1 */

  /* USER CODE END USART3_Init 1 */
  huart3.Instance = USART3;
  huart3.Init.BaudRate = 9600;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART3_Init 2 */

  /* USER CODE END USART3_Init 2 */

}


内政奇才 发表于 2026-5-8 15:45 | 显示全部楼层
在while(1)里反复调用HAL_UART_Receive_IT会导致重复启动接收。
又见江南雨 发表于 2026-5-8 16:46 | 显示全部楼层
在while(1)里反复调用HAL_UART_Receive_IT会导致重复启动接收。
在海边聆听 发表于 2026-5-8 17:46 | 显示全部楼层
回调函数里没有判断huart参数,应使用if(huart == &huart3)。
才没有脸红 发表于 2026-5-8 19:47 | 显示全部楼层
数据长度只有6字节,但格式"$en:X#"实际是6字节吗?数一下。
才没有脸红 发表于 2026-5-8 19:47 | 显示全部楼层
数据长度只有6字节,但格式"$en:X#"实际是6字节吗?数一下。
故里说长安 发表于 2026-5-8 20:47 | 显示全部楼层
回调函数里少了对接收完成标志的操作。
没有太阳的晴天 发表于 2026-5-8 21:47 | 显示全部楼层
没有检查HAL_UART_Receive_IT的返回值是否为HAL_OK。
海滨消消 发表于 2026-5-8 21:48 | 显示全部楼层
检查NVIC中USART3全局中断是否已使能。
甜心puppy 发表于 2026-5-8 22:49 | 显示全部楼层
检查中断优先级分组和抢占优先级设置是否正确。
茉璃夏 发表于 2026-5-8 16:19 | 显示全部楼层
回调函数里只设了GPIO高电平,没有设置低电平来观察脉冲。
等凌晨日出 发表于 2026-5-8 17:20 | 显示全部楼层
建议先用串口调试助手查看PC端实际发送的十六进制数据。
豌豆爹 发表于 2026-5-8 17:17 | 显示全部楼层
buffer变量要定义为全局或静态,不能是局部数组。
进入猫次元 发表于 2026-5-8 18:21 | 显示全部楼层
在回调函数里调用HAL_UART_Receive_IT前应先禁止中断或清标志。
麻花油条 发表于 2026-5-8 19:21 | 显示全部楼层
检查共地问题,PC和板子地线要连在一起。
classroom 发表于 2026-5-8 20:22 | 显示全部楼层
可以用逻辑分析仪抓一下RX引脚有无数据波形。
cr315 发表于 2026-5-8 21:18 | 显示全部楼层
回调函数里可以加入UART_GetFlagStatus检查错误标志。
duo点 发表于 2026-5-8 22:25 | 显示全部楼层
上电后先调用一次HAL_UART_Receive_IT,不要在while里反复调。
elephant00 发表于 2026-5-8 15:53 | 显示全部楼层
检查buffer长度是否足够容纳接收的数据。
flycamelaaa 发表于 2026-5-8 15:53 | 显示全部楼层
看一下USART3是否有其他外设冲突了引脚。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

3038

主题

18147

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部
0