ARM学习资料 GPIO基本内容 LED跑马灯实验(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED跑马灯实验
修改记录
版本号. 作者描述修改日期
0.1 徐珊First Draft 2011-9-21
审核记录
姓名职务签字日期
标题文档编号版本页
文档名 1.0 2 of 16
LED跑马灯
1.1 实验介绍
GPIO即通用可编程输入输出口,在此我们通过GPIO编程实现一个跑马灯的实验。
该跑马灯实验是最简单,也是一般最先开始的一个实验,它可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。
所有的 GPIO 操作都是以跑马灯为基础进行的。
1.2 实验目标
1. 理解GPIO寄存器配置的相关知识
2. 灵活运用 GPIO
1.3 实验时间
60分钟
1.4 预备知识
熟悉C语言知识,熟练MDK的使用
1.5 实验步骤
1.创建一个GPIO_1文件夹
2.1 新建子文件夹User,用于存放用户源程序
2.2 新建子文件夹RVMDK,用于存放去启动代码(STM32F10x.s)
2.3 新建子文件夹Project,用户KEIL工程文件
2.4 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。
标题文档编号版本页
文档名 1.0 3 of 16
具体如下图所示:
4. 新建Keil MDK工程
4.1 启动Keil uVision4,点击菜单 New uVision Project,
新建一个工程,命名为GPIO
标题文档编号版本页
文档名 1.0 4 of 16
4.2 选择CPU类型为 STM32F107VC (这是MDV-STM32-107开发板采用的CPU类型)
标题文档编号版本页
文档名 1.0 5 of 16
4.3 当提示是否复制启动代码时,请选择否。
(为了工程目录标准化,稍后添加Keil软件自带的旧版本启动文件)
4.4 根据自己的需要修改Target名字。
(名字任意)
4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)
User : 存放用户自己写的源代码
RVMDK : 存放启动文件(汇编文件)
标题文档编号版本页
文档名 1.0 6 of 16
标题
文档编号 版本 页
文档名
1.0 7 of 16
4.6 创建好Group 后,我们开始依次添加文件。
4.6.1给User 文件夹新建GPIO..c 文件,具体如下图所示:
新文件内没有任何代码:
保存新文件到User 目录下,命名为GPIO.c
4.6.2给User文件夹添加刚刚新建好的GPIO.c,该文件在\GPIO\User下,点击Add即可
标题文档编号版本页
文档名 1.0 8 of 16
标题 文档编号 版本
页
文档名
1.0 9 of 16
添加后可看到GPIO.c 文件在User 目录下
4.6.3给RVMDK 文件夹添加启动文件,该文件在keil_MDK 软件安装目录下的: \Keil\ARM\Startup\ST\ STM32F10x.s 文件,先把这个文件复制到GPIO 工程目录下面的 \GPIO_1\RVMDK 文件夹下,然后再吧这个文件添加到RVMDK 下,如下所示:
标题文档编号版本页
文档名 1.0 10 of 16
添加时注意,应该把文件类型选择为所有,或者有*s的扩展名的类型,否则看不到你所需要的文件(STM32F10x.s)
5.在main.c 文件,输入我们自己跑马灯程序。
/*配置寄存器法 */
#define GPIOD_CRL (*((unsigned int *)(0x40011400))) //0X40001 1400
#define GPIOD_CRH (*((unsigned int *)(0x40011404))) //基址+偏移量
#define GPIOD_ODR (*((unsigned int *)(0x4001140C))) //32位数据寄存器
#define RCC_APB2ENR (*((unsigned int *)(0x40021018))) //外设时钟使能寄存器
void Delay(void) //延时函数,流水灯显示用
标题文档编号版本页
文档名 1.0 11 of 16
{
unsigned int i;
for (i=0;i<0x9FFFF;i++);
}
int main(void)
{
// 开发板使用如下I/O口控制LED---PD3,PD4,PD7,PD13
RCC_APB2ENR |=(1<<5); // 使能PORTD口的时钟
GPIOD_CRL &= 0x00000000; // 配置寄存器,将GPIOD_CRL低16位都清0,这样
CNF为00,
GPIOD_CRL |= 0x33333333; // 配置寄存器,MODE选择为11,即50MHz输出模式,
选择为推挽输出模式
GPIOD_CRH &= 0x00000000; // 配置寄存器,将GPIOD_CRL高16位都清0,这样
CNF为00,
GPIOD_CRH |= 0x33333333; // 配置寄存器,MODE选择为11,即50MHz输出模式,
选择为推挽输出模式
while(1)
{
GPIOD_ODR=0xffff; //LED全亮
Delay();
GPIOD_ODR=0x0000; //LED全灭
Delay();
}
}
6. 配置工程, 点击“Options”按钮
6.1 切换到Output。
选择Object文件夹。
标题文档编号版本页
文档名 1.0 12 of 16
6.2 切换带List。
选择List文件夹
6.4 切换到Debug
标题文档编号版本页
文档名 1.0 13 of 16
➢选择硬件调试器(缺省是软件仿真),我们选择Cortex-M/R J-LINK/J-Trace调试器➢在 Run to main前打钩
6.4 切换到Utilities
➢选额调试器类型,我们选择Cortex-M/R J-LINK/J-Trace
➢点settings按钮,添加Flash编程算法,我们选择STM32连接型器件,Flash容量256K字节
标题文档编号版本页
文档名 1.0 14 of 16
标题 文档编号
版本 页
文档名
1.0 15 of 16
7. 配置工程完毕。
下面开始编译。
8. 编译OK ,按开发板Reset 键开始运行。
9. 教程结束。
1.6 结论
1.7 问题
1、 简述GPIO 端口位的基本结构
2、
简述怎么配置GPIO 寄存器
3、简述GPIO的几种模式配置及其区别
4、在实例代码工程中修改代码使得四个LED灯依次轮流点亮,间断时间不限
标题文档编号版本页
文档名 1.0 16 of 16。