【Makefile】Makefile 编译 Keil 工程(Linux 环境)

本文使用的开发板为 stm32f103C8T6,使用的驱动库为stm32标准库。


目录

一、软件下载

1、stm32 标准库

2、arm-none-eabi 工具链

3、烧录器

二、Keil 工程改造

1、Keil 工程

2、基本 Makefile 工程

3、添加启动文件

4、添加链接脚本

5、去掉 core_cm3.c

三、Makefile 脚本

1、添加环境变量

2、Makefile 脚本

四、烧录


一、软件下载

工程搭建阶段:stm32f10x 标准库

工程编译阶段:arm-none-eabi 工具链、cmake(包含make指令)

程序烧录阶段:ST-Link

1、stm32 标准库

stm32 标准库下载地址:Download | Stm32 Standard Library

2、arm-none-eabi 工具链

arm-none-eabi 交叉编译工具链下载地址:Download | arm-none-eabi

stm32f103C8T6 内不含操作系统,所以需要选择裸机运行的工具链,这里选择arm-none-eabi 工具链。arm-none-eabi 的 “arm”代表支持 arm 架构,“none” 表示不指定目标操作系统,“eabi” 是 Embedded ABI 的缩写。

相比之下,arm-linux-gnueabi 虽然也支持 arm 架构,但面向的是 Linux 操作系统,“gnu” 表示使用的 C 库是 GNU C Library(通常称为 glibc),这是 Linux 系统上常用的标准库。

3、烧录器

ST-Link 下载地址:STSW-LINK004 - STM32 ST-LINK utility - STMicroelectronics

stm32 最合适的烧录器便是 ST-Link。ST-Link 是意法半导体(STMicroelectronics)开发的一种嵌入式调试器和编程器,专门用于STM8和STM32系列的微控制器。ST-Link的功能主要包括:

  1. 在线调试通过SWD(Serial Wire Debug)或JTAG接口连接到目标微控制器,ST-Link允许用户使用集成开发环境(IDE)如STM32CubeIDE、Keil μVision 或 IAR Embedded Workbench进行源代码级别的调试。用户可以设置断点、单步执行、查看和修改内存及寄存器内容。
  2. 固件编程ST-Link可以将编译好的HEX或BIN文件烧录到微控制器的闪存中,完成固件的更新或初次编程。

二、Keil 工程改造

1、Keil 工程

现在使用 Makefile 编译,我们需要将原本的工程进行简化,去掉一些 Keil 平台独有的文件,仅保留源文件和头文件。原 keil 工程结构如下。

  • MODULE:保存自定义模块
  • STM32F10x_LIB:stm32 标准库
  • USER:保存主函数文件、启动文件、stm32系统文件

2、基本 Makefile 工程

MODULE、STM32F10x_LIB 无需做任何变动,USER 仅保留.c源文件、.h头文件,其他的先删除,.s 文件也不要,因为后续编译用的 gcc 编译器,需要使用支持 gcc 编译器的startup汇编文件。筛过一遍的Makefile工程如下(Makefile 文件留到最后写)

3、添加启动文件

解压stm32 标准库的压缩包,在 Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup 下包含了各种环境适配的启动文件。

选择 gcc_ride7 目录下的 startup_stm32f10x_md.s,md 代表了 flash 容量大小为medium density。

后缀flash 容量区间
ld[0, 16KB]
md[32KB, 64KB)
hd[64KB, 128KB)

4、添加链接脚本

链接脚本指示编译生成的各个段应如何被放置在内存中,Keil 存在默认配置,所以使用Keil 时无需关心这些,现在不使用 Keil 则需要通过链接脚本实现。标准库中也提供了链接脚本的模板,使用 everything 搜索 stm32_flash.ld 。下面任意一个均可。

添加到工程后,需要做一点改动,原 Keil 工程中有默认的配置,我们需要应用到链接脚本中。

起始地址可以直接照搬,IROM1 的Size 需要转换一下,0x10000 的单位是字节,需要转换成 KB,0x10000 Byte = 64 KB。 

5、去掉 core_cm3.c

如果标准库中包含 core_cm3.c ,暂时先去掉,实际在编译时,该文件无法编译通过。

ps:如果要保留这个文件,修改方法可以参考这篇文章末尾:如何用gcc+makefile改造STM32Keil项目 - lqxhgd - 博客园 (cnblogs.com)

 

三、Makefile 脚本

1、添加环境变量

解压交叉编译工具链压缩包,并添加环境变量 ARM_NONE_EABI_ROOT,对应的值为 交叉编译工具链 arm-none-eabi 的根目录。同时将 bin 目录添加到环境变量 PATH

2、Makefile 脚本

 Makefile 脚本参考:Linux Makefile Template

四、烧录

 如果编译通过,会在 build 目录下生成 .elf、.bin 以及 .hex 文件,其中 .hex 和 .bin 适用于裸机环境,.elf 适用于包含操作系统的环境。

 打开 ST-Link,连接到开发板,若连接成功可以看到右边的设备信息。

准备开始烧录

烧录成功后 

参考文章:

keil 采用 makefile 实现编译_keil makefile-CSDN博客 

如何用gcc+makefile改造STM32Keil项目 - lqxhgd - 博客园 (cnblogs.com) 

【嵌入式】基于makefile的STM32编译方法探索 - 简书 (jianshu.com) 

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值