从0开始搭建基于ARM GCC的软件系统02——使用ARM GCC编译SDK

本文以STM32L4VGT6为例,因为手上只有这么一块开发板。其它IC处理方法应该类似。

一、准备工作

1、打开官网https://www.st.com/content/st_com/en.html,下载对应芯片的SDK,本例中:STM32Cube_FW_L4_V1.14.0。不清楚怎么下载的同学可以参考“STM32L4VGT6官方软件包下载”

2、下载ARM GCC编译器。本例以windows下为例下载gcc-arm-none-eabi-5_4-2016q3-20160926-win32.rar。不清楚怎么下载的自行百度一下……

3、下载windows下的make工具。我下载的是:make-3.81-bin.zip。可自行百度下载,另外,后面使用时会用到两个dll文件,可先一并下载libicon2.dll和libintl3.dll。

 4、其它辅助工具。我使用的是以下这些,从其它方案的SDK中找现成的。可百度查找。

 

二、编译环境设置

我使用的一个批处理文件设置环境变量:

set path=E:\ARM\gcc\STM32Cube_FW_L4_V1.14.0\tools\linux;E:\DevelopmentEnvironment\gcc-arm-none-eabi-5_4-2016q3-20160926-win32\bin;E:\DevelopmentEnvironment\gcc-arm-none-eabi-5_4-2016q3-20160926-win32\arm-none-eabi\bin;E:\ARM\gcc\STM32Cube_FW_L4_V1.14.0\tools\make-3.81-bin\bin;%path%

%ComSpec%

E:\ARM\gcc\STM32Cube_FW_L4_V1.14.0\tools\linux

第一步中第4点下载的工具路径。

E:\DevelopmentEnvironment\gcc-arm-none-eabi-5_4-2016q3-20160926-win32\bin;E:\DevelopmentEnvironment\gcc-arm-none-eabi-5_4-2016q3-20160926-win32\arm-none-eabi\bin

第一步中第2点下载的arc gcc工具路径。

E:\ARM\gcc\STM32Cube_FW_L4_V1.14.0\tools\make-3.81-bin\bin;

第一步中第3点下载的make工具路径。

批处理文件建好后,双击运行如下:

到这里,工具、环境的准备工作已差不多了。接下来就是准备SDK。

 

三、SDK搭建

1、从之前下载的官方SDK STM32Cube_FW_L4_V1.14.0目录中找到以下所需文件:

(1)系统启动文件,注意一定要选择gcc目录下的。Drivers\CMSIS\Device\ST\STM32L4xx\Source\Templates\gcc\startup_stm32l496xx.s

(2)系统初始化文件。Drivers\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c

(3)编译连接脚本文件,本例中选择STM32L496ZGTx_FLASH.ld。Projects\NUCLEO-L496ZG\Templates\SW4STM32\STM32L496ZG_NUCLEO\STM32L496ZGTx_FLASH.ld

(4)HAL文件,根据需要选择,如果测试main为空,什么都没有的话,也可以先不用HAL。Drivers\STM32L4xx_HAL_Driver\Src\*

 

为后续方便,我是将所需要文件的目录结构与官方SDK保持一致,其目录结构如下:

如上图所示,我新建的工程目录为Projects/STM32L496VGT6。工作目录内容如下:

可以看到这里包含了启动文件和编译连接脚本,这里我是直接拷贝到工程目录来的,其实也可以不拷贝,保持原SDK路径。

 

注意红色框新添加了两个文件:

gccl2.bat:就是第二步中提到的配置环境变量的批处理文件。

Makefile:gcc编译所必需的文件。具体后面讲解。

 

四、书写Makefile

不了解Makefile的请先自行百度了解,网上资料很多。如:“GNU make中文手册.pdf”等。

因为如果不了解一下这个,后面的内容可能就会一脸蒙B了。^_^

 

直接上Makefile内容添加注解:

# 添加一些变量, TOP指令SDK根目录(以工程目录为基准); TARGET定义为目标输出文件
TOP = ../..
TARGET = STM32L496VGT6


# 添加包含路径. 需要编译的文件所在目录都需要添加到这里
vpath %.S .
vpath %.c ./Src $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src
vpath %.h . ./Inc


# 添加宏定义STM32L496xx, 官方SDK中一些头文件中会用到
DEFS += -DSTM32L496xx


# 头文件路径. 需要引用的头文件所在目录都需要添加到INCS变量中,以方便引用
INCS += -I. -I./Inc
INCS += -I$(TOP)/Drivers/CMSIS/Include
INCS += -I$(TOP)/Drivers/CMSIS/Device/ST/STM32L4xx/Include
INCS += -I$(TOP)/Drivers/STM32L4xx_HAL_Driver/Inc


# 源文件生成的目标文件,都需要添加到OBJS变量中
OBJS += ./Src/main.o
OBJS += ./startup_stm32l496xx.o
OBJS += ./Src/system_stm32l4xx.o
OBJS += ./Src/stm32l4xx_it.o ./Src/stm32l4xx_hal_msp.o
OBJS += $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.o
OBJS += $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.o
OBJS += $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.o
OBJS += $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.o
OBJS += $(TOP)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.o


# 编译参数。使用了编译优化和硬件浮点数
CFLAGS += -mcpu=cortex-m4 -mthumb -Wall
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
CFLAGS += -Os
CFLAGS += -ffunction-sections -fdata-sections


# 链接参数。
LFLAGS += -mcpu=cortex-m4 -mthumb
LFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
LFLAGS += -Wl,--gc-sections


# 最后生成的bin文件
all:$(TARGET).bin

clean:
    rm -f $(OBJS) $(OBJ_FLASH) $(OBJ_SRAM)  
    rm -f $(TARGET).bin $(TARGET).elf $(TARGET)s.bin $(TARGET)s.elf

    
# 将elf文件转换为bin文件
$(TARGET).bin:$(TARGET).elf
    @arm-none-eabi-objcopy -O binary -S $< $@
    

# 连接所有目标文件,生成elf文件
$(TARGET).elf:$(OBJS) $(OBJ_FLASH)
    @arm-none-eabi-gcc $(LFLAGS) $^ -T./STM32L496ZGTx_FLASH.ld -o $@
    @arm-none-eabi-size $@

    
# 编译生成目标文件
%.o:%.S
    @echo cc: $<
    @arm-none-eabi-gcc $(CFLAGS) -c $< -o $@

%.o:%.c
    @echo cc: $<
    @arm-none-eabi-gcc $(CFLAGS) $(DEFS) $(INCS) -c $< -o $@

 

五、编译

所有工作都准备好后,运行编译环境,执行make指令即可。编译过程可能会出现一些报错,逐一解决即可。

整个正常的编译过程如下:

编译完成后工程目录文件如下:

使用STM32 ST-LINK Utility工具烧录STM32L496VGT6.bin文件即可。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值