STM32串口printf调试输出(SSCOM V5.13.1)


1- 原理图分析

PC与CPU相互通信就是通过USB Type_C接口和USB电平转换实现的。
我们可以看到,CPU通过管脚USART1连接CH340C芯片将USB转串口,实现PC与CPU之间的通信。
当然,这里用的是CH340的芯片,我们就需要安装ch340串口。
在这里插入图片描述


2- 配置使能串口USART1

在这里插入图片描述
按住Ctrl+s生成代码。


3- 添加代码

在usart.h中添加头文件<stdio.h>
在这里插入图片描述
标准库的 printf函数 能方便的输出格式化的字符串。

而单片机只有串口,只能打印int型数。如果能借用标准库 stdio.h 文件里的 printf函数,那么单片机输出格式化字符串就方便了。
printf函数的底层会调用字符输出函数,我们只需要把这个字符输出函数给重新实现为我们的单片机串口输出函数,就可以实现 printf函数。

在usart.c中添加printf()函数的重定向实现,这串代码对gcc或者keil编译器都是可以用的。

/* USER CODE BEGIN 1 */
#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)/*char类型是以int类型存储的,所以可以用int*/
#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;
}
/* USER CODE END 1 */

因为我的STM32单片机上时使用的是gcc编译器,所以其实直接这样写也是可以的,直接修改__io_putchar(int ch)函数。

/* USER CODE BEGIN 1 */
__io_putchar(int ch)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}
/* USER CODE END 1 */

最后在main()函数中调用就可以了。
在这里插入图片描述


4- 烧录连接显示

然后烧录,烧录之后记得在STM32Programmer断开连接,再用SSCOM连接就可以看到打印结果了。Reset一次就会打印一次。记住DTR不能打钩。
在这里插入图片描述


5- 浮点数输出

由于单片机的硬件资源限制(内存太小),所以STM32 单片机里C语言标准库的printf()并不支持浮点数的输出。

当你想要输出浮点数的时候默认是不行的,但是会提示让你去怎么修改,记得最后添加 \t\n 。
在这里插入图片描述

如果要使能浮点数打印的话,则需要添加链接选项"-u_printf_float"支持。这个配置好后,提示的错误消失,并能正常打印浮点数了。
在这里插入图片描述

成功输出浮点数。
在这里插入图片描述

如有错误还请指出~

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值