您的当前位置:首页正文

LED跑马灯实验-库函数

2023-06-07 来源:易榕旅网


LED跑马灯实验

修改记录

版本号. 作者 描述

修改日期 0.1 徐珊 First Draft 2011-9-14

审核记录

姓名 职务 签字 日期 标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 2 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved. LED跑马灯 1.1 实验介绍

GPIO即通用可编程输入输出口,在此我们通过GPIO编程实现一个跑马灯的实验。该跑马灯 实验是最简单,也是一般最先开始的一个实验,它可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上 , 从而节省了在搭建过程中所消耗的时间和精力 。 所有的 GPIO 操作都是以跑马灯为基础进行的。

1.2 实验目标

1. 理解固件库的结构 2. 分析和学习固件库 3. 灵活运用 GPIO

1.3 实验时间

60分钟

1.4 预备知识

熟悉C语言知识,熟练MDK的使用

1.5 实验步骤

1.解压stm32f10x_stdperiph_lib.zip 可以从ST官方网站免费下载。本教程使用的标准库版本为 3.1.2

2.创建一个GPIO文件夹

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 3 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

2.1 新建子文件夹User,用于存放用户源程序 2.2 新建子文件夹Project,用户KEIL工程文件

2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。

3. 复制源代码到GPIO文件夹

3.1 将stm32f10x_stdperiph_lib\\STM32F10x_StdPeriph_Lib_V3.1.2\\Libraries文件夹和Utilities文件夹整体复制到GPIO文件夹下。这就是ST的标准库,是以源代码形式提供的。

3.2 将库中的演示代码\\GPIO\\labsolutions\\4GPIO_fuction\\User中的文件复制到GPIO\\User文件夹.

4. 新建Keil MDK工程

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 4 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved. 4.1 启动Keil MDK,点击菜单 New uVision Project,

新建一个工程,命名为GPIO

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 5 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

4.2 选择CPU类型为 STM32F107VC (这是MDV-STM32-107开发板采用的CPU类型)

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 6 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)

4.4 根据自己的需要修改Target名字。(名字任意)

4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 7 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

User : 存放用户自己写的源代码 RVMDK : 存放启动文件(汇编文件) StdPeriph_Driver : 存放ST标准库外设驱动文件 CMSIS : 存放CMSIS接口文件(这也是库的一部分) STM32_EVAL存放板集设备驱动文件

4.6 创建好Group后,我们开始依次添加文件。 4.6.1给User文件夹添加文件 路径: User文件夹

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 8 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 9 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

4.6.2给RVMDK文件夹添加文件,路径:\\Libraries\\CMSIS\\Core\\CM3\\startup\\arm

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 10 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 11 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

启动文件路径:\\Libraries\\CMSIS\\Core\\CM3\\startup\\arm 4.6.3给stdPeriph_Driver文件夹添加文件

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 12 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 13 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

设备驱动文件路径:\\GPIO\\Libraries\\STM32F10x_StdPeriph_Driver\\src 4.6.4给CMSIS文件夹添加文件

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 14 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 15 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

CMSIS接口文件路径:\\GPIO\\Libraries\\CMSIS\\Core\\CM3 4.6.5给STM32_EVAL文件夹添加文件

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 16 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 17 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

STM32_EVAL接口文件路径: \\Utilities\\STM32_EVAL

5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。 /******************************************************** version:v1.0 author:sky

**********************************************************/ /* 头文件 ------------------------------------------------------------------*/ #include \"stm32f10x.h\" #include \"stm32_eval.h\"

/* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void Delay(__IO uint32_t nCount); int main(void) // 主函数 {

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 18 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

/* 系统始终配置 **********************************************/ RCC_Configuration(); /* 初始化LED*/

