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

这篇具有很好参考价值的文章主要介绍了STM32串口printf调试输出(SSCOM V5.13.1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1- 原理图分析

PC与CPU相互通信就是通过USB Type_C接口和USB电平转换实现的。
我们可以看到,CPU通过管脚USART1连接CH340C芯片将USB转串口,实现PC与CPU之间的通信。
当然,这里用的是CH340的芯片,我们就需要安装ch340串口。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网


2- 配置使能串口USART1

stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网
按住Ctrl+s生成代码。


3- 添加代码

在usart.h中添加头文件<stdio.h>
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网
标准库的 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()函数中调用就可以了。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网


4- 烧录连接显示

然后烧录,烧录之后记得在STM32Programmer断开连接,再用SSCOM连接就可以看到打印结果了。Reset一次就会打印一次。记住DTR不能打钩。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网


5- 浮点数输出

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

当你想要输出浮点数的时候默认是不行的,但是会提示让你去怎么修改,记得最后添加 \t\n 。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网

如果要使能浮点数打印的话,则需要添加链接选项"-u_printf_float"支持。这个配置好后,提示的错误消失,并能正常打印浮点数了。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网

成功输出浮点数。
stm32串口输出printf,STM32,单片机,stm32,c语言,嵌入式硬件,物联网

如有错误还请指出~文章来源地址https://www.toymoban.com/news/detail-664595.html

到了这里,关于STM32串口printf调试输出(SSCOM V5.13.1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeIDE开发(四), stm32调试信息串口通信输出显示

    目录 一、stm32串口配置 三、串口驱动功能调用及编译实现 四、编译测试         关于cubeIDE开发基本技巧及流程,本文不详细叙述,请参考:cubeIDE快速开发流程_py_free的博客-CSDN博客_cubeide汉化 一、stm32串口配置         本文采用的开发板是stm32L496VGT3,其有两个 USB 接口,

    2023年04月08日
    浏览(52)
  • STM32开发中printf利用重定向方法输出到串口(CubeMX 基于HAL库方法,带实际项目应用技巧 巧用goto语句)

    在stdio.h中的printf 原本输出到控制台, 在单片机应用中一般将其改到串口, 并利用串口输出信息来调试程序,非常方便。(本文以USART1为例) 此外CubeMX及CubeIDE 由于自动生成基础代码,因此每当更改硬件配置的时候, 都会被重置生成的基础代码。 这里使用goto语句来避免部分

    2024年02月04日
    浏览(83)
  • 【STM32学习5】STM32使用printf函数 打印到电脑串口助手

    本文所使用的方法与代码参考自正点原子,如果想要详细了解这方面的知识,请阅读正点原子官方提供的文档。 在开发STM32应用时,将一些信息通过串口打印到电脑上是常用的调试手段。C语言标准库中的printf函数是我们常用的打印函数。但是在STM32应用下一般无法直接使用这

    2024年02月02日
    浏览(48)
  • STM32 HAL库串口重映射printf

    添加代码 keil设置 microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。 microlib 进行了 高度优化以使代码变得很小 。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运

    2024年02月16日
    浏览(41)
  • STM32-HAL-串口的printf重定向

    一、C语言的格式化输出 C语言的printf是一个标准库函数,用于将格式化的数据输出到标准的输出设备(通常是终端) 基本语法: 其中的第一个参数 const char *format 表示输出格式,后面的参数是可变参数,用于填充格式化字符串中的占位符。 字符输出原理: 格式化字符串处理

    2024年02月11日
    浏览(51)
  • STM32使用串口printf乱码问题解决方法

    使用stm32系列单片机串口打印问题,在使用HAL库重新定义printf为串口输出后,输出的内容全都是乱码,试了网上的方法后还是乱码。  像这样的    最后发现是串口调试助手和keil的文字编码方式不同, keil中是GB 2312,串口调试助手是UFT_8,所以打印出来才会乱码  将串口调试助

    2024年02月11日
    浏览(37)
  • STM32串口映射printf——发送中文字符乱码

    简介         在将之前的工程使用Notepad++修改代码后,加载到现有工程中,使用串口打印输出测试串口功能,发现输出的中文字符全为乱码。对照keil设置,确保与之前工程中设置一样,莫名的就是不能输出中文字符。 解决过程         此处串口已输出为乱码,说明移植过来

    2024年02月12日
    浏览(51)
  • stm32 ->HAL库重定向printf,实现串口打印

    在CubeMX中初始化uart引脚 包含printf函数的头文件 stdio.h 重定义printf函数 勾选 Use MicroLIB 编译烧录

    2024年02月16日
    浏览(42)
  • stm32(HAL库)使用printf函数打印到串口

    目录 1、简介 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合   4、效果测试 在HAL库中,常用的printf函数是无法使用的。本文通过重映射实现在HAL库中进行printf函数。 2.1.1 SYS配置  2.1.2 RCC配置 在usart.c函数最下方复制如下代码 接着在

    2024年02月14日
    浏览(45)
  • stm32之12.如何使用printf打印输出

      主函数增加这些代码即可实现printf打印输出  需要添加头文件 #include \\\"stdio.h\\\" --------------- 源码 struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int c, FILE *f)  {     /* 发送一个字节 */     USART_SendData(USART1,c);     /* 等待发送完毕 */     while(

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包