[STM32] Mac开发STM32之Makefile
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相关推荐
- 使用Eclipse搭建STM32嵌入式开发环境
1. Eclipse 软件和相关工具的安装 使用 Eclipse 开发 STM32 等嵌入式软件项目时,需要安装的软件或者工具有: Eclipse 软件本身,eclipse-inst-jre-win6 ...
- ChibiOS系列:二、在STM32上开发:介绍ChibiStudio
本文翻译自:http://www.playembedded.org/blog/developing-stm32-chibistudio/ 在STM32上开发:介绍ChibiStudio 发表于 201 ...
- 使用STM32标准库构建VSCode+gcc+openOCD开发STM32
目前为止,使用STM32的平台比较流行的是keil for Arm和IAR for ARM,这两个平台都比较类似,集成编辑.编译和调试环境,俗称IDE.用户只需简单的操作就能编译和调试STM32,非常 ...
- stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...
- ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)
参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...
- stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1
本节介绍如何使用HUAWEI LiteOS Studio 开发STM32开发板工程.开源LiteOS工程,支持STM32F429IG.STM32L431RC.STM32F769NI等STM32系列开发 ...
- stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32
在之前的文章中我们介绍了如何使用VSCode去构建一个STM32的单片机项目,今天我们来说一下使用 Qt Creator 来开发STM32单片机. 0x01: 开发环境准备 PlatformIO Co ...
- Vscode开发STM32单片机程序
STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的.这里介绍一些使用 gcc + vscode 开发单片机程序的经验.(这里不解释 gcc 是什 ...
- 基于stm32物联网开发板(1)
基于stm32物联网开发板(1) 本开发板采用了STM32F103RET6作为核心CPU,72MHZ工作频率,512KB flash,64KB Sram.本开发平台外设模块有ESP8266 WIF ...
最新文章
- 云原生应用的10大关键属性
- 编译安装samba4.89遇到的错误
- 智能车竞赛技术报告 | 专科基础组 - 沈阳职业技术学院 - 秋名山菜鸟队
- 人人都是 DBA(V)SQL Server 数据库文件
- 计算机的键盘功能,电脑键盘功能
- [Everyday Mathematics]20150214
- Eclipse中 怎么让包分层级显示
- .sh文件是什么语言_关于Linux文件的一些基本命令和知识:
- Oracle树反向查询的优化(转载)
- 关于C# 模仿千千静听 磁铁窗体 的个人的一个思路
- cad批量选择相同块_在CAD中如何快速选择相同或类似的图形、图块?
- 彩色图像处理之色彩学基础
- 一篇文章带你玩转C语言基础语法5:条件判断 if else 语句与分支 。(千字总结)
- 高德地图的基础使用(二)定位蓝点
- python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】
- 烹饪基础知识(炒菜)
- android横竖屏切换函数,Android横竖屏切换小结.PDF
- stdin.php 木马,php STDIN - mickelfeng的个人空间 - OSCHINA - 中文开源技术交流社区
- UDP协议转换TCP协议
- 2021年美容师(初级)考试题及美容师(初级)找解析