6、编写工程makefile
工程的makefile文件如下:
#工程的名称及最后生成文件的名字
TARGET = project
#设定临时性环境变量
export CC = arm-none-eabi-gcc
export AS = arm-none-eabi-as
export LD = arm-none-eabi-ld
export OBJCOPY = arm-none-eabi-objcopy
#读取当前工作目录
TOP=$(shell pwd)
#设定包含文件目录
INC_FLAGS= -I $(TOP)/CORE
-I $(TOP)/CODE/COMMON/INC
-I $(TOP)/CODE/PROCESS/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_ADC1/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_DEFINE/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_KEY/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_NRF24L01/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_SET/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_STRUCT/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_USART1/INC
-I $(TOP)/FWLIB/INC
-I $(TOP)/IT/INC
-I $(TOP)/SYSTEM/INC
#
CFLAGS = -W -Wall -g -mcpu=cortex-m3 -mthumb -D STM32F10X_MD -D USE_STDPERIPH_DRIVER $(INC_FLAGS) -O0 -std=gnu11
C_SRC=$(shell find ./ -name '*.c')
C_OBJ=$(C_SRC:%.c=%.o)
#
#
ASFLAGS= -W -Wall -g -Wall -mcpu=cortex-m3 -mthumb
ASM_SRC=$(shell find ./ -name '*.s')
ASM_OBJ=$(ASM_SRC:%.s=%.o)
#
#
.PHONY: all clean update
#
#
all:$(C_OBJ) $(ASM_OBJ)
$(CC) $(C_OBJ) $(ASM_OBJ) -T Linker.ld -o $(TARGET).elf -mthumb -mcpu=cortex-m3 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=Project.map -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80
$(OBJCOPY) $(TARGET).elf $(TARGET).bin -Obinary
$(OBJCOPY) $(TARGET).elf $(TARGET).hex -Oihex
#
#
$(C_OBJ):%.o:%.c
$(CC) -c $(CFLAGS) -o $@ $<
#
#
$(ASM_OBJ):%.o:%.s
$(AS) -c $(ASFLAGS) -o $@ $<
#
#
clean:
rm -f $(shell find ./ -name '*.o')
rm -f $(shell find ./ -name '*.d')
rm -f $(shell find ./ -name '*.map')
rm -f $(shell find ./ -name '*.elf')
rm -f $(shell find ./ -name '*.bin')
rm -f $(shell find ./ -name '*.hex')
rm -f $(shell find ./ -name '*.cdep')
这里makefile的主要功能就是把工程里的所有.c和.s文件编译生成.o文件,然后根据链接文件把生成的.o文件链接生成目的文件,也就是最后用来下载的.hex和.bin文件。
7、使用make进行编译链接并生成.bin和.hex文件
从现在开始就是激动人心的时刻了,在终端进入makefile所在目录,执行make命令,如果你看到终端很流畅的输出一坨又一坨的内容,并最终执行完毕,没有错误,然后你再makefile同级目录多出来了一个.hex文件和一个.bin文件,那么恭喜你,离成功不远了,准确的说应该是离成功就差下载一步了。博主走到这一步时,别提有多开心了。
8、使用jlink对芯片进行烧录
走到这一步就是见证奇迹的时刻了,在终端输入以下命令进入JLink工作目录:
$ cd /opt/SEGGER/JLink/
如果你没有这个目录,那么很不幸,JLink没有安装成功,请移步第二步。
如果有,接下来确定硬件连接正确,然后把USB连到虚拟机上,在终端执行命令:
$ ./JLinkExe
出现以下画面证明连接成功并进入工作区:
然后按照提示输入:
connect
出现下面结果,提示输入设备型号:
由于我们用的c8t6系列,所以输入:
STM32F103C8
执行后会让选择连接模式:SWD/JTAG
这里博主用的时SWD,所以输入SWD:
然后让选通信速率,这里博主选的4000,问题不大,建议不要选太大。
出现以上的结果证明配置成功了,接下来就是下载了:
输入:
loadbin <.bin文件所在目录> <下载起始地址>
得到下面的结果证明下载成功了,奇迹见证完毕:
6、编写工程makefile
工程的makefile文件如下:
#工程的名称及最后生成文件的名字
TARGET = project
#设定临时性环境变量
export CC = arm-none-eabi-gcc
export AS = arm-none-eabi-as
export LD = arm-none-eabi-ld
export OBJCOPY = arm-none-eabi-objcopy
#读取当前工作目录
TOP=$(shell pwd)
#设定包含文件目录
INC_FLAGS= -I $(TOP)/CORE
-I $(TOP)/CODE/COMMON/INC
-I $(TOP)/CODE/PROCESS/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_ADC1/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_DEFINE/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_KEY/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_NRF24L01/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_SET/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_STRUCT/INC
-I $(TOP)/CODE/REMOTE_CONTROLER/REMOTE_CONTROLER_USART1/INC
-I $(TOP)/FWLIB/INC
-I $(TOP)/IT/INC
-I $(TOP)/SYSTEM/INC
#
CFLAGS = -W -Wall -g -mcpu=cortex-m3 -mthumb -D STM32F10X_MD -D USE_STDPERIPH_DRIVER $(INC_FLAGS) -O0 -std=gnu11
C_SRC=$(shell find ./ -name '*.c')
C_OBJ=$(C_SRC:%.c=%.o)
#
#
ASFLAGS= -W -Wall -g -Wall -mcpu=cortex-m3 -mthumb
ASM_SRC=$(shell find ./ -name '*.s')
ASM_OBJ=$(ASM_SRC:%.s=%.o)
#
#
.PHONY: all clean update
#
#
all:$(C_OBJ) $(ASM_OBJ)
$(CC) $(C_OBJ) $(ASM_OBJ) -T Linker.ld -o $(TARGET).elf -mthumb -mcpu=cortex-m3 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=Project.map -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80
$(OBJCOPY) $(TARGET).elf $(TARGET).bin -Obinary
$(OBJCOPY) $(TARGET).elf $(TARGET).hex -Oihex
#
#
$(C_OBJ):%.o:%.c
$(CC) -c $(CFLAGS) -o $@ $<
#
#
$(ASM_OBJ):%.o:%.s
$(AS) -c $(ASFLAGS) -o $@ $<
#
#
clean:
rm -f $(shell find ./ -name '*.o')
rm -f $(shell find ./ -name '*.d')
rm -f $(shell find ./ -name '*.map')
rm -f $(shell find ./ -name '*.elf')
rm -f $(shell find ./ -name '*.bin')
rm -f $(shell find ./ -name '*.hex')
rm -f $(shell find ./ -name '*.cdep')
这里makefile的主要功能就是把工程里的所有.c和.s文件编译生成.o文件,然后根据链接文件把生成的.o文件链接生成目的文件,也就是最后用来下载的.hex和.bin文件。
7、使用make进行编译链接并生成.bin和.hex文件
从现在开始就是激动人心的时刻了,在终端进入makefile所在目录,执行make命令,如果你看到终端很流畅的输出一坨又一坨的内容,并最终执行完毕,没有错误,然后你再makefile同级目录多出来了一个.hex文件和一个.bin文件,那么恭喜你,离成功不远了,准确的说应该是离成功就差下载一步了。博主走到这一步时,别提有多开心了。
8、使用jlink对芯片进行烧录
走到这一步就是见证奇迹的时刻了,在终端输入以下命令进入JLink工作目录:
$ cd /opt/SEGGER/JLink/
如果你没有这个目录,那么很不幸,JLink没有安装成功,请移步第二步。
如果有,接下来确定硬件连接正确,然后把USB连到虚拟机上,在终端执行命令:
$ ./JLinkExe
出现以下画面证明连接成功并进入工作区:
然后按照提示输入:
connect
出现下面结果,提示输入设备型号:
由于我们用的c8t6系列,所以输入:
STM32F103C8
执行后会让选择连接模式:SWD/JTAG
这里博主用的时SWD,所以输入SWD:
然后让选通信速率,这里博主选的4000,问题不大,建议不要选太大。
出现以上的结果证明配置成功了,接下来就是下载了:
输入:
loadbin <.bin文件所在目录> <下载起始地址>
得到下面的结果证明下载成功了,奇迹见证完毕:
举报