[STM32F1] 串口无法打印数据。

[复制链接]
538|10
 楼主| 内核558 发表于 2025-3-19 10:00 | 显示全部楼层 |阅读模式
  • printf() 无法打印数据。

    我在 main() 中调用了 _write(),但在仿真过程中,程序跑不到那里。

    该项目是使用 CubeIDE 创建的。

int _write(int file, char *data, int len){   if ((file != STDOUT_FILENO) && (file != STDERR_FILENO))   {      errno = EBADF;      return -1;   }    // arbitrary timeout 1000   HAL_StatusTypeDef status =      HAL_UART_Transmit(&huart1, (uint8_t*)data, len, 1000);    // return # of bytes written - as best we can tell   return (status == HAL_OK ? len : 0);}这个函数时从其他验证过的程序中考过莱的

Wordsworth 发表于 2025-3-21 08:02 | 显示全部楼层
你可以在 printf() 调用之前加入一个简单的 HAL_UART_Transmit() 测试函数,看看是否能打印出数据,排除是否是 printf 配置的问题。
Bblythe 发表于 2025-3-21 08:04 | 显示全部楼层
另外,查看是否有串口中断或DMA冲突的情况,可能会影响串口的正常传输。
Pulitzer 发表于 2025-3-21 08:05 | 显示全部楼层
如果你的代码在其他地方验证过正常,可以尝试使用 ITM_SendChar() 来输出调试信息,这通常不依赖于外部硬件,适合在没有串口的环境下调试。
Uriah 发表于 2025-3-21 08:06 | 显示全部楼层
你是否启用了标准库支持的 newlib?如果没有,这可能会影响 printf() 的输出,确保库设置正确。
Clyde011 发表于 2025-3-21 08:08 | 显示全部楼层
最后,如果确认硬件和串口初始化没有问题,可以尝试在项目的设置中重新配置或清除缓存,看看是否是IDE的配置问题。
公羊子丹 发表于 2025-3-21 08:09 | 显示全部楼层
你提到的 _write 函数看起来没有问题,问题可能出在硬件配置或者串口初始化上。你可以先检查一下UART的初始化是否正确,特别是波特率、数据位、停止位等设置。
周半梅 发表于 2025-3-21 08:10 | 显示全部楼层
确保在调用 printf() 之前,串口已经正确初始化。可以通过在 main() 函数中添加 HAL_UART_Init(&huart1); 来确认。
帛灿灿 发表于 2025-3-21 08:11 | 显示全部楼层
你可以在 HAL_UART_Transmit() 调用后加入一些错误检查,比如 if (status != HAL_OK) { // 错误处理 },查看是否有任何错误返回。
童雨竹 发表于 2025-3-21 08:13 | 显示全部楼层
如果你在仿真过程中无法看到数据,可能是因为仿真环境没有配置好串口输出。确认仿真工具支持串口输出并且配置了正确的虚拟串口。
万图 发表于 2025-3-21 08:14 | 显示全部楼层
确保在仿真环境中,串口的引脚连接正确。STM32F1的串口TX、RX引脚需要正确连接到仿真器或外部串口设备。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

52

帖子

0

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