如何使用Visual Studio Code+STM32Cube MX优雅的编写STM32程序(3)

(在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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值