实验2 新建Stm32点灯项目
一、 实验准备
硬件:RFID 实验箱,电脑等。
软件:Keil4
工具:
1.JLINK 驱动安装(必备)
2.STM32芯片开发环境(必备)
3.串口助手sscom32(必备)
4.实验对应的源代码(必备)
二、 实验目的
1 熟悉 Keil4 开发环境的使用
2 掌握 STM32 工程建立
3 了解 STM32 官方库
4 了解 STM32 通用 I/O 端口的使用
三、 实验原理
1 GIPO 功能描述
每个 GPI/O 端口有两个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32 位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器 (GPIOx_BSRR),一个
- 位复位寄存器(GPIOx_BRR)和一个 32 位锁定寄存器 (GPIOx_LCKR)。 GPIO 端口的每个位可以有软件分别配置成多种模式。
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟输入
- 开漏输出
- 推挽输出
- 推挽复用
- 开漏服用
每个端口位可以自由编程。具体的寄存器的配置及使用请查看文件:STM32 中文参考手册_v10.pdf
2 LED 灯硬件原理图
图1.1 LED 原理图
用 MC74HC573ADWR2 芯片,相关参数请查阅相关文件。LE 需要拉高使能芯片工作。LED1~8 分别对应了 PE5~PE2,与 PC3~PC0,将相应的引脚拉高点亮 LED 灯。
3 STM32 库
TM32F10x 标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。每一个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件开发都由一个通用 API 驱动,API 对该驱动程序的结构,函数和参数名称都进行了标准化。所有的驱动源码都符合 ANSI-C。ST 公司已经把驱动源代码文档化。
此后的例程中我们将会频繁的使用到 STM32 库中的 API 进行开发。
4 SM32 引脚初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE
| RCC_APB2Periph_GPIOC , ENABLE); 初始化端口的时钟频率。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 设置为输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 设置速率
GPIO_Init(GPIOE, &GPIO_InitStructure);
初始化端口
具体请参考例程源码。
四、 实验步骤
4.1 打开 KEIL4 开发环境并新建工程,如图 1.2 所示。
首先需要在电脑的某个路径下创建工程的根文件夹(如 E:\源代码\LED),笔者创建了 LED 文件夹用于工程的根目录。
打开 KEIL4 环境,点击 Project -> New uVision project,如图 1.2 示。
- 图1.2 点击后弹出如图 1.3 所示的提示框。
- 图1.3
在这里选择之前创建的工程的根文件夹,笔者这里是/源代码/LED 文件夹。输入工程的名称(自定),点击保存后弹出如图 1.4 所示的内容。
- 图1.4
在这里就需要选择单片机的类型,本实验箱的单片机是 STM32F103VE 单片机。首选选择
STMicroelectronics 后会打开设备的列表。
接下来找到 STM32F103VE 并选择,点击 OK。
- 图1.5
- 图1.6
这里会提示是否需要添加启动源文件,选择否。到这里工程已经初步建好。工程的构造如图 1.7 所示,是最初始的状态,之后我们需要添加一些目录及源文件。
- 图1.7
4.2 构造工程目录及源文件
点击图 1.8 中标记的按钮,进入工程目录构造的对话框。
- 图1.8
这里笔者将初始的 Source Group 删除了,并且构建了 5 个目录。user 目录内可以放置
主函数等源文件。startup 放置 STM32 库中提供的个启动文件,他是使用汇编语言编写的。 FWLIB 放置 STM32 库中的外设的驱动文件。HARDWARE 内可以放置一些硬件的驱动程序
- LED 灯或 LCD 屏幕驱动等。CMSIS 放置 STM32 提供的系统 API 源文件。(注:这样的目录结构不是固定的,只是一个例子,使用者可以根据自己的习惯来建立工程目录)。
- 图1.9
构建完成后如图 1.10 所示。
- 图1.10
- KEIL4 中构建的目录并不会在实际的工程目录下创建文件夹,它只是为了在编写代
时阅读方便而创建的。那么我们需要在实际的路径下创建目录,名称最好与工程中一致,以免发生混淆如图 1.11 所示。
- 图1.11
4.3 拷贝 STM32 库文件
- 首先解压库文件,路径/光盘/附件/STM32 库/ STM32 官方库 3.5 版本.rar
- 将\stm32f10x_stdperiph_lib35\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\De viceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s 文件拷贝到工程目录下的 startup 文件夹。
- 将\stm32f10x_stdperiph_lib35\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\De viceSupport\ST\下的 stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h 三个文件拷贝到工程目录下的 CMSIS 文件夹下。
- 将\stm32f10x_stdperiph_lib35\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdP eriph_Examples\ADC\3ADCs_DMA 下的 stm32f10x_conf.h 拷贝到工程目录下的 CMSIS文件夹下。
- 将\stm32f10x_stdperiph_lib35\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_Std Periph_Driver 下的 inc 与 src 文件夹拷贝到工程目录下的 FWLIB 文件夹下。
到这里基本的文件已经拷贝到工程目录下了。
4.4 将文件添加到 KEIL4 工程中
上一步的工作仅仅把相关的源文件拷贝到了工程目录下,我们还需要在 KEIL4 中将他们添加到工程中来。
首先我们添加 startup_stm32f10x_hd.s 到 startup 目录下。在 project 窗口下右键 startup 点 1.12 标记的选项。
图 1.12
图 1.13
图 1.14
- 添加 system_stm32f10x.c 文件到工程的 CMSIS 下
图 1.15
2.添加 stm32f10x_gpio.c 及 stm32f10x_rcc.c 到 FWLIB 目录下
- 图1.16
3. 到这里本此实验所需的库文件已经添加完毕,源文件具体的功能在这里不详述后续实验都会使用到,读者也可以参考相关资料来熟悉 STM32 的库。(注:.h 头文件不用添加,编译时自动关联),结构如图所示
- 图1.17
4.5 编写 LED 灯闪烁程序
- 新建文件,点击图 1.18 所示的选项,新建文件如图 1.19。
- 图1.18
图 1.19
2. 保存源文件
点击图 1.20 所示选项,保存文件
图 1.20
图 1.21
这里笔者将他命名为 main.c,保存在工程的 user 文件夹下。
3. 添加文件到工程的 user 目录下
将上一步新建的文件添加工程中。
图 1.22
- 图1.23
目录结构如图 1.23 所示。
4. 编写源码
本例程不将重点放在编码之上,说以建议使用者直接在我们提供的工程(/光盘/源代码/LED/user)中将 main.c 的源码拷贝到自己创建的工程中。
图 1.24
到这里,代码方面的工作都已经完成。
4.6 配置工程选项
- 点击图 1.25 示的选项,进入工程配置界面。
-
- 1.25
点击 Output 选项卡,勾选 Create HEX File。
图 1.26
点击 C/C++选项卡,在 Define 框中输入两个宏定义,如图 1.27 所示。
图 1.27
点击 Include Paths 右侧的路径选择按钮,添加头文件的路径,将需要引用的头文件所在的路径都添加进来,如图 1.28 所示。
- 图1.28
- 图1.29
选择 Utilities 选项卡,选择 Cotex-M/R J-LINK/J-Trace(J-Link 仿真器)。
图 1.30
点击 Settings,设置固件下载的一些选项。
图 1.31
图1.32
点击 Add 添加 Programming Algorithm
图1.33
选择图 1.34 所示的选项并点击 Add。
图 1.32
- 图1.35
点击 Ok,工程的配置已经完成了。
4.7 编译
- 图1.36
点击图 1.36 所示的编译选项,编译工程,若没有错误编译成功后在 KEIL4 底部输出如图 1.37 所示的内容。
- 图1.37
4.8 下载固件
- 接上 J-Link 仿真器,20pin 的接口接在 lcd 屏幕下发的 JTAG 口,另一端接在电脑。
- 点击图 1.38 所示的选项,下载固件到 STM32 单片机。