vhgh1122 2017-09-21 09:29 采纳率: 0%
浏览 757

在stm32中将程序下载至开发板上,printf 函数在串口助手显示不出来如何解决

在stm32中将程序下载至开发板上,printf 函数在串口助手显示不出来如何解决

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:52
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客也许可以解决你的问题👉 :stm32中printf整形和浮点型会进入硬件错误中断
    • 除此之外, 这篇博客: STM32 在PC端串口助手上打印中文字符----printf()函数重定向中的 printf()的重定向(三个步骤) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      步骤一:
      重定向: 简单来说就是用户写了一个跟C标准库一模一样的函数,在进行工程编译时,连接器检查到用户自己编写的有某个和C库函数同名的用户写的函数,就会优先采用用户编写的函数,这就叫重定向; 而且这里我们为了实现重定向printf()函数,我们重写了fputc(int ch,FILE *f)这个C标准库函数,因为printf()在C标准库函数中实质上是个宏定义,最终调用的是fputf(int ch,FILE *f)这个函数;

      //重定向C库函数printf()到串口,重定向后可使用printf();
      int fputc(int ch,FILE *f)
      {
      	USART_SendData(USART1,(uint8_t)ch);
      	while(!(USART_GetFlagStatus(USART1,USART_FLAG_TC)));
      	return ch;
      }
      

      printf()对应的底层函数接口在"stdio.h"中的第673行
      在这里插入图片描述
      注:

      1. ch为要发送的8位数据;
      2. 若使用C标准输出库函数,需要在main.c中把stdio.h头文件包含进来,还要在魔法棒中勾选一个“Use MicroLIB(使用微库)”,这个微库是MDK为嵌入式应用量身定做的C库,在编程时,要先有库,才能重定向;如下图配置;
        步骤二
        在这里插入图片描述
        步骤三
        在需要用到printf()函数的文件中加上头文件 stdio.h 文件;如下列工程;
      #include "stm32f10x.h"
      #include "usart.h"
      #include "stdio.h"   //标准输入输出头文件;
      #include "systick.h"
      
      int main()
      {
      	systick_Init();
      	USART1_Init(115200);
      	while(1)
      	{
      		printf("无语尊wuyuzun\n");
      		delay_ms(100);
      	}	
      }
      
      

      完成上面这两个操作后,就可以通过串口助手软件看输出了:
      在这里插入图片描述


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看