vscode开发STM32的一些问题解决

此文章写给我即将到来的Robocon学弟

目录

前言

一、vscode自动提示

二、printf打印问题

二、编译输出

三、断言assert


 

一、vscode自动提示

如果用vscode开发stm32,使用Makefile插件就会自动提示。Makefile插件会根据当前vscode打开的文件夹下的makefile文件内容工作。如果还是出现红色波浪线,出现像找不到头文件等问题,一般重启试vscode一下,或者卸载重装插件可以解决。如果自己添加的文件找不到,应该是makefile文件写错了。注意:makefile可能和cmake等插件冲突。

二、printf打印问题

如果想用串口(usart)打印信息,C语言的printf一定是大家使用最熟悉的函数。那么怎么在STM32实现呢?如下代码即可实现:

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

int UART_Print(char *fmt, ...)
{
    int ret;
    va_list ap;
    va_start(ap, fmt);
    ret = vsprintf(UART_TxBuf, fmt, ap);
    va_end(ap);
    if (ret > 0)
    {
        HAL_UART_Transmit(&PRINT_UART, (uint8_t *)UART_TxBuf, ret, WAIT_DELAY);
    }
    return ret;
}

但是实际应用的时候发现无法打印浮点数。这个时候更改一下makefile文件的编译选项。可以在140多行找到libraries添加-u _printf_float -u _scanf_float。

# libraries
LIBS = -lc -lm -lnosys 
LIBDIR = 
LDFLAGS = $(MCU) -specs=nano.specs -u _printf_float -u _scanf_float -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

二、编译输出

编译的时候可以看见编译速度很快,但是有些电脑在编译的时候发现终端输出太多信息,看起来很卡顿怎么办?在makefile的150多行的编译输出更改一下就好看很多。

# list of c objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of c++ objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
	@$(CC) -c $(CFLAGS)  $< -o $@
	@echo "[ c ] $@"

$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR) 
	@$(CPP) -c $(CFLAGS) $< -o $@
	@echo "[c++] $@"

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
	@$(AS) -c $(CFLAGS) $< -o $@
	@echo "[asm] $@"

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
	$(SZ) $@
	@echo "[->] $@"

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(HEX) $< $@
	
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(BIN) $< $@	
	
$(BUILD_DIR):
	mkdir $@

编译后的效果如下:

e5a47573b45b42ea9250d606768a1ea3.png

 

三、断言assert

如果看Hal库的代码,可以看见有很多的assert_param。这个东西在代码初始化的时候如果出现了问题会触发断言。

f50728e2d3e247f1a521c3d6a978a281.png

打开STM32CubeMX的这个选项。

65cf54c6385a49d6971a8094cc5e7afa.png

 然后在main.c文件的最下边就会出现这个assert_failed函数。然后更改里面的printf函数就可以实现判断初始化时有没有出现问题了,出现问题会直接串口打印错误文件和行数(Hal库官方的基本不会出现问题,但是我们可以在自己的初始化代码里使用)。

344b30e6de984d029d7e85f83f6dd83c.png

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值