打印
[STM32H7]

STM32H743+CubeMX-串口重定向printf

[复制链接]
1378|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljiu|  楼主 | 2021-9-4 13:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、前言
**printf是调试程序与打印信息的强大工具,必须要掌握。**在实际项目上,我认为没有一种调试方式可以替代printf。这一篇笔记将分别在Keil,IAR,STM32CubeIDE(gcc)实现printf重定向。在代码方面,Keil与IAR是一样的。但是,在STM32CubeIDE上的代码就不一样了(原因是GCC编译器)。在STM32CubeMX配置上都是一样的,毕竟硬件是一样的。

二、CubeMX
2.1、选择串口
我使用的是硬石的H7开发板,串口调试需要使用usart3。


使用特权

评论回复
沙发
zljiu|  楼主 | 2021-9-4 13:23 | 只看该作者
2.2、Parameter Settings

波特率等配置大家按自己的爱好配置即可。实际工作项目上,我比较喜欢用256000的波特率。


使用特权

评论回复
板凳
zljiu|  楼主 | 2021-9-4 13:25 | 只看该作者
三、代码3.1、usart.h

因为是使用了C语言标准库的printf , 所以要包含头文件。


使用特权

评论回复
地板
zljiu|  楼主 | 2021-9-4 13:25 | 只看该作者
3.2、usart.c
笔记的开头说过,分别在Keil ,IAR , STM32CubeIDE三个平台实现。

Keil
**在usart.c的最底部,添加函数fputc( )与fgetc( )。**实际上,这两个函数都是调用了HAL库发送与接收报文。最后记得修改串口号,这个实验使用串口3,所以第一入口参数就需要用huart3.

**Keil编辑器也需要设置。**很多人忘记这一步,导致printf重定向失败。



使用特权

评论回复
5
zljiu|  楼主 | 2021-9-4 13:26 | 只看该作者
IAR

**在usart.c的最底部,添加函数fputc( )与fgetc( )。**实际上,这两个函数都是调用了HAL库发送与接收报文。最后记得修改串口号,这个实验使用串口3,所以第一入口参数就需要用huart3.


使用特权

评论回复
6
zljiu|  楼主 | 2021-9-4 13:27 | 只看该作者
**IAR编辑器也需要设置。**很多人忘记这一步,导致失败。

使用特权

评论回复
7
zljiu|  楼主 | 2021-9-4 13:27 | 只看该作者
STM32CubeIDE
**在usart.c的最底部,添加函数__io_putchar( )与_write( )。**实际上,这两个函数都是调用了HAL库发送与接收报文。最后记得修改串口号,这个实验使用串口3,所以第一入口参数就需要用huart3. 一般情况,只需要将串口printf出去,并不需要从串口接收信息,所以只重定向了HAL_UART_Transmit( )。



使用特权

评论回复
8
zljiu|  楼主 | 2021-9-4 13:28 | 只看该作者
IDE也需要配置

使用特权

评论回复
9
zljiu|  楼主 | 2021-9-4 13:29 | 只看该作者
3.3、main.c函数



使用特权

评论回复
10
ufbycd| | 2021-9-5 19:31 | 只看该作者
zljiu 发表于 2021-9-4 13:27
STM32CubeIDE
**在usart.c的最底部,添加函数__io_putchar( )与_write( )。**实际上,这两个函数都是调用了 ...
__io_putchar(int ch)
int _write(int file, char *ptr, int len)
只需实现其中一个即可,无需两个同时实现。
前者是STM32CubeMX添加的,被后都调用;后者是NewLibC库的桩函数,一般实现后者即可。

使用特权

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

本版积分规则

50

主题

3322

帖子

3

粉丝