这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【Mini-F5265-OB】MacOS下开发环境搭建

共4条 1/1 1 跳转至

【Mini-F5265-OB】MacOS下开发环境搭建

助工
2025-01-19 08:45:54     打赏

【前言】

最近入手了mac min,所以不能使用keil来开发Mini-F5265了。在macOS下面通常解决的方式有vscode+arm-none-eabi-gcc编译工具链来开发,当然也可以使用Clion+arm-none-eabi-gcc来开发。但是vscode是免费的,所以是最优做法。而且这套组合可以在不同的操作系统中无缝转移。

【软件准备】

1、安装vscode。这个教程是非常多的,略过。

2、安装make。我使用brew来安装。

3、安装arm-none-eabi-gcc编译工具链,我是下载到pkg可以直接安装好的。但是需要配置本地环境。

4、安装pyocd。使用brew来安装,安装好后,也是需要配置环境变量的,在~/.zshrc文件中的配置如下:

liujianhua@liujianhuadeMac-mini My_gcc_template % cat ~/.zshrcexport ARM_GCC_HOME="/Applications/ArmGNUToolchain/14.2.rel1/arm-none-eabi" # arm-none-eabi-gccexport PATH=$PATH:$ARM_GCC_HOME/binexport PYOCD_HOME="/Users/liujianhua/Library/Python/3.9/" # pyocdexport PATH=$PATH:$PYOCD_HOME/bin

【工程准备】

1、从官网下载示例工程。

2、获取GCCdemo,主要是拿到.ld ,.S,.svd

3、从官网下载到.pack包,这个下载到开发板,还有调试也需要用到。

【工程创建】

首先创建文件夹gcc_template文件夹,下面创建Devcie文件夹,存放驱动等文件,下面创建CMSISMM32F5260分别用于存放系统头文件与驱动。

复制官方库的HAL_LIbSourceIncludeMM32F5260文件夹下,最后其目录如下:

image.png

Soucre目录下, 复制官方给出的GCC_StartAsm到文目录下面,提供启动的汇编文件。

同时复制mm32f5260_flash.ld到该目录下面,提供连接算法文件。

在工程的根目录再创建Core目录,下面创建app目录用于存入用户的代码文件,其结构如下:

image.png

在工程的根目录下面创建Debug目录,复制.pack包与寄存器文件MM32F5260.svd

image.png

到此工程的文件准备完毕。

makefile的编写】

1Makefile我采用分块的书写,首先在device目录下面创建Device.mk,内容如下:

# 模块名_DIR 是上一层传递下来的参数,# 是从工程根目录到该模块文件夹的路径# 向 C_SOURCES 中添加需要编译的源文件C_SOURCES += $(wildcard $(Device_DIR)/MM32F5260/HAL_Lib/Src/*.c)C_SOURCES += $(wildcard $(Device_DIR)/MM32F5260/Source/system_mm32f5260.c)C_SOURCES += $(wildcard $(Device_DIR)/st7735/lcd_st7735.c)# 向 C_INCLUDES 中添加头文件路径C_INCLUDES += -I$(Device_DIR)/CMSIS/Core/IncludeC_INCLUDES += -I$(Device_DIR)/MM32F5260/IncludeC_INCLUDES += -I$(Device_DIR)/MM32F5260/HAL_Lib/IncC_INCLUDES += -I$(Device_DIR)/st7735# 向 LIBDIR 中添加静态库文件路径# LIBDIR += -L$(Libraries_DIR)/Libå# 向 LIBS 中添加需要链接的静态库# LIBS += -lxxxx# link scriptLDSCRIPT = $(Device_DIR)/MM32F5260/Source/mm32f5260_flash.ld# 汇编文件宏定义AS_DEFS +=# 汇编头文件目录AS_INCLUDES +=# 汇编源文件(starup)ASM_SOURCES += $(Device_DIR)/MM32F5260/Source/GCC_StartAsm/startup_mm32f5260.S