STM_EVAL_LEDInit(LED1); STM_EVAL_LEDInit(LED2); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); while (1) {

STM_EVAL_LEDOn(LED1);//点亮LED1 Delay(0x3FFFFF); //延时,维持灯的点亮 STM_EVAL_LEDOn(LED2); //点亮LED2 STM_EVAL_LEDOff(LED1); //熄灭LED1 Delay(0x3FFFFF);

STM_EVAL_LEDOn(LED3); //点亮LED3 STM_EVAL_LEDOff(LED2); //熄灭LED2 Delay(0x3FFFFF);

STM_EVAL_LEDOn(LED4); //点亮LED4 STM_EVAL_LEDOff(LED3); //熄灭LED3 Delay(0x3FFFFF);

STM_EVAL_LEDOff(LED4); //熄灭LED4 } }

/*始终配置*/

void RCC_Configuration(void) {

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 19 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

/* Setup the microcontroller system. Initialize the Embedded Flash Interface, initialize the PLL and update the SystemFrequency variable. */ SystemInit(); }

/*延时函数 */

void Delay(__IO uint32_t nCount) {

for(; nCount != 0; nCount--); }

6. 配置工程, 点击“Options”按钮 6.1 切换到Output。

选择Object文件夹。 在Create Hex File 前打钩。

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 20 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

6.2 切换带Listing。

选择Listings文件夹

6.3 切换到C/C++

 添加两个预编译宏USE_STDPERIPH_DRIVER, STM32F10X_CL,

USE_STM3210C_EVAL,LCD_Debug (这是ST库用到了这两个宏)

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 21 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

 修改Includes路径

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 22 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 23 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

6.4 切换到Debug

 选择硬件调试器(缺省是软件仿真),我们选择Cortex-M/R J-LINK/J-Trace调试器  在 Run to main前打钩

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 24 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

6.4 切换到Utilities

 选额调试器类型,我们选择Cortex-M/R J-LINK/J-Trace

 点settings按钮,添加Flash编程算法,我们选择STM32连接型器件,Flash容量

256K字节

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 25 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

7. 配置工程完毕。下面开始编译。

8. 编译OK,按开发板Reset键开始运行。

9. 教程结束。

(注:本GPIO应用还有一个小实验,请自己仿照以上方法完成)实验代码如下:

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 26 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved. 1、通过使用固件库配置GPIO引脚的模式控制法

/* Includes ------------------------------------------------------------------*/ #include \"stm32f10x.h\" //#include \"stm32_eval.h\"

/* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体

/* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void Delay(__IO uint32_t nCount); int main(void) //主函数 {

/* System Clocks Configuration **********************************************/ RCC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //外设时钟配置,开启GPIOB和GPIOD的时钟

//GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7|GPIO_Pin_13; //管脚位置定义,标号可以是NONE、ALL、0至15。

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; //输出速度2MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出模式 Out_PP GPIO_Init(GPIOD,&GPIO_InitStructure); //E组GPIO初始化

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,DISABLE); //外设时钟配置,开启GPIOB和GPIOD的时钟

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 27 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

while (1) {

/*====LED1-ON=======*/

GPIO_ResetBits(GPIOD , GPIO_Pin_7); GPIO_SetBits(GPIOD , GPIO_Pin_13); GPIO_SetBits(GPIOD , GPIO_Pin_3); GPIO_SetBits(GPIOD , GPIO_Pin_4); Delay(0xfffff); Delay(0xfffff); Delay(0x5ffff);

/*====LED12-ON=======*/

GPIO_ResetBits(GPIOD , GPIO_Pin_7); GPIO_ResetBits(GPIOD, GPIO_Pin_13); GPIO_SetBits(GPIOD , GPIO_Pin_3); GPIO_SetBits(GPIOD , GPIO_Pin_4); Delay(0xfffff); Delay(0xfffff); Delay(0x5ffff);

/*====LED123-ON=======*/ GPIO_ResetBits(GPIOD , GPIO_Pin_7); GPIO_ResetBits(GPIOD , GPIO_Pin_13); GPIO_ResetBits(GPIOD , GPIO_Pin_3); GPIO_SetBits(GPIOD , GPIO_Pin_4); Delay(0xfffff); Delay(0xfffff);

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 28 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved. } } /**

Delay(0x5ffff);

/*====LED1234-ON=======*/ GPIO_ResetBits(GPIOD , GPIO_Pin_7); GPIO_ResetBits(GPIOD , GPIO_Pin_13); GPIO_ResetBits(GPIOD , GPIO_Pin_3); GPIO_ResetBits(GPIOD, GPIO_Pin_4); Delay(0xfffff); Delay(0xfffff); Delay(0x5ffff);

/*====LED1234-OFF=======*/ GPIO_SetBits(GPIOD , GPIO_Pin_7); GPIO_SetBits(GPIOD , GPIO_Pin_13); GPIO_SetBits(GPIOD , GPIO_Pin_3); GPIO_SetBits(GPIOD , GPIO_Pin_4); Delay(0xfffff); Delay(0xfffff); Delay(0x5ffff);

* @brief Configures the different system clocks. * @param None * @retval None */

void RCC_Configuration(void)

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 29 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved. {

/* Setup the microcontroller system. Initialize the Embedded Flash Interface, initialize the PLL and update the SystemFrequency variable. */ SystemInit(); } /**

* @brief Inserts a delay time.

* @param nCount: specifies the delay time length. * @retval None */

void Delay(__IO uint32_t nCount) {

for(; nCount != 0; nCount--); }

1.6 结论

1.7 问题

1、 2、 3、 4、

简述GPIO端口位的基本结构 简述怎么配置GPIO寄存器

简述GPIO的几种模式配置及其区别

目录 \\GPIO\\labs 下面 test.zip 压缩文件中的工程 是基于STM32F103ZE芯片的 某一块开发板上的LED跑马灯,请根据前面做的GPIO实验修改本代码,使得该 LED跑马灯能够在基于STM32F107VC芯片的开发板上正常运行起来。

标题 文档编号 版本 页 P&R Center 作者 文档名 修改日期 1.0 30 of 30 徐珊 2011-9-14 密级:秘密 Copyright @ 2010 Ultrawise P&R Center, All rights reserved.

因篇幅问题不能全部显示,请点此查看更多更全内容