一、ARM简介
1. arm 系列简介
- 功能耗低
- 功能强
- 32位
- 合作伙伴多
- 产品线丰富
2.Cortex架构:
- Cortex-A:高性能应用处理器,如Symbian、Linux、WinCE、WindowsMobile。
- Cortex-R:专门针对实时、深度嵌入式解决方案,如高档轿车、军事国防应用。
- Cortex-M:专注于低成本嵌入式微控制器,相对低端。
- Cortex-M0:针对FPGA
- Cortex-M1:替代低成本MCU
- Cortex-M3:占领高性能MCU市场
- Cortex-M4:主要针对数字信号处理
3.Cortex-M3:
- 高性能:哈佛结构+分支预算
- 高集成度:
- 高代码密度:Thumb2指令集
- 内嵌NVIC中断
- 低成本。
- STM32系列:意法半导体
- Stellatirs系列:
- LPC1000系列:
- AT91SAM3系列:Atmel
4.STM32:
- STM32F103增加型系列:32位
- STM32F101基本型系列:32位
5.STM32命名:
6.本文芯片:
7.STM32程序开发的模式
STM32有三种开发模式:
- 基于寄存器开发
- 基于ST公司的库函数开发
- 基于嵌入式操作系统开发
二、keil 开发环境搭建
1.安装Keil uVision5(MDK500)
打开安装包,按提示操作:
安装完成,等待下载芯片信息:
2.创建Project
3.新增study1.c
int main()
{
;
}
点编译按钮:
4.问题处理
1. 缺少环境变量
.\output\study.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
处理方式:
建立环境变量:ARMCC5LIB 指向: C:\Keil\ARM\ARMCC\lib
2. 找不到SystemInit
在使用MDK编译工程时出现了如下错误,test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_hd.o).`
定义一个空函数: SystemInit
void SystemInit()
{
//do nothing
}
3. 找不到 core_cm3.h
找到本机的 Arm/Packs/ARM/CMSIS/版本号/CMSIS/Include,手工加入到C++的Include Paths里。
三、仿真器安装
仿真器是免驱的,但我在虚拟机中插上需要重启虚拟机才行。
插上后在设置界面的Debug 可以找到仿真器。
四、建立 STM32 工程模板
1. STM32 的固件库
- _htmresc:ST公司的图标之类,不用管
- Libraries:驱动库的源代码与启动文件
- CMSIS:Cortex-M3内核自带的外设驱动代码和启动代码
- CM3 核心文件夹
- CoreSupport,即Cortex-M3内核自带外设的驱动程序
- core_cm3.c
- core_cm3.h
- DeviceSupport
- ST
- STM32F10x
- startup:不同开发环境的启动代码文件夹
- arm:对应keil开发环境,均为汇编文件,内部多个文件分别对应不同的Flash容量
- startup_stm32f10...s
- gcc_ride7
- iar
- TrueSTUDIO
- arm:对应keil开发环境,均为汇编文件,内部多个文件分别对应不同的Flash容量
- Release_Notes.html
- stm32f10x.h
- system_stm32f10x.c
- system_stm32f10x.h
- startup:不同开发环境的启动代码文件夹
- STM32F10x
- ST
- CoreSupport,即Cortex-M3内核自带外设的驱动程序
- Documentation 一些文档
- CMSIS debug support.html
- CMSIS_changes.htm
- License.doc
- CM3 核心文件夹
- STM32F10x_StdPeriph_Driver:芯片制造商在Cortex-M3内核上外加的外设驱动
- inc:include文件
- stm32f10x_adc.h 不同外设的头文件
- ……
- src:源代码 ,上inc对应
- Release_Notes.html
- inc:include文件
- CMSIS:Cortex-M3内核自带的外设驱动代码和启动代码
- Projects:驱动实例和工程模板
- STM32F10x_StdPeriph_Template工程模板
- main.c
- stm32f10x_conf.h
- stm32f10x_it.c
- stm32f10x_it.h
- STM32F10x_StdPeriph_Template工程模板
- Utilities:ST开发板相关例程
- Release_Notes.html
- stm32f10x_stdperiphlib_um.chm 帮助系统
2. 拷贝文件
典型的工程模板包含以下文件和文件夹:
- Libraries:固件库里的同名文件夹,放外设驱动及启动代码。
- Output:编译输出文件夹
- Project:用户开发的程序源代码,一般包含下面内容:
- 工程文件
- main.c:本文件及下面3个文件可以从工程模板拷贝过来
- stm32f10x_conf.h:外设头文件配置文件
- stm32f10x_it.c:中断函数源文件(涉及中断时使用)
- stm32f10x_it.h:中断函数头文件
- readme.txt
这里实现一个简单的模板框架,使用如下几个文件:
放置文件夹结构:
3. 改分组文件夹
如下图操作:
4. Keil 环境必要的配置
配置要点:
- Target页面下的外部时钟,这里设置为8.0MHz
- Output页面下,钩选Create HEX File
- C/C++页面下,设置Include Paths
- Debug选择自己使用的仿真器
设置如下:
5. 源程序示例
/*******************************************************************************
*
* 普中科技
--------------------------------------------------------------------------------
* 实 验 名 : 使用寄存器点亮一个LED
* 实验说明 : 操作寄存器控制D1指示灯闪烁
* 连接方式 :
* 注 意 :
*******************************************************************************/
#include "stm32f10x.h"
typedef unsigned int u32; //类型重定义 unsigned int -- u32
void SystemInit()
{
}
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,通过while循环占用CPU,达到延时功能
* 输 入 : i
* 输 出 : 无
*******************************************************************************/
void delay(u32 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
RCC_APB2ENR |= 1<<4;
GPIOC_CRL &= ~( 0x0F<< (4*0));
GPIOC_CRL |= (3<<4*0);
GPIOC_BSRR=(1<<(16+0));
while(1)
{
GPIOC_BSRR=(1<<(16+0));
delay(0xFFFFF);
GPIOC_BSRR=(1<<(0));
delay(0xFFFFF);
}
}
6. 仿真
7. 查看 GPIOA 寄存器值
设置断点,运行到断点后可以在:Peripherals-System Viewer-GPIO 选择GPIOA查看值:
五、配置 vscode 开发环境
安装vscode过程忽略。
1. 安装扩展
- c/c++ 扩展
- C/C++ Extension Pack
- Keil Assistant
2. 设置 Keil Assistant
3. 下载 mingw
MinGW - Minimalist GNU for Windows download | SourceForge.net
点击下载,安装软件包,等待下载完成。
点击Continue.
4. 配置mingw
钩选:
点击: Installation->Apply change
点击 Apply->安装。
5. 配置环境变量
把 MinGW\bin 加到系统变量的Path里。
6. Vscode打开和编译 keil 项目
使用open proejct 打开keil的工程,在左侧找到 KEIL UVISION PROJECT。
鼠标移到 Target 1上,会出现编译、下载图标。
如果提示安装 .Net framework,按提示安装。
目前这个环境只能使用vscode实现开发、编译、下载,并不能进行单步调试。 后续章节再补充此操作。