使用Clion开发STM32串口调试遇到问题之重定向printf不显示(已解决问题)

为什么要使用重定向printf

C语言中经常使用printf来输出调试信息,打印到屏幕。由于在单片机中没有屏幕,但是我们可以重定向printf,把数据打印到串口,从而在电脑端接收调试信息。这是除了debug外,另外一个非常有效的调试手段

但是由于使用编译的c语言不是官方定义的哪个版本

直接跳转解决方案:解决问题的方法

开发环境

  • Clion 24年版本
  • 使用STM32cubeMX进行项目初始化
  • HAL官方库
  • arm-none-eab

问题

使用Clion进行串口调试的时候发现 已经进行fputc的重写还是没有向串口控制台返回数据

经过查资料发现都是配置keil的教程 但是还是找到了稚晖君的文章找到了原因 具体不赘述可以看稚晖君的文章他使用的是标准库 我这边使用的是hal库 hal库里面syscalls.c重写了稚晖君文章里的函数

使用KEIL设置是需要勾选USE MicroLIB

但是Clion并没有这个功能所以我们需要手动配置

解决问题的方法

cpp 复制代码
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, HAL_MAX_DELAY);
    return ch;
}

直接粘贴到hal库的usart.c文件的里面

接着回到main方法里

cpp 复制代码
 HAL_Delay(1000);
      printf("你好!!\n");
      printf("%.2f\n",1.52);

还是这几句代码 接着编译烧录

问题解决

相关推荐
文sir.8 小时前
温湿度采集系统(stm32+mqtt+Onenet云平台+esp8266)
stm32·单片机·嵌入式硬件·mqtt·onenet·云平台·esp8266
DIY机器人工房8 小时前
嵌入式面试题:你有没有用过直接基于TCP协议,不借助HTTP、MQTT这类上层协议的项目经历?
stm32·单片机·嵌入式硬件·面试题·diy机器人工房
历程里程碑9 小时前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法
树在风中摇曳10 小时前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存
雨落在了我的手上10 小时前
C语言入门(二十一):字符函数和字符串函数(1)
c语言
zhmc10 小时前
Cortex M0单片机指令执行周期
单片机·嵌入式硬件
编程小白菜12310 小时前
STM32L051单片机485Ymode升级后程序不能正常运行问题
stm32·嵌入式硬件
embrace9911 小时前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程
EXtreme3511 小时前
深入浅出数据结构:手把手实现动态顺序表,从此不再怕数组扩容!
c语言·顺序表·malloc·realloc
NEU-UUN12 小时前
5.1.STM32-EXTI外部中断——全程手敲板书
stm32·单片机·嵌入式硬件