在Keil中,使用printf进行窗口打印只需要重写fputc
即可
//本篇文章就是基于这个重新进行改编的,你根据自己重写的代码进行改编
#include "stdio.h"
int fputc(int c,FILE *Stream)
{
Usart_SendData(c);
return c;
}
但是使用CLion时,发现重写后不能进行串口打印,但是串口接收数据是没有问题的。
这里的问题在于,Keil中的FILE
定义在stdio.h
头文件中,所以需要在项目中包含这个头文件,Keil里面包含的是MDK\ARM\ARMCC\include
这个目录下的stdio.h
,而在Clion中是不会链接到这个文件的。在Clion中链接的是GNU-Tools-ARM-Embedded\arm-none-eabi\include
里面的stdio.h
函数改进:只需将将之前的fputc
函数换成下面的两个然后再在Cmakelists.txt
的最后加上一行代码即可
替换函数:
uint8_t __io_putchar(int c)
{
Usart_SendData(c);//这里需要换成你之前fputc中写的
return c;
}
uint8_t _write(int file, char *ptr,int len)//这个函数不需要动
{
int DataIdx;
for(DataIdx = 0; DataIdx < len; DataIdx++)
{
__io_putchar(*ptr++);
}
return len;
}
Cmakelists.txt添加语句:(不需要改动)
set(COMMON_FLAGS "-specs=nosys.specs -specs=nano.specs -u _printf_float ")
最终效果: