豌豆爹 发表于 2023-4-10 10:20

基于STM32CUBEMX配置printf经验分享

概述    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。
生成例程    这里准备了GD32303C_START开发板进行验证。
https://shequ.stmicroelectronics.cn/data/attachment/forum/202304/08/230406tqdr9rif10rlywq7.png

printf()函数
    printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf(“<式样化字符串>”,<参数表>);    其中式样化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出;另一部分是式样化规定字符, 以"%“开端, 后跟一个或几个规定字符, 用来确定输出内容式样。参量表是需求输出的一系列参数, 其个数务必与式样化字符串所阐明的输出参数个数一样多, 各参数之间用英文逗号”,"分开, 且顺序逐一对应, 不然将会出现意想不到的错误。    注意:函数printf从右到左压栈,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所以我们看见的结果是,从右边开始处理的。


豌豆爹 发表于 2023-4-10 10:22

STM32CUBEMX配置https://shequ.stmicroelectronics.cn/data/attachment/forum/202304/08/230412coxoupuu0eopxbyp.png
https://shequ.stmicroelectronics.cn/data/attachment/forum/202304/08/230412a1p84961zgf1hi8u.png
keil配置
    microlib 进行了高度优化以使代码变得很小。它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,如果要使用printf(),必须开启。
https://shequ.stmicroelectronics.cn/data/attachment/forum/202304/08/230412rv5q2z6qd56vf5a2.png
代码    在main.c中,添加头文件,若不添加会出现 identifier "FILE" is undefined报错。
[*]/* USER CODE BEGIN Includes */
[*]#include "stdio.h"
[*]/* USER CODE END Includes */

复制代码

    函数声明和串口重定向:
[*]/* USER CODE BEGIN PFP */
[*]void uart1_data(void);          //接收函数
[*]#ifdef __GNUC__                  //串口重定向
[*]#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
[*]#else
[*]#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
[*]#endif
[*]PUTCHAR_PROTOTYPE
[*]{
[*]    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
[*]    return ch;
[*]}
[*]/* USER CODE END PFP */

复制代码

    printf()打印。
[*]/* USER CODE BEGIN WHILE */
[*]while (1)
[*]{
[*]    /* USER CODE END WHILE */
[*]
[*]    /* USER CODE BEGIN 3 */
[*]    printf("串口打印例程\r\n");
[*]    HAL_Delay(1000);
[*]}
[*]/* USER CODE END 3 */

复制代码

https://shequ.stmicroelectronics.cn/data/attachment/forum/202304/08/230412fkhkg7gfmgz3i7ah.png

benjaminka 发表于 2023-4-12 20:22

STM32使用printf重定向

deliahouse887 发表于 2023-4-12 21:01

重定向printf               

bestwell 发表于 2023-4-12 21:07

STM32 上使用 printf 输出函数 如果要实现在串口 或者LCD上显示,必须重定义标准库函数里调用的与输出设备相关的函数。

qiufengsd 发表于 2023-4-12 21:33

重写putchar函数               

pmp 发表于 2023-4-13 20:37

stm32printf速度慢好多呢

uiint 发表于 2023-4-13 23:00

STM32中不能使用printf函数吗

modesty3jonah 发表于 2023-4-13 23:06

工程属性中的Target项中的Code Generation 选择 UseMicroLIB。 即可使用printf进行串口输出。库函数版本的:如果使用的是MDK,请在工程属性的“Target“-》”CodeGeneration“中勾选”Use MicroLIB“ 进行如上设置后编译一下

weifeng90 发表于 2023-4-14 08:03

还以为是cubemx自动重定向。

hearstnorman323 发表于 2023-4-15 22:29

使用printf打印时:得重新配置的一下程序

eefas 发表于 2023-4-18 11:46

在工程中添加printf函数的库文件,并在程序中调用printf函数即可。

yorkbarney 发表于 2023-4-18 16:28

stm32printf函数怎么实现的

mattlincoln 发表于 2023-4-18 18:34

1、 添加printf的头文件 #include <stdio.h> 2、重写int fputc(int ch, FILE *f)函数

backlugin 发表于 2023-4-18 21:26

在使用STM32CUBEMX进行代码生成时,可以通过配置串口来实现printf输出功能。

averyleigh 发表于 2023-4-18 22:16

如果使用的是SWO输出,则需要在调试器中开启SWO功能,并在程序中使能SWO输出。

Henryko 发表于 2023-4-19 22:48

重写putchar就可以使用

Stahan 发表于 2023-4-19 23:26

选UseMicroLIB库就能用了

liuzaiy 发表于 2023-4-22 15:47

STM32使用printf重定向

zyf部长 发表于 2023-4-22 15:49

重定向printf               
页: [1] 2 3 4
查看完整版本: 基于STM32CUBEMX配置printf经验分享