[STM32H5]STM32H5开发之printf的应用与固件编译时间的输出

上一篇帖子讲了搭建STM32H503RBT6-Nucleo的开发环境,感觉STM32H503RBT6-Nucleo的上手速度真的是泰裤辣,今天呢,趁热打铁,继续对STM32H503RBT6-Nucleo进行深一步的研究,本次将实现使用串口与printf函数,同时利用printf输出编译的时间与日期等等。
printf 是 C 语言中用于输出格式化输出的函数,它是标准输入/输出库 (stdio.h) 的一部分。
printf 的语法如下:

复制
int printf(const char *format, ...);

这里,format 是一个字符串,用于指定输出的格式,可选的省略号 (...) 表示可以有额外的参数与格式字符串中的格式说明符相对应。
使用printf函数可以很容易的将想要利用串口输出的数据打印出来,使用printf也可以做log输出,非常省事儿。使用printf有个前提,就是要将串口初始化,同时需要打开keil的Usemicrolib,之后在重定义串口。这样才能正常的使用printf函数。
本次利用STM32H503RBT6-Nucleo来实现以上描述的功能。首先由于板载带有STLINKV3,这个STlinkV3比较好在有个虚拟串口功能,这里虚拟串口以默认连接STM32H503RBT6芯片的串口3。

图1 开发板串口硬件连接说明

既然知道串口的连接,就可以利用cubemx实现对串口3的初始化了。打开cubemx,找到串口3的位置,然后选中,接下来就可以对其设置了,由于cubemx给了个基础配置,就是使用波特率115200,同时8位字节长度,一个停止位,无校验位,这样就可以了。

图2 使用cubemx对串口3配置

当配置完成之后,就可以使用cubemx进行工程生成了,这里最基本的底层配置就算是完成了。接下来就是对串口重定义了,这里由于用到的是串口3,因此代码如下:

复制
int fputc(intch, FILE *f)

{

    HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 2);//huart根据你的配置修改

return ch;

}


当重定义之后就可以使用printf了,但是这时候写printf虽然不报错,编译也能通过,但是将程序烧录到芯片之中后,芯片是不能正确运行的,因为没有勾选UseMicroLIB,因此需要在keil上勾选一下,至此,就可以玩好的玩耍printf了。

图3 keil的配置

这么玩耍printf好像也没啥意思,我们可以提升一点有意义的事情,比如通过printf输出代码编译出来的时间,日期和版本号。这里的时间日期都是代码编译出来的时候,keil获取的本地电脑时间,其实这个信息是非常有意义的,因为在做程序版本管理的时候,这信息可以代表程序是否是最新一次编译的。同时再配合自定义的程序版本号,就可以清晰明了的知道这个程序是否是最新的了。防止固件更新错误,导致误工误事。好,那我们说干就干,那么怎么利用keil获取本地时间呢?
这里keil其实已经帮我们做好了。就是    __DATE__,和 __TIME__,前者是日期,后者是时间。通过调用这两个预定义宏,就可以获取当前的时间和日期。接下来我们写点代码,就可以实现该功能。
写两个结构体:

复制
typedefstruct



{



char CodeVersion[32]; // 软件自定义版本



char CodeBuildDate[32]; // 程序编译日期



char CodeBuildTime[32]; // 程序编译时间



} AppInfo_t;



constAppInfo_tsg_tAppInfo =



{



"STM32_V0.1.0",



__DATE__,



__TIME__,



};


接下来利用printf来打印结构体,就可以了。

复制
printf("This is a serial demo\r\n");



printf("Version : %s\r\n", sg_tAppInfo.CodeVersion);



printf("buildTime: %s\r\n", sg_tAppInfo.CodeBuildDate);



printf("buildTime: %s\r\n", sg_tAppInfo.CodeBuildTime);

图4 串口输出信息

至此,STM32H503RBT6-Nucleo的printf已经讲完了,其实printf还可以做很多事情,log输出,简单的字符串输出都可以用它,非常简单方便。。
---------------------
作者:yangjiaxu
链接:https://bbs.21ic.com/icview-3318224-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值