好吧,放着好好的window下的IDE不用,确实点个灯还用linux下怼得有点蛋疼。
上一个帖子搭建了开发环境,本贴楼主就利用该开发环境来点个灯。
当然首先得把相关的工程文件拷贝过来,下载官方的hal库源码,然后把相关文件拷贝到自己的文件来,具体需要什么文件楼主也不说了,直接上传附件就好了。当然有几个点需要注意。启动文件记得选择gcc文件里面的。最后的工程布局如下图所示:
在GCC编译的过程中,arm-none-eabi-gcc把C语言被编译为二进制执行文件,每个C文件都被编译为了
.o的,带有未解析地址的中间文件,arm-none-eabi-ld链接器将所有C文件的
.o 文件链接将他们有序的排列到储存中,并将他们个个函数处的地址解析使得其他不同地方的函数能够跳转到该函数的入口地址。由此一个有序排列的可被单片机执行的文件便生成了。而在编译和链接中间,把这个可被单片机有序排列执行的文件,则需要一个ld文件(一种链接器使用的规则性文件),他告诉链接器单片机系统的ROM、RAM的地址和他们的大小等信息,并指示链接器将什么代码保存在什么位置。当然这种文件有着自己的一套规则和语法,与makefile一样。对于楼主这种菜鸟来说,自己写个ld文件明显很费时间,好在ST有提供了相关的ld,我们可以直接copy来用。路径在每个例程的project的目录下。如图:
接下来还是makefile,说实话楼主刚接触的时候很特别难以理解,现在也是。推荐陈皓老师的《跟我一起写Makefile》这个博客,写得很通俗。
makefile其实说到底也相当MDK的那个make图标吧,让编译器知道执行编译的指令。楼主makefile学习还有段时间,写的makefile有部分参考guthub上的例子。
- #工程的名称以及生成文件的名字
- TARGET=YY_jlink_F767nucleo
- #获取当前工作目录
- STM_DIR=$(shell pwd)
- STM_SRC = $(STM_DIR)/Drivers/STM32F7xx_HAL_Driver/Src
- STM_TEMPLATE = $(STM_DIR)/Drivers/CMSIS/Device/ST/STM32F7xx/Source
- STM_MAIN=$(STM_DIR)/User/src
- #添加包含的C路径以及启动文件路径
- vpath %.c $(STM_SRC) $(STM_TEMPLATE) $(STM_MAIN)
- vpath %.s $(STM_TEMPLATE)
- #类似框架当中的dependens,规则所定义的目标
- #将相关要编译的C文件编译后链接生成中间文件
- #要使用其他外设时候可以在这里添加
- STM_OBJS = system_stm32f7xx.o
- STM_OBJS += startup_stm32f767xx.o
- # HAL peripheral drivers.
- STM_OBJS += stm32f7xx_hal_gpio.o
- STM_OBJS += main.o
- STM_OBJS += stm32f7xx_hal_msp.o
- #STM_OBJS += stm32f7xx_it.o
- #添加相关头文件目录
- INC_DIRS += $(STM_DIR)/Drivers/CMSIS/Include
- INC_DIRS += $(STM_DIR)/Drivers/CMSIS/Device/ST/STM32F7xx/Include
- INC_DIRS += $(STM_DIR)/Drivers/STM32F7xx_HAL_Driver/Inc
- INC_DIRS += $(STM_DIR)/User/inc
- INC_DIRS += .
- INC = $(addprefix -I,$(INC_DIRS))
- #设定相关环境变量
- CC=arm-none-eabi-gcc
- LD=arm-none-eabi-gcc
- OBJCOPY=arm-none-eabi-objcopy
- #链接文件
- LINKSCRIPT=$(STM_DIR)/User/STM32F767ZITx_FLASH.ld
- #c编译器的选项,使用编译优化和硬件浮点数等
- # ToDo: Can use here: -mcpu=cortex-m7 -mfpu=fpv5-sp-d16
- ARCH_FLAGS=-mthumb -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -ffast-math
- CFLAGS=-ggdb -O2 -std=c99 -Wall -Wextra -Warray-bounds -Wno-unused-parameter $(ARCH_FLAGS) $(INC) -DSTM32F767xx -DUSE_HAL_DRIVER
- LDFLAGS=-Wl,--gc-sections -lm
- #生成Bin文件和elf文件。
- .PHONY: all flash clean tty cat
- all: $(TARGET).bin
- $(TARGET).bin: $(TARGET).elf
- $(TARGET).elf: $(STM_OBJS) $(LINKSCRIPT)
- $(LD) $(ARCH_FLAGS) -T $(LINKSCRIPT) -o $[url=home.php?mod=space&uid=775551]@[/url] $(STM_OBJS) $(LDFLAGS)
- $(TARGET).o: $(TARGET).c stm32f7xx_hal_conf.h
- %.o: %.s
- $(CC) $(CFLAGS) -c $< -o $@
- # ToDo: Remove this once gcc is upgraded to understand cortex-m7
- startup_stm32f67xx.s: $(STM_TEMPLATE)/startup_stm32f767xx.s
- sed -e 's/cortex-m7/cortex-m4/' < $< > $@
- %.o: %.c $(TARGET).h stm32f7xx_hal_conf.h
- $(CC) $(CFLAGS) -c $< -o $@
- %.bin: %.elf
- $(OBJCOPY) -O binary $< $@
- flash: $(TARGET).bin
- st-flash write $(TARGET).bin 0x8000000
- clean:
- rm -f $(OBJS) $(STM_OBJS) $(TARGET).elf $(TARGET).bin
复制代码
此内容由EEWORLD论坛网友RCSN原创,如需转载或用于商业用途需征得作者同意并注明出处