STM32
直播中

刘洋

10年用户 1112经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

STM32CubeIde生成的工程,使用printf函数没有调用_write和__io_putchar函数,为什么?

最近使用STM32CubeIde生成工程,就先做一个简单的串口工程,使用NUCLEO-WBA52CG板子进行调试。
在初始化完毕后,使用printf打印log,重写了int io_putchar(int ch) 函数,发现没有串口没有输出,使用SWD进行debug,并对syscalls.c中的_write函数以及重写的io_putchar函数打了断点,结果printf执行后,这两个断点没有被执行。而且printf函数的返回值与字符串的长度相等。
以前用STM32CubeIde生成的工程也使用了同样的单板调试,也使用串口输出,没有任何问题。这次不知道为啥会这样。printf函数又没有给源码,没办法看为啥这样。而且这个问题与串口完全没有关系,就是一个C库调用的问题,即使串口不初始化,但是执行printf也应该要调用_write和__io_putchar函数才对

回帖(1)

h1654155275.5741

2024-5-24 16:38:09
在STM32CubeIDE中,如果printf函数没有调用_write和__io_putchar函数,可能有以下几个原因:

1. 串口配置不正确:请检查您的串口配置是否正确,包括波特率、数据位、停止位和奇偶校验位等。确保这些参数与您的串口设备相匹配。

2. 串口初始化未完成:请确保在调用printf之前,串口已经初始化并配置完成。您可以在main函数中添加串口初始化代码,例如:

```c
int main(void)
{
    // 初始化代码
    HAL_Init();
    SystemClock_Config();
    MX_USART2_UART_Init();

    // 使用printf打印日志
    printf("Hello, STM32!n");

    while (1)
    {
        // 其他代码
    }
}
```

3. 重写io_putchar函数的问题:请确保您正确地重写了io_putchar函数,并且该函数被正确调用。您可以在该函数中添加一些调试信息,以确保它被调用。

4. 编译器优化问题:在某些情况下,编译器优化可能会导致printf函数不调用_write和__io_putchar函数。您可以尝试在printf函数调用前后添加一些调试代码,以确保编译器不会优化掉这些调用。

5. 库文件问题:可能是您使用的库文件与您的硬件平台不兼容。您可以尝试重新生成工程,或者检查库文件是否正确。

6. 检查您的断点设置:确保您的断点设置正确,并且调试器能够正确地在这些断点处暂停。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分