下载stm32固件库

创建目录
libs目录放stm32固件库,src放用户源码,inc放用户头文件

# mkdir libs src inc

复制文件
STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下

创建Makefile.common
在主目录下创建Makefile.common文件,这个是通用Makefile文件

#This file is included in the general Makefile, the libs Makefile and the src Makefile
#Different optimize settings for library and source files can be realized by using arguments
#Compiler optimize settings:
# -O0 no optimize, reduce compilation time and make debugging produce the expected results (default).
# -O1 optimize, reduce code size and execution time, without much increase of compilation time.
# -O2 optimize, reduce code execution time compared to ‘O1’, increase of compilation time.
# -O3 optimize, turns on all optimizations, further increase of compilation time.
# -Os optimize for size, enables all ‘-O2’ optimizations that do not typically increase code size and other code size optimizations.
#Recommended optimize settings for release version: -O3
#Recommended optimize settings for debug version: -O0
#Valid parameters :
# OptLIB=0 --> optimize library files using the -O0 setting
# OptLIB=1 --> optimize library files using the -O1 setting
# OptLIB=2 --> optimize library files using the -O2 setting
# OptLIB=3 --> optimize library files using the -O3 setting
# OptLIB=s --> optimize library files using the -Os setting
# OptSRC=0 --> optimize source files using the -O0 setting
# OptSRC=1 --> optimize source files using the -O1 setting
# OptSRC=2 --> optimize source files using the -O2 setting
# OptSRC=3 --> optimize source files using the -O3 setting
# OptSRC=s --> optimize source files using the -Os setting  TOP=$(shell readlink -f "$(dir $(lastword $(MAKEFILE_LIST)))")
PROGRAM=main
LIBDIR=$(TOP)/libs#Adust the following line to the library in use
STMLIB=$(LIBDIR)/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries
#Adjust TypeOfMCU in use, see CMSIS file "stm32f10x.h"
#STM32F103RBT (128KB FLASH, 20KB RAM) --> STM32F10X_MD
#TypeOfMCU=STM32F10X_MD
#STM32F103RET (512KB FLASH, 64KB RAM) --> STM32F10X_HD
#STM32F103ZET (512KB FLASH, 64KB RAM) --> STM32F10X_HD
TypeOfMCU=STM32F10X_HD
#============================================================================#
TC=arm-none-eabi
CC=$(TC)-gcc
LD=$(TC)-ld -v
OBJCOPY=$(TC)-objcopy
AR=$(TC)-ar
GDB=$(TC)-gdb
INCLUDE=-I$(TOP)/inc
INCLUDE+=-I$(STMLIB)/CMSIS/CM3/CoreSupport
INCLUDE+=-I$(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x
INCLUDE+=-I$(STMLIB)/STM32F10x_StdPeriph_Driver/inc
COMMONFLAGS=-g -mcpu=cortex-m3 -mthumb
COMMONFLAGSlib=$(COMMONFLAGS)
#Commands for general Makefile and src Makefile
ifeq ($(OptSRC),0)COMMONFLAGS+=-O0InfoTextSrc=src (no optimize, -O0)
else ifeq ($(OptSRC),1)COMMONFLAGS+=-O1InfoTextSrc=src (optimize time+ size+, -O1)
else ifeq ($(OptSRC),2)COMMONFLAGS+=-O2InfoTextSrc=src (optimize time++ size+, -O2)
else ifeq ($(OptSRC),s)COMMONFLAGS+=-OsInfoTextSrc=src (optimize size++, -Os)
else  COMMONFLAGS+=-O3InfoTextSrc=src (full optimize, -O3)
endif
CFLAGS+=$(COMMONFLAGS) -Wall -Werror $(INCLUDE)
CFLAGS+=-D $(TypeOfMCU)
CFLAGS+=-D VECT_TAB_FLASH#Commands for libs Makefile
ifeq ($(OptLIB),0)COMMONFLAGSlib+=-O0InfoTextLib=libs (no optimize, -O0)
else ifeq ($(OptLIB),1)COMMONFLAGSlib+=-O1InfoTextLib=libs (optimize time+ size+, -O1)
else ifeq ($(OptLIB),2)COMMONFLAGSlib+=-O2InfoTextLib=libs (optimize time++ size+, -O2)
else ifeq ($(OptLIB),s)COMMONFLAGSlib+=-OsInfoTextLib=libs (optimize size++, -Os)
else  COMMONFLAGSlib+=-O3InfoTextLib=libs (full optimize, -O3)
endif
CFLAGSlib+=$(COMMONFLAGSlib) -Wall -Werror $(INCLUDE)
CFLAGSlib+=-D $(TypeOfMCU)
CFLAGSlib+=-D VECT_TAB_FLASH

编译固件库
首先编译固件库,将固件库编译成静态库,应用程序可以直接使用
startup.c文件下载地址:http://download.csdn.net/download/zhangxuechao_/10266433

include ../../../../../Makefile.commonLIBS+=libstm32.a
CFLAGSlib+=-call: $(LIBS)libstm32.a:@echo -n "Building $@ ..."cd $(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/ && \$(CC) $(CFLAGSlib) system_stm32f10x.ccd $(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm && \$(CC) $(CFLAGSlib) startup.ccd $(STMLIB)/STM32F10x_StdPeriph_Driver/src && \$(CC) $(CFLAGSlib) *.c \-D"assert_param(expr)=((void)0)"$(AR) cr $(LIBDIR)/$@ \$(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.o \$(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup.o \$(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.o@echo "done.".PHONY: cleanclean:rm -f $(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.orm -f $(STMLIB)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup.orm -f $(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.orm -f $(LIBDIR)/$(LIBS)


建立ld文件
建立linker.ld文件,根据芯片的内存以及flash容量
linker.ld文件下载地址:http://download.csdn.net/download/zhangxuechao_/10266451
下面是文件需要修改的地方

MEMORY {/*Adust LENGTH to RAMsize of target MCU:*//*STM32F103RBT --> 20K*//*RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 20K*//*STM32F103RET --> 64K*//*STM32F103ZET --> 64K*/RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 64KEXTSRAM (RWX) : ORIGIN = 0x68000000 , LENGTH = 0/*Adust LENGTH to (FLASHsize - FeePROMsize) of target MCU:*//*STM32F103RBT --> 126K*//*FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 126K*//*STM32F103RET --> 508K*//*FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 508K*//*STM32F103ZET --> 508K*/FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 508K/*Adust ORIGIN to (0x08000000 + (FLASHsize-FeePROMsize)) of target MCU*//*and adust LENGTH to FeePROMsize allocated:*//*STM32F103RBT --> 0x08000000+126K, 2K*/EEMUL (RWX) : ORIGIN = 0x08000000+126K, LENGTH = 2K/*STM32F103RET --> 0x08000000+508K, 4K*//*EEMUL (RWX) : ORIGIN = 0x08000000+508K, LENGTH = 4K*/
}

编译用户文件
将用户应用程序也编译成静态库

include ../Makefile.commonLIBS+=app.a
CFLAGSlib+=-call: $(LIBS)app.a:@echo -n "Building $@ ..."$(CC) $(CFLAGSlib) *.c$(AR) cr $@ *.o@echo "done.".PHONY: cleanclean:rm -f *.orm -f $(LIBS)


建立主Makefile
在主目录下,建立主Makefile文件
将固件库和用户应用程序编译成可执行文件

include Makefile.commonLDFLAGS=$(COMMONFLAGS) -fno-exceptions -ffunction-sections -fdata-sections -L$(LIBDIR) -nostartfiles -Wl,--gc-sections,-Tlinker.ldLDLIBS+=-lm
LDLIBS+=-lstm32all: libs src$(CC) -o $(PROGRAM).elf $(LDFLAGS) \-Wl,--whole-archive \src/app.a \-Wl,--no-whole-archive \$(LDLIBS)$(OBJCOPY) -O ihex $(PROGRAM).elf $(PROGRAM).hex$(OBJCOPY) -O binary $(PROGRAM).elf $(PROGRAM).binarm-none-eabi-readelf -a $(PROGRAM).elf > $(PROGRAM).info_elfarm-none-eabi-size -d -B -t $(PROGRAM).elf > $(PROGRAM).info_sizearm-none-eabi-objdump -S $(PROGRAM).elf > $(PROGRAM).info_codearm-none-eabi-nm -t d -S --size-sort -s $(PROGRAM).elf > $(PROGRAM).info_symbol.PHONY: libs src cleanlibs:$(MAKE) -C libs/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src
src:$(MAKE) -C src
clean:rm -f $(PROGRAM).elf $(PROGRAM).hex $(PROGRAM).bin $(PROGRAM).info_elf $(PROGRAM).info_sizerm -f $(PROGRAM).info_coderm -f $(PROGRAM).info_symbol


源码路径:https://github.com/zwx230741/linux_stm32.git
已经在STM32F103ZET6上测试成功

linux搭建stm32开发环境相关推荐

  1. VS Code 搭建stm32开发环境

    MCU免费开发环境 一般芯片厂家会提供各种开发IDE方案,通常其中就包括其自家的集成IDE,如: 意法半导体 STM32CubeIDE NXP Codewarrior TI CCS 另外也可以用ecl ...

  2. 使用树莓派搭建stm32开发环境

    使用树莓派搭建stm32开发环境踩了很多坑,下面主要是记录一下踩过的坑,以及碰到的问题. 开发方式的选择 1.使用Eclipse+GDB+OpenOCD+STlink 这种方式我发现eclipse的I ...

  3. Linux搭建Kafka开发环境

    Linux搭建Kafka开发环境 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它 ...

  4. Linux下STM32开发环境的搭建

    目录 一.概述 1.目的 2.开发环境描述 3.Eclipse构建的STM32集成开发环境结构 4.GDB / GDB Server 调试模型 二.搭建步骤 三.详细的搭建过程 1.安装eclipse ...

  5. Linux 下 STM32 开发环境搭建

    安装编译器 如果还没安装编译器的,先安装: sudo apt install gcc-arm-none-eabi sudo apt install gdb-arm-none-eabi sudo apt ...

  6. Linux搭建安卓开发环境

    Linux下搭建Android开发环境 为什么要在Linux搭建开发环境呢?从直观来说,Android虚拟机在Linux下运行速度更快,而且性能更稳定. 我使用的Linux环境是ubuntu-10.1 ...

  7. linux搭建java开发环境_linux中搭建java开发环境

    今天试着在Linux下面搭建java开发环境,现总结一下具体步骤. 1.JDK的安装1.6 版本 cd /opt mkdir java 执行下面命令安装JDK(首先创建/opt/java目录) tar ...

  8. stm32f746 linux,在Linux系统下搭建STM32开发环境--Nucleo-F429ZI

    (by中文社区:fengzi)在windows系统下开发stm32非常方便,我们有很多的工具,IDE等可供选择,同样是操作系统,在Lunix下开发也同样如此.对于开发爱好者来说,Lunix也是一个很好 ...

  9. 《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Windows版 - 1]

    Keil MDK.IAR等工具是各类STM32单片机使用的主要IDE,不过都是收费的,在使用中很可能牵扯到一定的版权问题.GCC(GNU Compiler Collection)作为GNU计划的一部分 ...

  10. win10下用Linux搭建pythonnodejs开发环境

    Win10下用自带Linux系统搭建开发环境 Win10下用自带Linux系统搭建开发环境 启用Linux 老版本(win10 1709之前): 新版本(win10 1709之后) 卸载linux 老 ...

最新文章

  1. 汇编程序:输数字,出字母
  2. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第五题:网络寻路
  3. 踩坑记(1)——使用slf4j+logback记录日志
  4. 云上的播放框架变得简单:Openshift模块
  5. 为什么都瞧不起QQ邮箱?
  6. vue-router vue路由
  7. DC漫画公司正在考虑进军NFT市场
  8. win11右键菜单怎么修改 Windows11修改右键菜单为win10风格的步骤方法
  9. [转帖]onInterceptTouchEvent和onTouchEvent调用时序
  10. 华为手机鸿蒙系统卡吗,华为鸿蒙系统能解决手机卡顿吗 华为鸿蒙系统会不会卡顿...
  11. 游戏《我的世界》马怎么繁殖?如何驯化?
  12. javascript基础常识问答(四)
  13. 联想ghost重装系统_联想电脑不能安装GHOST系统
  14. 一个最简单的自定义锁屏应用实现
  15. 不玩手机的步步高玩大数据:一条短信让你多买一只澳洲大龙虾
  16. 电脑开不了机系统应该如何恢复正常
  17. 黑客因网文作者写太烂盗其账号,帮改文更新修防火墙,网友:大佬能看看我的论文吗?...
  18. win10如何修改远程桌面的默认端口_win10远程桌面端口的更改办法
  19. 盘点PDF文件转Word文档的四种高效率转换方法
  20. codeforces All the Vowels Please

热门文章

  1. nginx 报错502
  2. P1903 [国家集训队] 数颜色 / 维护队列
  3. 架构设计的新思路,《架构之道》读书笔记
  4. mysql stmt语法_mysqli_stmt_fetch
  5. DataX同步离线数据基础使用教程
  6. “汇新杯”科技+文化艺术专项赛介绍
  7. JVM参数-X和-XX的区别
  8. Nodejs busBoy和fs模块完成文件的上传
  9. 雨林风一键重装系统_u盘启动盘制作工具-雨林风
  10. R 语言 单位根检验