[STM32F4] 在 LwIP_HTTP_Server_Netconn_RTOS 工程中添加 USART3 功能时遇到问题

[复制链接]
169|20
地瓜patch 发表于 2026-6-2 12:48 | 显示全部楼层 |阅读模式
我需要在官方的 LwIP_HTTP_Server_Netconn_RTOS 示例中添加 USART1 和 USART3 通信功能,但一直卡在 HAL_UART_Transmit() 函数返回值为 3 这个问题上。
我所用控制器为STM32F439ZI,想用 PD8 作为 TX、PD9 作为 RX,但没找到在哪里配置这组引脚。
我怀疑代码而这两个引脚可能与 ETH_MII_RX、ETH_MII_TX产生冲突。
以下为测试代码
int uart_test(void)
{
int rv = OK;
char cmd[ZABER_STR_LEN]={0};
enum zaber_dev dev = ZAB_BOTH;

huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; // No hardware flow control
huart3.Init.Mode = UART_MODE_TX_RX; // Full-duplex mode
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
if (dev==ZAB_BOTH)
sprintf(cmd, "/%s\n", ZABER_CMD_HOME);
else
sprintf(cmd, "/%d %s\n", dev, ZABER_CMD_HOME);

rv = HAL_UART_Transmit(&huart3, (uint8_t*)cmd, strlen(cmd), 1000);
return rv;
}

int main(void)
{
HAL_Init();
SystemClock_Config();
uart_test();

才没有脸红 发表于 2026-6-2 15:34 | 显示全部楼层
HAL_UART_Transmit 返回 3 表示 HAL_BUSY,说明串口正在被占用。
今天会画卧蚕吗 发表于 2026-6-2 16:34 | 显示全部楼层
你在 uart_test 里局部定义 huart3 并调用 HAL_UART_Init,但 main 之前没有初始化该句柄。
又见江南雨 发表于 2026-6-2 18:35 | 显示全部楼层
huart3 应该定义为全局变量,或在 main 中初始化后传给 uart_test。
没有太阳的晴天 发表于 2026-6-2 19:35 | 显示全部楼层
检查 USART3 时钟是否在 HAL_UART_Init 之前已经使能。
故里说长安 发表于 2026-6-2 20:36 | 显示全部楼层
PD8 和 PD9 的复用功能需要配置为 AF7
海滨消消 发表于 2026-6-2 21:36 | 显示全部楼层
你代码中缺少 GPIO 的复用配置,只配置了 UART 参数。
等凌晨日出 发表于 2026-6-2 22:36 | 显示全部楼层
需要调用 HAL_GPIO_Init 配置 PD8 为 AF_PP,PD9 为 AF_INPUT。
豌豆爹 发表于 2026-6-2 16:07 | 显示全部楼层
看看 PD8/PD9 对应的 AF 寄存器是否已设置为 GPIO_AF7_USART3。
进入猫次元 发表于 2026-6-2 17:08 | 显示全部楼层
该工程默认以太网使用 PD8/PD9 作为 ETH 接口的 MII 引脚。
麻花油条 发表于 2026-6-2 18:08 | 显示全部楼层
PD8 默认是 ETH_MII_RX_D2,PD9 是 ETH_MII_TX_D2,确实冲突。
classroom 发表于 2026-6-2 19:09 | 显示全部楼层
建议换用其他 USART3 引脚,如 PB10/PB11 或 PC10/PC11。
cr315 发表于 2026-6-2 19:09 | 显示全部楼层
如果必须用 PD8/PD9,需要关闭以太网的对应引脚复用。
duo点 发表于 2026-6-2 20:10 | 显示全部楼层
检查 CubeMX 或 HAL_ETH_MspInit 中是否占用了 PD8/PD9。
flycamelaaa 发表于 2026-6-2 20:12 | 显示全部楼层
返回 HAL_BUSY 也可能因为中断未处理或上次传输未完成。
jcky001 发表于 2026-6-2 21:11 | 显示全部楼层
在 HAL_UART_Init 前添加 __HAL_RCC_USART3_CLK_ENABLE()使能 GPIOD 时钟。
onlycook 发表于 2026-6-2 21:11 | 显示全部楼层
在 uart_test 中先调用 HAL_UART_MspInit 或手动配置 GPIO。
powerantone 发表于 2026-6-2 22:12 | 显示全部楼层
建议把串口初始化放在 main 中的硬件初始化部分,不要放在测试函数内。
probedog 发表于 2026-6-2 16:32 | 显示全部楼层
检查 NVIC 中 USART3 中断是否使能,且优先级不与以太网冲突。
solty 发表于 2026-6-2 19:23 | 显示全部楼层
用示波器或逻辑分析仪看 PD9 TX 引脚是否有数据输出,确认硬件连接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

3038

主题

18147

帖子

31

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