Mac开发STM32之Makefile

在初步接触STM32时,不建议直接就用ST官方的标准生成模板(如STM32CubeMX);推荐先学习STM32的寄存器设置
本例子用正点的开发板,由于代码例子是适配MDK版本的,需要自己写Makefile编译工程

一、目录结构


=》设置OBJ目录存放生成的bin/hex/elf/map/.o/.d

LDSCRIPT

https://my.st.com/content/my_st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-mcu-mpu-packages/stm32cubef1.html
ld script(例子中的STM32F103RCTx_FLASH.ld)是ST提供的,请到官网选择开发板对应型号下载,并从压缩档里找到ld档案

ASM file

https://my.st.com/content/my_st_com/zh/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32054.html
从官网下载HAL库,从目录中找到.s文件,注意我们要找GCC版本,如:STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/

SystemInit

编译时候会出现"SystemInit not define",原因是HAL库需要外部实现该函数初始化系统时钟,我们在main有实现clock初始化,所以这里mark掉即可

$ vi startup_stm32f10x_hd.s
/* Call the clock system intitialization function.*/
/*   Ver.reg not need, but Ver.hal needbl  SystemInit
*/
/* Call the application's entry point.*/

二、完整Makefile直接贴

## PROJECT NAME
PROJECT     =   STM32_REG_TEST1## PATH
TOP_DIR     =   .
BUILD_DIR   =   $(TOP_DIR)/OBJ## TARGET
TARGET      :=  $(PROJECT)
TARGET_ELF  :=  $(TARGET).elf
TARGET_HEX  :=  $(TARGET).hex
TARGET_BIN  :=  $(TARGET).bin## SOURCE
AS_SOURCES =  \
$(TOP_DIR)/USER/startup_stm32f10x_hd.s
C_SOURCES =  \
$(TOP_DIR)/USER/main.c \
$(TOP_DIR)/SYSTEM/delay/delay.c \
$(TOP_DIR)/SYSTEM/sys/sys.c \
$(TOP_DIR)/SYSTEM/usart/usart.c \
$(TOP_DIR)/HARDWARE/LED/led.c## INCLUDE
AS_INCLUDES =
C_INCLUDES =  \
-I$(TOP_DIR)/SYSTEM/delay/ \
-I$(TOP_DIR)/SYSTEM/sys/ \
-I$(TOP_DIR)/SYSTEM/usart/ \
-I$(TOP_DIR)/HARDWARE/INC## TOOLCHAIN
PREFIX = arm-none-eabi-
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S## CFLAGS
### build option
DEBUG = 1
OPT = -Og
### cpu;  -march and -mtune will auto create
CPU = -mcpu=cortex-m3
### fpu, NONE for Cortex-M0/M0+/M3
# FLOAT-ABI = -mfloat-abi=soft
### mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
### defines
AS_DEFS =
C_DEFS  = \
-DSTM32F10X_HD
### gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CCFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
ifeq ($(DEBUG), 1)
CCFLAGS += -g -gdwarf-2
endif
### Generate dependency information
CCFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"## LDFLAGS
### link script
LDSCRIPT = $(TOP_DIR)/STM32F103RCTx_FLASH.ld
### libraries
LIBS = -specs=nano.specs -lc -lm -lnosys
LIBDIR =
LDFLAGS = -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections## BUILD OPTION
### default
all: $(BUILD_DIR)/$(TARGET_ELF) $(BUILD_DIR)/$(TARGET_HEX) $(BUILD_DIR)/$(TARGET_BIN)
### list of sources
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(AS_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(AS_SOURCES)))
### build objects
$(BUILD_DIR)/%.o: %.c Makefile$(CC) -c $(CCFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s Makefile$(AS) -c $(ASFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET_ELF): $(OBJECTS) Makefile$(CC) $(OBJECTS) $(LDFLAGS) -o $@$(SZ) $@
$(BUILD_DIR)/$(TARGET_HEX): $(BUILD_DIR)/$(TARGET_ELF)$(HEX) $< $@
$(BUILD_DIR)/$(TARGET_BIN): $(BUILD_DIR)/$(TARGET_ELF)$(BIN) $< $@
### clean
clean:-rm -rf $(BUILD_DIR)/*### dependencies
-include $(wildcard $(BUILD_DIR)/*.d)

=》Makefile语法这里不多阐述(设置流程:TARGET、SOURCE、INCLUDE、TOOLCHAIN、CFLAGS、LDFLAGS、BUILD OPTION)

三、测试

% make
% ls OBJ/STM32_REG_TEST1.*
STM32_REG_TEST1.bin  STM32_REG_TEST1.elf  STM32_REG_TEST1.hex   STM32_REG_TEST1.map

[STM32] Mac开发STM32之Makefile相关推荐

  1. 使用Eclipse搭建STM32嵌入式开发环境

    1. Eclipse 软件和相关工具的安装 使用 Eclipse 开发 STM32 等嵌入式软件项目时,需要安装的软件或者工具有: Eclipse 软件本身,eclipse-inst-jre-win6 ...

  2. ChibiOS系列:二、在STM32上开发:介绍ChibiStudio

    本文翻译自:http://www.playembedded.org/blog/developing-stm32-chibistudio/ 在STM32上开发:介绍ChibiStudio 发表于 201 ...

  3. 使用STM32标准库构建VSCode+gcc+openOCD开发STM32

    目前为止,使用STM32的平台比较流行的是keil for Arm和IAR for ARM,这两个平台都比较类似,集成编辑.编译和调试环境,俗称IDE.用户只需简单的操作就能编译和调试STM32,非常 ...

  4. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

  5. ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

    参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...

  6. stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1

    本节介绍如何使用HUAWEI LiteOS Studio 开发STM32开发板工程.开源LiteOS工程,支持STM32F429IG.STM32L431RC.STM32F769NI等STM32系列开发 ...

  7. stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32

    在之前的文章中我们介绍了如何使用VSCode去构建一个STM32的单片机项目,今天我们来说一下使用 Qt Creator 来开发STM32单片机. 0x01: 开发环境准备 PlatformIO Co ...

  8. Vscode开发STM32单片机程序

    STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的.这里介绍一些使用 gcc + vscode 开发单片机程序的经验.(这里不解释 gcc 是什 ...

  9. 基于stm32物联网开发板(1)

    基于stm32物联网开发板(1)   本开发板采用了STM32F103RET6作为核心CPU,72MHZ工作频率,512KB flash,64KB Sram.本开发平台外设模块有ESP8266 WIF ...

最新文章

  1. 云原生应用的10大关键属性
  2. 编译安装samba4.89遇到的错误
  3. 智能车竞赛技术报告 | 专科基础组 - 沈阳职业技术学院 - 秋名山菜鸟队
  4. 人人都是 DBA(V)SQL Server 数据库文件
  5. 计算机的键盘功能,电脑键盘功能
  6. [Everyday Mathematics]20150214
  7. Eclipse中 怎么让包分层级显示
  8. .sh文件是什么语言_关于Linux文件的一些基本命令和知识:
  9. Oracle树反向查询的优化(转载)
  10. 关于C# 模仿千千静听 磁铁窗体 的个人的一个思路
  11. cad批量选择相同块_在CAD中如何快速选择相同或类似的图形、图块?
  12. 彩色图像处理之色彩学基础
  13. 一篇文章带你玩转C语言基础语法5:条件判断 if else 语句与分支 。(千字总结)
  14. 高德地图的基础使用(二)定位蓝点
  15. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】
  16. 烹饪基础知识(炒菜)
  17. android横竖屏切换函数,Android横竖屏切换小结.PDF
  18. stdin.php 木马,php STDIN - mickelfeng的个人空间 - OSCHINA - 中文开源技术交流社区
  19. UDP协议转换TCP协议
  20. 2021年美容师(初级)考试题及美容师(初级)找解析

热门文章

  1. Matlab直角坐标系下绘制椭圆面积图
  2. ThinkPHP3.1在PHP7下页面空白的解决方案
  3. 讯飞董事长刘庆峰:人工智能是数字经济发展最核心的引擎
  4. Golang Time
  5. 简单理解锁存器和触发器的主要区别
  6. 麦特裂噗01 : 整点儿对象出来
  7. 基于jsoup的Element实现将树形结构转换成XML格式
  8. Guava之RateLimiter限流
  9. 常用金属材料 一般钢铁材料
  10. CSS灯光效果,背景黑金效果