(在Windows10操作系统上,基于STM32CubeMX arm-gcc和Openocd)
在上一篇文稿当中我们学会了如何用Visual Studio Code+STM32Cube MX在现有工程框架增加自己的代码,整体即不破坏原框架又让代码 整洁美观。
下面就以跑马灯的案例基础上增加Printf函数重定向,及浮点数的打印说明
一:Printf函数重定向
MY_Printf.c文件新增重定向函数:
在MyApplication文件下新增MyPrintf.c,编写如下代码
特别说明:
1.因huart1指向串口函数,需要在"MyApplication.h"下新增#include "usart.h"
2.在"MyPrintf.c"下需新增#include "MyApplication.h"
3.在"MyApplication.mk"下需要新增"MyApplication/MyPrintf.c "
#include "MyApplication.h"
/* Private function prototypes -----------------------------------------------*/
//使用Printf一定要加\n
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#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;
}
__attribute__((weak)) int _write(int file, char *ptr, int len)
{
int DataIdx;
for (DataIdx = 0; DataIdx < len; DataIdx++)
{
__io_putchar(*ptr++);
}
return len;
}
编写测试函数:
在我的初始化函数中编写如下函数测试:
如果Printf中文出现乱码可以点击Visual Studio Code右下角UTF-8 更改为GB2312,我一般没有使用中文打印所以没做调整
串口打印测试:
通过串口打印,发现成功了,但是小数打印不了
二:增加打印浮点数功能
Makefile修改:
# libraries
LIBS = -lc -lm -lnosys
LIBDIR =
LDFLAGS = $(MCU) -u_printf_float -u_sprintf_float -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
浮点数打印测试
修改Makefile后重新编译下载测试:
从上图可以看到已实现浮点数打印
三:STM32CubeMX再次生成初始化代码,Visual Studio Code编译报错解决
如果在原STM32CubeMX文件中进入.ioc文件重新图形化编辑,并重新生成(GENERATE CODE)初始化代码,再进入到Visual Studio Code编译会报错
其实这个是STM32CubeMX的一个BUG,打开Makefile发现多一个-IDrives/CMSIS/Include