嵌入式系统设计实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统设计实验指导书基于STM32®微控制器
东华理工大学机电学院
刘花香编
2014 年09 月
目录
1 软件安装与环境配置 (4)
1.1 STM32 官方固件库简介 (4)
1.1.1 库开发与寄存器开发的关系 (4)
1.1.2 STM32 固件库与CMSIS 标准讲解 (5)
1.1.3 STM32 官方库包介绍 (7)
1.2 RVMDK 4.12 简介 (10)
1.3 新建基于固件库的RVMDK 工程模板 (10)
1.3.1 MDK4.12 安装破解步骤 (10)
1.3.2 新建工程模板 (13)
1.4 MDK下的程序下载与调试 (27)
1.4.1 STM32软件仿真 (27)
1.4.2 STM32硬件调试 (32)
1.5 RVMDK使用技巧 (36)
1.5.1 代码编辑技巧 (36)
1.5.2 其他小技巧 (39)
2 实验课程 (42)
实验一我的第一个工程 (43)
一、实验目的 (43)
二、实验内容 (43)
三.实验设备 (43)
四、实验步骤(以直接操作寄存器编程为例说明) (43)
五.实验结果及测试 (43)
六、实验说明 (44)
实验二流水灯实验 (45)
一、实验目的 (45)
二、实验内容 (45)
三.实验设备 (45)
四、实验步骤 (45)
五.实验结果及测试 (46)
六、实验说明 (46)
七、实验扩展 (46)
实验三STM32 微控制器外部中断编程 (47)
一、实验目的 (47)
二、实验内容 (47)
三.实验设备 (47)
四、实验步骤 (47)
五.实验结果及测试 (48)
六、实验说明 (48)
七、实验扩展 (48)
实验四STM32 微控制器串口通信编程 (49)
一、实验目的 (49)
二、实验内容 (49)
三.实验设备 (49)
四、实验步骤 (49)
五.实验结果及测试 (51)
六、实验说明 (52)
七、实验扩展 (52)
实验五STM32 微控制器通用定时器编程 (53)
一、实验目的 (53)
二、实验内容 (53)
三.实验设备 (53)
四、实验步骤 (53)
五.实验结果及测试 (54)
六、实验说明 (54)
七、实验扩展 (54)
实验六µC/OS-II 任务基础实验 (55)
一、实验目的 (55)
二、实验内容 (55)
三.实验设备 (57)
四、实验步骤 (57)
五.实验结果及测试 (58)
六、实验说明 (58)
七、实验扩展 (59)
3 附录核心参考程序 (60)
1. 使用寄存器操作一个IO 口,控制GPIOA.12 端口的LED 的闪烁 (60)
2. 使用固件库对一个IO口的操作,控制GPIOA.12 端口的LED的闪烁 (61)
3. 使用固件库对EXTI 编程,检测外部开关信号并报警(核心部分) (62)
4. 使用固件库对USART3编程,实现STM32控制器和上位机通信 (64)
5. 使用固件库对TIM2 编程,控制GPIOA.0 端口的LED闪烁 (67)
6. 在µC/OS-II里面创建1个任务,控制GPIOA.0 端口的LED 的闪烁 (70)
1软件安装与环境配置
本节我们学习如何安装配置STM32 微控制器的软件开发调试环境。我们使用C 语言编写程序――称为源文件;源文件经编译、链接生成机器能识别的机器代码(HEX文件);机器代码下载到目标实验板上的STM32 微控制器的程序存储器中。然后我们通过执行和观察实验板上的实验现象判断程序是否与我们期望的一致,如果不一致还需要返回修改程序。
图 1. 一般的嵌入式软件开发流程
上面这个过程就是一般的嵌入式系统开发流程,可以看出我们需要三种软件:编写源文件的代码编辑软件、编译连接软件、机器代码下载软件。这样的软件很多,本指导书使用的是KEIL公司的Realview MDK 4集成开发调试软件(简称MDK 4),它集成了代码编辑、编译、调试、仿真和代码下载所有功能(调试和代码下载需要硬件仿真器支持);我们使用J-LINK仿真器把机器代码下载到实验板并进行仿真。
1.1 STM32 官方固件库简介
ST(意法半导体)为了方便用户开发程序,提供了一套丰富的STM32 固件库。到底什么是固件库?它与直接操作寄存器开发有什么区别和联系?很多初学用户很是费解,这一节,我们将讲解STM32 固件库相关的基础知识,希望能够让大家对STM32 固件库有一个初步的了解,至于固件库的详细使用方法,我们会在后面的章节一一介绍。
官方包的地址:STM32相关开发工具+文档\固件库\ STM32F10x_StdPeriph_Lib_V3.5.0 1.1.1库开发与寄存器开发的关系
很多用户都是从学51 单片机开发转而想进一步学习STM32 开发,他们习惯了51 单片机的寄存器开发方式,突然一个ST 官方库摆在面前会一头雾水,不知道从何下手。
下面我们将通过一个简单的例子来告诉STM32 固件库到底是什么,和寄存器开发有什么关系?其实一句话就可以概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。
在51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些IO 口的状态,我们直接操作寄存器:
P0=0x11;
而在STM32 的开发中,我们同样可以操作寄存器:
GPIOx->BRR = 0x0011;
这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用STM32,而对于STM32 这种级别的MCU,数百个寄存器记起来又是谈何容易。于是ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。
比如上面的控制BRR 寄存器实现电平控制,官方库封装了一个函数:
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BRR = GPIO_Pin;
}
这个时候你不需要再直接去操作BRR 寄存器了,你只需要知道怎么使用GPIO_ResetBits()这个函数就可以了。在你对外设的工作原理有一定的了解之后,你再去看固件库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便很多?
任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,您如果想要把STM32 学透,光读STM32 固件库是远远不够的。你还是要了解一下STM32 的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃有余。
1.1.2STM32 固件库与CMSIS 标准讲解
前一节我们讲到,STM32 固件库就是函数的集合,那么对这些函数有什么要求呢?这里就涉及到一个CMSIS 标准的基础知识,这部分知识可以从《Cortex-M3 权威指南》中了解到,我们这里只是对权威指南的讲解做个概括性的介绍。经常有人问到STM32 和ARM 以及Cortex-M3是什么关系这样的问题,其实ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做Cortex-M3 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的Cortex-M3 芯片他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种Cortex-m3 内核芯片的片上外设也会有很大的区别,比如STM32F103RBT 和STM32F103ZET,他们的片上外设就有很大的区别。我们可以通过《Cortex-M3 权威指南》中的一个图来了解一下: