博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32CubeMX之串口重定向(printf 的使用)
阅读量:3781 次
发布时间:2019-05-22

本文共 1723 字,大约阅读时间需要 5 分钟。

概述

​ 我们在初学 C 语言的时候,第一句打印就是 printf("hello world") ,后面也经常用来调试打印信息,但是我们在单片机开发的时候 printf 就用不了,因为 printf 会打印在命令行窗口上,但是单片机上肯定没有,所以我们通过改写函数,将 printf 重定向到串口之上,然后通过串口调试助手来显示。

文章目录

一. 改写函数

新建一个头文件 debug_com.h

#ifndef __DEBUG_COM_H#define __DEBUG_COM_H#ifdef __cplusplusextern "C" {
#endif #include "stdio.h"#include "usart.h" #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */PUTCHAR_PROTOTYPE{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch;}#ifdef __cplusplus}#endif#endif

​ 在使用 printf 的时候,其实最终也是调用 fputc 函数进行打印,因此我们可以通过添加以下代码来达成我们的目的:

HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

注意: huart1 可以根据你使用的串口进行修改

之后将该头文件放到一个文件夹(比如 debug_com )里面,再放到项目目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvwPSwrC-1593615485391)(/image/项目目录.png)]

再包含该头文件,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW0Mnioh-1593615485394)(/image/包含debug_com头文件.png)]

之后在项目中使用 #include "debug_com.h" 就可以使用 printf

二. printf 使用实例

打印串口1中所用到的寄存器的首地址

//包含头文件#include "debug_com.h"
//主函数中添加  while (1)  {
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("huart1.Instance->SR %p\r\n",&huart1.Instance->SR); printf("huart1.Instance->DR %p\r\n",&huart1.Instance->DR); printf("huart1.Instance->BRR %p\r\n",&huart1.Instance->BRR); printf("huart1.Instance->CR1 %p\r\n",&huart1.Instance->CR1); printf("huart1.Instance->CR2 %p\r\n",&huart1.Instance->CR2); printf("huart1.Instance->CR3 %p\r\n",&huart1.Instance->CR3); printf("huart1.Instance->CTPR %p\r\n",&huart1.Instance->GTPR); HAL_Delay(1000); printf("\r\n"); }

这样,我们就可以在调试助手上看到寄存器的地址值了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7q73Mn0r-1593615485396)(/image/调试助手中寄存器地址.png)]

后续还会继续分享串口的其他基础知识和使用,感兴趣的小伙伴记得关注我

-----------------------------------------------结束--------------------------------------------------------
文章有价值,请各位看官点个赞关注我或者点右边打个赏吧!

转载地址:http://iumvn.baihongyu.com/

你可能感兴趣的文章
在MFC中使用Static text控件显示消息
查看>>
mfc 怎样动态设置static text 的可见属性
查看>>
VC++ 获取系统时间的方法汇总
查看>>
sqlite3 表里插入系统时间(时间戳)
查看>>
SQLite 3 一些基本的使用
查看>>
vc 中对对话框的几种操作
查看>>
读写配置文件(.ini)
查看>>
利用GetPrivateProfileString读取配置文件(.ini)
查看>>
另一种判断文件存在的方法--_access和_waccess
查看>>
Sleep函数
查看>>
C++标准转换运算符reinterpret_cast
查看>>
static_cast、dynamic_cast、const_cast和reinterpret_cast总结
查看>>
Dynamic/Static/Reinterpret/Const and Volatile Cast (English)
查看>>
C++ reinterpret_cast,const_cast等 显式类型转换总结
查看>>
GetLBText()和GetWindowText()区别
查看>>
Win32串行通信中文版(Serial Communications In Win32)
查看>>
strtok、strtok_s、strtok_r 字符串分割函数
查看>>
在串口通信开发中实现自动查找串口端口的方法
查看>>
串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
查看>>
strcmp与strncmp的区别
查看>>