ARM学习资料 GPIO基本内容 LED跑马灯实验(1)

  • 格式:doc
  • 大小:606.50 KB
  • 文档页数:16

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关主题