使用 keil 创建 stm32 项目
1 前言
搭建 stm32 开发环境,并创建第一个项目,进行编译、烧录、调试、拟真操作。
2 准备工作
0. 设备
stm32f103RCt6 开发板一块,ST-LINK V2 一个。
1. MDK-ARM下载
我下载的是:MDK-538A。
2. stm32 支持包下载
我的开发板处理器是 stm32f103RCT6,我下载了 Keil.STM32F1xx_DFP.2.4.0.pack
。
想要在国内如何快速下载 keil 的 pack 文件包,可以先在 keil 的 pack 官网查找自己想要的 pack,然后添加到 http://keilpack.azureedge.net/pack/
末尾,如:http://keilpack.azureedge.net/pack/ARM.V2M_MPS3_SSE_300_BSP.1.1.0.pack
3. 手册下载
意法半导体官网下载芯片对应的手册:
- 参考手册
- 数据手册
- 编程手册
- 产品原理图
可在意法半导体官网或者 STMCU 中文官网 搜索下载。
4. 下载标准库
我的开发板处理器是 stm32f103RCT6,我下载了 STM32F10x_StdPeriph_Lib_v3.6.0
。
步骤如下:
3 搭建工程环境框架
3.1 项目结构
项目目录 demo 下新建目录:apps、doc、drivers、libs、project。
从标准库 \STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle
中复制文件到 apps 目录下。
从标准库 \STM32F10x_StdPeriph_Lib_V3.6.0\Libraries
下复制目录 CMSIS
、STM32F10x_StdPeriph_Driver
到 libs 目录下。
程序的执行是从“main.c”文件开始的,其中必须包含有头文件“stm32f10x.h”。
“stm32f10x_conf.h"文件相当于一个开关文件,如果要用到STM32固件库驱动标准外设,则外设驱动头文件是必不可少的,如“stm32f10x_gpio.h”。
demo/
|-- apps/
| |-- stm32f1xx_conf.h
| |-- stm32f1xx_it.c
| |-- stm32f1xx_it.h
| |-- main.c
|-- doc/
| |-- README.md
|-- drivers/
| |-- incl/
| |-- src/
|-- libs/
| |-- CMSIS/
| |-- STM32F10x_StdPeriph_Driver/
|-- porject/
- apps,用来存放应用层文件。
- doc,用来存放文档。
- README.md,项目文档。
- drivers,用来存放片外外设驱动程序。
- src/incl,外设驱动程序的头文件和源码。
- libs,用来存放标准外设库移植过来的文件。
- CMSIS,Cortex™ 微控制器软件接口标准。
- STM32F10x_StdPeriph_Driver
- project,用来存放我们开发环境所生成的文件(可执行文件等,新建的工程也保存在此目录下)。
3.2 创建新工程
keil 中:
- Project -> New uVision Project。
- 定位到 demo/project 目录,在此存放工程文件 demo。
- 选择处理器型号:
STM32F103RC
,点击 ok。
3.3 管理工程
添加文件到各组。
启动文件的选择
3.4 头文件路径配置
头文件只需要设置路径即可,无需添加到各组。
3.5 定义宏
STM32F10X_HD 表示大容量芯片,要根据不同型号进行不同配置。
USE_STDPERIPH_DRIVER 表示要使用标准库,不定义则表示不使用。
3.6 配置输出
如果使用 JLINK/STLINK 烧录,则必须使用bin文件,而不能使用hex文件。bin 文件需要 keil 自带的 fromelf.exe 工具来生成。方法是输入命令:D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin Objects\Template.axf -o Objects\Template.bin
4 烧录
4.1 ISP
ISP(在系统编程)是通过ST在芯片生产线上写入内嵌的自举程序到芯片系统存储器中,启动时从系统存储器中运行这个自举程序,它通过USART1串口来将我们的程序写入闪存存储器中。
注意下载时要将开发板上的boot开关打到ISP模式,ISP模式下载完成后可以立即执行程序。而如果要单独启动程序,则必须将boot开关打到RUN运行模式。
4.2 ST-LINK
连接 ST-LINk 和 开发板:GND、SWCLK、SWDIO、VCC。
boot 开关打到 RUN 模式。
在 Debug 选项卡中,选择“ST-Link Debugger”。在选择完调试器之后,点击右边的 Setting 按钮,
默认情况选择的是 JTAG 调试方式,速度是 1.12Mhz。JTAG 模式和 SWD 模式使用方法都是一样的,不同的是,SWD 接口调试更加节省端口。为了节省更多的资源,用 SWD 模式仿真。
5 踩坑
5.1 Keil打开工程时,解决“Loading PDSC Debug Description Failed”错误
keil 版本和固件库版本不一致导致,下载符合 keil 版本的固件库即可。
5.2 Keil5遇到:*** Target ‘xxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.
原因是 armcc5 编译器在Keil 5.37以后就不再默认安装了,从这个版本开始,Keil 默认安装的是 armclang 6。
在 Target一栏选择:Version 6 (或6.18)的编译器,点击Ok退出。重新编译就可以了。
5.3 最新版KEIL error: non-ASM statement in naked function is not supported或者 ‘__STATIC_INLINE‘
原因是最新的KEIL5版本使用的默认的 armclang6 的编译器,而固件库还是支持 armcc5 的编译器。
最好的方法是改用 HAL 库,放弃使用不再被维护的标准固件库。
如果一定要使用标准库,可以去 arm 官网下载 armcc 编译器,最新版本 5.06。
keil 安装目录下 arm 目录下新建 armcc 目录。
配置项目,添加 armcc 编译器。
参考
- 国内如何快速下载keil的pack文件包(干货)
- 华清远见
- Keil打开工程时,解决“Loading PDSC Debug Description Failed”错误
- Keil5遇到:*** Target ‘xxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.
- ARM compiler 5/6 的安装和选择
- Arm compiler version 5 的安装与配置
- 《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)
留言或评论请使用 Github Issues。