主要是添加了驱动的头文件路径、.c的路径以及汇编的路径。

2、Core目录下面创建Core.mk,内容如下:

# 模块名_DIR 是上一层传递下来的参数,# 是从工程根目录到该模块文件夹的路径# 向 C_SOURCES 中添加需要编译的源文件C_SOURCES += $(wildcard $(Core_DIR)/app/*.c)# 向 C_INCLUDES 中添加头文件路径C_INCLUDES += -I$(Core_DIR)/app

这个文件比较简单就是添加了头文件路径以及.c的路径。

2、Makefile编写:

# 项目编译目标名TARGET = template# 调试信息DEBUG = 1# 优化等级OPT = -O1# 链接时优化LTO = -flto# 编译临时文件目录BUILD_DIR = buildEXEC_DIR = build_exec# 模块导入Core_DIR = Coreinclude Core/Core.mkDevice_DIR = Deviceinclude Device/Device.mk# C源文件宏定义C_DEFS += -DUSE_STDPERIPH_DRIVER -DCUSTOM_HSE_VAL# C头文件目录C_INCLUDES +=# C源文件C_SOURCES +=# 链接库LIBS += -lc -lm -lnosys# 库文件路径LIBDIR +=######################################## 编译器指定#######################################PREFIX = arm-none-eabi-# 启用下一项以指定GCC目录#GCC_PATH = /Applications/ARM/bin/ifdef GCC_PATHCC = $(GCC_PATH)/$(PREFIX)gccAS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cppCP = $(GCC_PATH)/$(PREFIX)objcopyDUMP = $(GCC_PATH)/$(PREFIX)objdumpSZ = $(GCC_PATH)/$(PREFIX)sizeelseCC = $(PREFIX)gccAS = $(PREFIX)gcc -x assembler-with-cppCP = $(PREFIX)objcopyDUMP = $(PREFIX)objdumpSZ = $(PREFIX)sizeendifHEX = $(CP) -O ihexBIN = $(CP) -O binary -S######################################## 目标单片机配置信息######################################## cpuCPU = -mcpu=cortex-m33# fpuFPU = #none# float-abiFLOAT-ABI = #none# mcuMCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)# compile gcc flagsASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sectionsCFLAGS += $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sectionsifeq ($(DEBUG), 1)CFLAGS += -g -gdwarf-2endif# Generate dependency informationCFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"NO_COLOR = \033[00mOK_COLOR = \033[32mERR_COLOR = \033[31m######################################## LDFLAGS######################################## librariesLDFLAGS = $(MCU) -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref \-Wl,--gc-sections -ffunction-sections --specs=nano.specs --specs=nosys.specs $(LTO) # 打开浮点打印LDFLAGS += -lc -lrdimon -u _printf_float# default action: build allall: $(EXEC_DIR)/$(TARGET).elf $(EXEC_DIR)/$(TARGET).hex $(EXEC_DIR)/$(TARGET).bin POST_BUILD######################################## build the application######################################## list of objectsOBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))vpath %.c $(sort $(dir $(C_SOURCES)))# list of ASM program objectsOBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.S=.o)))vpath %.S $(sort $(dir $(ASM_SOURCES)))$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) @echo "[CC]    $<"@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)@echo "[AS]    $<"@$(AS) -c $(CFLAGS) $< -o $@$(EXEC_DIR)/$(TARGET).elf: $(OBJECTS) Makefile | $(EXEC_DIR)@echo "[LD]    $@"@$(CC) $(OBJECTS) $(LDFLAGS) -o $@$(EXEC_DIR)/%.hex: $(EXEC_DIR)/%.elf | $(EXEC_DIR)@echo "[HEX]   $< -> $@"@$(HEX) $< $@$(EXEC_DIR)/%.bin: $(EXEC_DIR)/%.elf | $(EXEC_DIR)@echo "[BIN]   $< -> $@"@$(BIN) $< $@$(BUILD_DIR):@mkdir $@$(EXEC_DIR):@mkdir $@.PHONY: POST_BUILDPOST_BUILD: $(EXEC_DIR)/$(TARGET).elfifeq ($(DEBUG), 1)@echo "[DUMP]  $< -> $(EXEC_DIR)/$(TARGET).S"@$(DUMP) -d $< > $(EXEC_DIR)/$(TARGET).Sendif@echo "[SIZE]  $<"@$(SZ) $<@echo -e "$(OK_COLOR)Build Finish$(NO_COLOR)"######################################## 清除临时文件#######################################.PHONY: cleanclean:@rm -rf $(BUILD_DIR)@echo -e "$(OK_COLOR)Clean Build Finish$(NO_COLOR)".PHONY: cleanallcleanall: clean@rm -rf $(EXEC_DIR)@echo -e "$(OK_COLOR)Clean Exec Finish$(NO_COLOR)"######################################## 烧录程序#######################################.PHONY: flashflash: $(EXEC_DIR)/$(TARGET).elf@echo -e "$(OK_COLOR)Start pyOCD$(NO_COLOR)"@pyocd flash $<######################################## 构建并烧录程序#######################################.PHONY: runrun:@make -j12@make flash######################################## 依赖文件#######################################-include $(wildcard $(BUILD_DIR)/*.d)# *** EOF ***

