STM32串口读取无消息显示问题求助(NUCLEO-L4R5ZI-P板)
解决NUCLEO-L4R5ZI-P USART2串口无输出问题
1. 关闭USART2硬件流控
你的USART2初始化配置里开启了RTS/CTS硬件流控,但NUCLEO-L4R5ZI-P的ST-Link虚拟串口并未连接这两个引脚,导致发送流程被阻塞。修改MX_USART2_UART_Init中的流控配置:
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
2. 修正串口设备路径与权限
- 你提到的
/dev/ttyATM0是笔误,NUCLEO开发板的虚拟串口设备应为/dev/ttyACM0。可以通过以下命令确认设备存在:ls /dev/ttyACM* - 确保当前用户有权限访问串口设备,执行以下命令加入
dialout组(需重启或重新登录生效):sudo usermod -aG dialout $USER
3. 优化main函数发送逻辑
循环中持续发送会导致接收端无法正常解析,添加延时控制发送频率,同时优化字符串格式便于观察:
/* USER CODE BEGIN WHILE */ char buf[] = "Hello World!\r\n"; while (1) { /* USER CODE END WHILE */ HAL_UART_Transmit(&huart2, (uint8_t*)buf, strlen(buf), HAL_MAX_DELAY); HAL_Delay(1000); // 每秒发送一次 /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
4. 确认USART2引脚配置
检查STM32CubeIDE的Pinout视图:
- USART2_TX(PA2)需配置为Alternate Function Push Pull,复用功能为
AF7 (USART2); - USART2_RX(PA3)需配置为Input Floating或Pull-up,复用功能为
AF7 (USART2); - 确保GPIO初始化代码正确生成,无引脚冲突。
5. 验证初始化是否成功
在USER CODE BEGIN 2中加入LED闪烁代码,确认USART2初始化未触发Error_Handler(LED引脚以NUCLEO-L4R5ZI-P实际板载LED为准,示例为GPIOA_5):
/* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); HAL_Delay(500); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); /* USER CODE END 2 */
按以上步骤修改后,重新编译下载程序,用Putty/minicom以115200波特率、8位数据位、1位停止位、无校验、无流控连接/dev/ttyACM0即可看到输出。
内容的提问来源于stack exchange,提问作者PatTheTrickster
相关产品推荐
相关产品推荐

