LED跑马灯实验库函数Word文档格式.docx
《LED跑马灯实验库函数Word文档格式.docx》由会员分享,可在线阅读,更多相关《LED跑马灯实验库函数Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
所有的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文件夹
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.新建KeilMDK工程
4.1启动KeilMDK,点击菜单NewuVisionProject,
新建一个工程,命名为GPIO
4.2选择CPU类型为STM32F107VC(这是MDV-STM32-107开发板采用的CPU类型)
4.3当提示是否复制启动代码时,请选择否。
(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)
4.4根据自己的需要修改Target名字。
(名字任意)
4.5为了便于代码管理,在这个Project下创建几个Group(名字可以任意)
User:
存放用户自己写的源代码
RVMDK:
存放启动文件(汇编文件)
StdPeriph_Driver:
存放ST标准库外设驱动文件
CMSIS:
存放CMSIS接口文件(这也是库的一部分)
STM32_EVAL存放板集设备驱动文件
4.6创建好Group后,我们开始依次添加文件。
4.6.1给User文件夹添加文件路径:
User文件夹
4.6.2给RVMDK文件夹添加文件,路径:
\Libraries\CMSIS\Core\CM3\startup\arm
启动文件路径:
4.6.3给stdPeriph_Driver文件夹添加文件
设备驱动文件路径:
\GPIO\Libraries\STM32F10x_StdPeriph_Driver\src
4.6.4给CMSIS文件夹添加文件
CMSIS接口文件路径:
\GPIO\Libraries\CMSIS\Core\CM3
4.6.5给STM32_EVAL文件夹添加文件
STM32_EVAL接口文件路径:
\Utilities\STM32_EVAL
5.修改源代码。
我们将修改main.c文件,换成我们自己跑马灯程序。
/********************************************************
version:
v1.0
author:
sky
**********************************************************/
/*头文件------------------------------------------------------------------*/
#include"
stm32f10x.h"
stm32_eval.h"
/*Privatefunctionprototypes-----------------------------------------------*/
voidRCC_Configuration(void);
voidDelay(__IOuint32_tnCount);
intmain(void)//主函数
{
/*系统始终配置**********************************************/
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
STM_EVAL_LEDOn(LED3);
//点亮LED3
STM_EVAL_LEDOff(LED2);
//熄灭LED2
STM_EVAL_LEDOn(LED4);
//点亮LED4
STM_EVAL_LEDOff(LED3);
//熄灭LED3
STM_EVAL_LEDOff(LED4);
//熄灭LED4
}
}
/*始终配置*/
voidRCC_Configuration(void)
{
/*Setupthemicrocontrollersystem.InitializetheEmbeddedFlashInterface,
initializethePLLandupdatetheSystemFrequencyvariable.*/
SystemInit();
/*延时函数*/
voidDelay(__IOuint32_tnCount)
for(;
nCount!
=0;
nCount--);
6.配置工程,点击“Options”按钮
6.1切换到Output。
选择Object文件夹。
在CreateHexFile前打钩。
6.2切换带Listing。
选择Listings文件夹
6.3切换到C/C++
Ø
添加两个预编译宏USE_STDPERIPH_DRIVER,STM32F10X_CL,USE_STM3210C_EVAL,LCD_Debug(这是ST库用到了这两个宏)
修改Includes路径
6.4切换到Debug
选择硬件调试器(缺省是软件仿真),我们选择Cortex-M/RJ-LINK/J-Trace调试器
在Runtomain前打钩
6.4切换到Utilities
选额调试器类型,我们选择Cortex-M/RJ-LINK/J-Trace
点settings按钮,添加Flash编程算法,我们选择STM32连接型器件,Flash容量256K字节
7.配置工程完毕。
下面开始编译。
8.编译OK,按开发板Reset键开始运行。
9.教程结束。
(注:
本GPIO应用还有一个小实验,请自己仿照以上方法完成)实验代码如下:
1、通过使用固件库配置GPIO引脚的模式控制法
/*Includes------------------------------------------------------------------*/
//#include"
/*Privatetypedef-----------------------------------------------------------*/
/*Privatedefine------------------------------------------------------------*/
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
GPIO_InitTypeDefGPIO_InitStructure;
//定义GPIO初始化结构体
intmain(void)//主函数
/*SystemClocksConfiguration**********************************************/
RCC_Configuration();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
//外设时钟配置,开启GPIOB和GPIOD的时钟
//GPIO_InitTypeDefGPIO_InitStructure;
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);
/*====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(0x5ffff);
/*====LED12-ON=======*/
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
/*====LED123-ON=======*/
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
GPIO_ResetBits(GPIOD,GPIO_Pin_3);
/*====LED1234-ON=======*/
GPIO_ResetBits(GPIOD,GPIO_Pin_4);
/*====LED1234-OFF=======*/
GPIO_SetBits(GPIOD,GPIO_Pin_7);
}
/**
*@briefConfiguresthedifferentsystemclocks.
*@paramNone
*@retvalNone
*/
*@briefInsertsadelaytime.
*@paramnCount:
specifiesthedelaytimelength.
1.6结论
1.7问题
1、简述GPIO端口位的基本结构
2、简述怎么配置GPIO寄存器
3、简述GPIO的几种模式配置及其区别
4、目录\GPIO\labs下面test.zip压缩文件中的工程是基于STM32F103ZE芯片的
某一块开发板上的LED跑马灯,请根据前面做的GPIO实验修改本代码,使得该
LED跑马灯能够在基于STM32F107VC芯片的开发板上正常运行起来。