Makefile中,大部分与其他的工程都是一样的下面主要讲一下修改的地方

1、就是CPU的信息,由于MM32F5260是兼容cortex-m33的,所这我指定了CPU cortex-33

2、就是指定汇编文件编译时要与提供的后缀一样,需要修改为.S(大写的S

修改好这些后就可以执行make

image.png

【下载】

在根目录下面创建pyocd.yaml文件:

pack: ./Debug/MindMotion.MM32F5260_DFP.0.2.0.pack
target_override: MM32F5265E8PV
frequency: 24000000

执行make flash,就可以下载程序到开发板:

liujianhua@liujianhuadeMac-mini My_gcc_template % make flash
-e Start pyOCD
0000198 I Loading /Users/liujianhua/mypro/My_gcc_template/build_exec/template.elf [load_cmd]
[==================================================] 100%
0000711 I Erased 0 bytes (0 sectors), programmed 0 bytes (0 pages), skipped 60416 bytes (59 pages) at 115.05 kB/s [loader]

【调试】

安装cortex-debug插件,配置launch.json,其内容如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceFolder}",
            "executable": "./build_exec/template.elf",
            "request": "launch",
            "type": "cortex-debug",
            "targetId": "MM32F5265E8PV",
            "runToEntryPoint": "main",
            "servertype": "pyocd",
            "cmsisPack": "./Debug/MindMotion.MM32F5260_DFP.0.2.0.pack",
            "svdFile": "./Debug/MM32F5260.svd",
            "postRestartCommands": [
                "monitor reset"
            ],
        }
    ]
}

按F5键,就可以进入调试了:

image.png

【总结】

由于MM32只提供了Keil、IAR的基础环境,所以需要在跨平台进行开发的,自己搭建开发环境还是必须的。笔者也是经过半个月的摸索才把环境搭建好。在此分享出来,希望能帮到在非win下面开发的朋友们。

附工程源码:

My_gcc_template.zip




关键词: MacOS     MM32F5260     GCC    

高工
2025-01-19 08:52:21     打赏
2楼

mac mini !? 这个用来开发嵌入式是不是有点奢侈了啊!



院士
2025-01-19 15:52:58     打赏
3楼

楼主 您这makefile是啥格式啊!?



院士
2025-01-19 17:12:36     打赏
4楼

我也遇到过类似的情况。

所以,先把内容复制到记事本上,再粘贴回论坛,就可以workaround这个bug。



共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]