KeilMDK5STM32F103C8T6开发环境配置
Windows下使⽤Keil MDK5进⾏stm32f103c8t6的开发和编译, 配合ST-LINK⼯具进⾏烧录, 使⽤原⽣(⾮HAL)的⽅式.
所需硬件
stm32f103系列开发板
stm32f103c8t6核⼼板
参数
ARM 32-bit Cortex-M3
72 MHz maximum frequency
20k ram, 64k flash 这是⼀个规格⽐较低的stm32芯⽚
LQFP封装48pin
stm32f103vct6开发板
参数
ARM 32-bit Cortex-M3
72 MHz maximum frequency
48k ram, 256k flash
LQFP封装100pin
st-link烧录器
在烧录程序到⽬标芯⽚以及Debug时需要使⽤, ⾃ST-Link V2以来的所有ST-LINK板都带⼀个COM LED, ⼀般是红绿两⾊组合, 也有些是红蓝两⾊, 两⾊分别有常亮, 常灭, 闪烁等状态. 不同状态代表不同的含义:
闪烁红⾊: 正在PC上创建USB模拟器, 如果持续闪烁有可能驱动未安装成功
红⾊: 在PC与ST-Link之间已经建⽴连接(USB模拟已完成)
闪烁交替绿⾊和红⾊: ⽬标芯⽚和PC之间正在交换数据
绿⾊: ST-Link与⽬标芯⽚通信成功
橙⾊(红绿同时亮): ST-Link与⽬标芯⽚通信失败。
USB2TTL转接卡
在观察串⼝输出时需要使⽤.
安装说明
⽂件准备
<
不建议使⽤5.12等早期版本, 在更新时窗⼝容易卡, 且失败总会弹出需要⼿⼯消除.
keygen2032
⼤部分到的keygen, 有效期都是2020年的, 没法⽤, 必须要能⽣成2032有效期的版本
st-link驱动 不安装没法烧录
st官⽅库
前往www.st/, 点击Tools&Software > Embedded Software > MCU & MPU Embedded Software > STM32 Embedded Software > STM32 Standard Peripheral Libraries(), 下载F1和F4, 解压备⽤.
这⾥下载的F1的库⽂件, Release notes发布⽇期是2011年, 年代⽐较久远
安装
1. 运⾏mdk525, 安装
2. 安装完成后Pack Installer会⾃动运⾏, 可以让其⾃⼰更新
3. 如果使⽤stlink下载器的, 还需要安装驱动
注册
1. 以管理员⾝份运⾏Keil uVision5
1. File->License Management, 复制Computer ID - CID的内容
安装开发包
在Pack Installer中
1. 在左侧到STMicroelectronics->STM32F1->STM32F103, 点击
2. 在右侧会显⽰对应的Packs, 在Device Specific中到Keil::STM32F1xx_DFP, 点击Install安装
3. 同理安装STM32F401
名词解释
CMSIS
微控制器软件接⼝标准(CMSIS:Cortex Microcontroller Software Interface Standard)是 Cortex-M 处理器系列的与供应商⽆关的硬件抽象层(A vendor-independent hardware abstraction layer for the Cortex-M processor series and defines generic tool interfaces). 使⽤CMSIS可以为处理器和外设实现⼀致且简单的软件接⼝, 从⽽简化软件的重⽤、缩短微控制器新开发⼈员的学习过程,并缩短新设备的上市时间
ld, md, hd, xl; cl, vl
ld(low density), md(medium density), hd(high density), xl(XL-Density) 对应同⼀个型号线上, 不同flash和ram⼤⼩的芯⽚.
vl(value line), cl(connectivity line) 指的是同⼀型号下, 不同的细分型号线
对于stm32f1x, 各名词的对应关系为
Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.
Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
High-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes.
XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 768 Kbytes and 1 Mbyte.
Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
ST官⽅库结构说明
STM32F10x_StdPeriph_Lib_V3.5.0
⽬录结构及说明
├─Libraries
│├─CMSIS
││├─CM3
│││├─CoreSupport                # CMSIS核⼼外设访问层代码
│││└─DeviceSupport
│││└─ST
│││└─STM32F10x          # stm32f10x相关代码
│││└─startup
│││├─arm        # startup_stm32f10x_ld/md/hd/xl.s⽂件,
# stm32f103c8t66规格为64k flash, 对应md
│││├─gcc_ride7
│││├─iar
│││└─TrueSTUDIO
││└─Documentation
│└─STM32F10x_StdPeriph_Driver        # 对应stm32f10x的外设代码
│├─inc
│└─src
├─Project
│├─STM32F10x_StdPeriph_Examples      # 代码⽰例
│└─STM32F10x_StdPeriph_Template      # 代码模板, 需要⽤到stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h这三个⽂件(直接复制到新项⽬的USER⽬录)│├─EWARM
│├─HiTOP
│├─MDK-ARM
│├─RIDE
│└─TrueSTUDIO
├─Utilities
└─_htmresc
开发说明
创建项⽬
system的头文件创建⽬录并填充⽂件
以stm32f103为例, 对于项⽬test001, 创建⼯作⽬录test001, 在⼯作⽬录下创建MDK-ARM, USER这两个⽬录
1. 复制开发包下的Libraries整个⽬录到当前项⽬⽬录下
1. 这个⽬录中包含了CMSIS核⼼外设访问层代码
2. stm32的外设库⽂件
2. mdk-arm
⽤于放置Keil MDK项⽬⽂件, 以及项⽬开发过程中⽣成的临时⽂件
3. hardware
⽤于放置⾃定义的外设, 例如rfid, esp8266等
4. user
1. 复制 STM32F10x_StdPeriph_Template下⾯的stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h三个⽂件到这个⽬
2. ⽤于放置⽤户编写的代码
ld,md,hd的选择
md hd ld 根据芯⽚FLASH容量决定
16K < FLASH < 32K ld
64K < FLASH < 128K md
256K < FLASH < 512K hd
在Keil uVision5中创建项⽬
1. Project -> New uVision Project, 选择前⾯的MDK-ARM⽬录, 使⽤名称test001, 保存
2. 选择对应的芯⽚型号
配置项⽬
点击Manage Project Items
1. 修改project targets名称
2. 添加groups
1. CMSIS
2. StdPeriph_Driver
3. Hardware
4. Startup
5. User
对每个group, 添加的⽂件为
CMSIS
core_cm3.c
system_stm32f10x.c
StdPeriph_Driver
添加 libraries/STM32F10x_StdPeriph_Driver/src 下⾯的所有c⽂件
Hardware
添加 hardware⽬录下的c⽂件
Startup
添加 libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm 下⾯对应的s⽂件
User
添加 user ⽬录下的所有c⽂件
点击configure target options , 定位到c/c++
1. Define: 写⼊ USE_STDPERIPH_DRIVER
1. 不需要填STM32F10X_MD, STM32F10X_HD 这些配置, 这个变量在前⾯选择芯⽚型号的时候就⾃动定义了, 不确定的话可以
观察产⽣的Compiler Control String
2. Include Paths: 如果是按上⾯的⽬录结构组织的项⽬, 可以直接复制下⾯的配置
..\Libraries\CMSIS\CM3\CoreSupport;..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\start 在c/c++下能看到完整的编译Compile control string
-c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ../Libraries/CMSIS/CM3/CoreSupport -I ../Libraries/CMSIS/CM3/DeviceSupp -I./RTE/_test001
-IC:/Keil_v5/ARM/PACK/Keil/STM32F1xx_DFP/2.3.0/Device/Include
-IC:/Keil_v5/ARM/CMSIS/Include
-D__UVISION_VERSION="525" -DSTM32F10X_MD -DUSE_STDPERIPH_DRIVER
-o .\Obj\*.o --omf_browse .\Obj\*.crf --depend .\Obj\*.d
烧录
stlink与stm32f103c8t6核⼼板
连接需要4根线, 连接关系为
G  -- GND
CLK -- SWCLK
IO  -- SWDIO
V3  -- 3.3V
stlink与stm32f103vct6开发板
有些开发板没有单独的SWC/SWD接⼝, 只能连接到JTAG接⼝, 连接⽅式为:
1. 从PCB板上⽅俯视, 将JTAG接⼝座缺⼝朝上
2. PIN1-PIN20为从上⾄下, 从右⾄左
3. 最右侧为PIN1(上), PIN2(下), 都可以接stlink的3.3V
4. 从右往左数第4个为PIN7, 接SWDIO, 第5个为PIN9, 接SWCLK
5. 最左下⾓为PIN20, 接GND
在Keil uvision5中
1. 点击configure target options , 定位到Debug, Use选择ST-Link Debuger, 点击Settings
2. 如果Debug Adapter⾥时空⽩没有显⽰ST-LINK/V2, 去windows设备管理器看下设备是否正常
3. 切换到Flash Download标签, 勾选Reset and Run