我有STM32F404主板,我正试图将其闪存。我正在关注tutorial。
在项目Makefile
中$(PROJ_NAME).elf: $(SRCS)
$(CC) $(CFLAGS) $^ -o $@
$(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex
$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin
burn: proj
$(STLINK)/st-flash write $(PROJ_NAME).bin 0x8000000
使用OBJCOPY
生成bin文件,然后使用Make target burn
我的问题:
问题1 :在这种情况下OBJCOPY=arm-none-eabi-objcopy
是什么。我开了那个男人,但我没有完全动摇,任何人都能解释一下吗?
问题2 :闪烁bin文件会产生预期的结果(Leds闪烁)但闪烁精灵文件$(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000
时LED不会闪烁,为什么?
答案 0 :(得分:3)
问题1:在这种情况下,OBJCOPY = arm-none-eabi-objcopy是什么。我开了那个男人,但我没有完全动摇,任何人都能解释一下吗?
它将值arm-none-eabi-objcopy
分配给make
变量OBJCOPY
。
当make
执行此命令时:
$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin
运行的实际命令是
arm-none-eabi-objcopy -O binary tim_time_base.elf tim_time_base.bin
问题2:闪烁bin文件会产生预期的结果(Leds闪烁)但是闪烁精灵文件$(STLINK)/ st-flash写入$(PROJ_NAME).elf 0x8000000为什么?
tim_time_base.elf
是一个ELF文件 - 它具有与之关联的元数据。运行arm-none-eabi-readelf -h tim_time_base.elf
以查看某些元数据是什么。
但是当处理器在重置后跳转到位置0x8000000
时,它期望找到可执行指令,而不是元数据。当它发现"垃圾"它不明白,它可能只是暂停。它当然没有找到指示灯闪烁。