打印
[STM32F1]

串口无法打印数据。

[复制链接]
257|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() 来输出调试信息,这通常不依赖于外部硬件,适合在没有串口的环境下调试。

使用特权

评论回复
5
Uriah| | 2025-3-21 08:06 | 只看该作者
你是否启用了标准库支持的 newlib?如果没有,这可能会影响 printf() 的输出,确保库设置正确。

使用特权

评论回复
6
Clyde011| | 2025-3-21 08:08 | 只看该作者
最后,如果确认硬件和串口初始化没有问题,可以尝试在项目的设置中重新配置或清除缓存,看看是否是IDE的配置问题。

使用特权

评论回复
7
公羊子丹| | 2025-3-21 08:09 | 只看该作者
你提到的 _write 函数看起来没有问题,问题可能出在硬件配置或者串口初始化上。你可以先检查一下UART的初始化是否正确,特别是波特率、数据位、停止位等设置。

使用特权

评论回复
8
周半梅| | 2025-3-21 08:10 | 只看该作者
确保在调用 printf() 之前,串口已经正确初始化。可以通过在 main() 函数中添加 HAL_UART_Init(&huart1); 来确认。

使用特权

评论回复
9
帛灿灿| | 2025-3-21 08:11 | 只看该作者
你可以在 HAL_UART_Transmit() 调用后加入一些错误检查,比如 if (status != HAL_OK) { // 错误处理 },查看是否有任何错误返回。

使用特权

评论回复
10
童雨竹| | 2025-3-21 08:13 | 只看该作者
如果你在仿真过程中无法看到数据,可能是因为仿真环境没有配置好串口输出。确认仿真工具支持串口输出并且配置了正确的虚拟串口。

使用特权

评论回复
11
万图| | 2025-3-21 08:14 | 只看该作者
确保在仿真环境中,串口的引脚连接正确。STM32F1的串口TX、RX引脚需要正确连接到仿真器或外部串口设备。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

13

帖子

0

粉丝