跑马灯实验 微控制器STM32原理与应用实验指导

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

跑马灯实验
1 实验目的
(1) 了解通用IO口的输出类型和初始化过程,学会对GPIO库函数的使用;
(2) 掌握基本IO口的使用;
(3) 利用GPIO函数和延时函数实现对LED灯的交替闪烁,实现类似跑马灯的效果。

2 实验任务
(1) 编写程序,实现对LED1~LED8的轮流点亮;
(2) 仿真调试,调整延时时间,利用仿真示波器观察延时时间长短;
(3) 下载程序,观察跑马灯运行状况。

3 实验说明
本实验将要实现的是控制实训平台上的8个LED灯实现一个类似跑马灯的
效果,LED通过控制IO口的高低电平工作,因此实验的关键在于如何控制STM32的IO口输出。

4预习要求
(1) 初始化IO口包括哪些基础设置。

(2)GPIO的输入输出模式。

5 实验步骤
(1) 在实训平台上将IO口与LED(LED1~LED8)连接;
(2) 复制工程模板文件夹,新建led.c和led.h文件,并将新建文件加入工程中;
(3) 编写led.h文件,声明void LED_Init(void)初始化函数,宏定义LED1~LED8;
(4) 编写led.c文件,建立void LED_Init(void)初始化函数,实现对LED灯用到的IO端口的配置,配置为推挽输出,速度为50MHZ;
(5) 编写main()函数,实现对LED1~LED8的轮流点亮;
(6) 软件仿真,调整延时时间,利用仿真示波器观察延时时间长短;
(7) 下载程序,观察跑马灯的运行状况。

硬件设计
本实验用到的硬件只有LED(LED1 ~ LED8)。

电路实训平台上默认是未连接好的,所以在硬件上需要根据自己的需要将其与MCU进行连接。

注意:LED的硬件为共阳极连接,需将IO口连接端置为低电平才能点亮。

LED模块原理图如4.1所示:
图4.1 LED模块原理图
软件设计
(1) 新建文件,命名为跑马灯实验。

复制粘贴之前的Template工程。

图4.2 跑马灯实验文件
(2) 新建LED文件。

在跑马灯实验文件夹下面新建一个HARDWARE的文件夹,用来存储与硬件相关的代码,然后在HARDWARE文件夹下新建一个LED 文件夹,用来存放与LED相关的代码,如图4.3所示。

图4.3 新建HARDW ARE以及LED文件夹
(3) 新建led.c和led.h文件。

打开USER文件夹下的Template. uvprojx,将其重命名为LED. Uvprojx。

点击新建一个文件保存在HARDWARE->LED文件夹,命名为led.c。

按照同样的方法,再新建一个led.h文件,保存在LED文件夹。

图4.4 修改文件名
图4.5 新建及保存文件
图4.6 新建led.c及led.h文件
(4) 将HARDWARE文件添加到工程当中。

首先右键单击Template文件夹,点击“Manage Project Items...”选项,在打开的新窗口中,点击添加按钮,在光标闪动处添加HARDWARE文件名,然后点击任意空白处即可保存文件。

图4.7 打开Manage Project Items
图4.8 添加HARDW ARE文件
(5) 将led.c文件加入工程。

找到“实验3 跑马灯实验”下的HARDWARE 文件,打开文件夹,找到LED文件下的led.c文件,双击led.c文件或选中led.c 文件后(文件名一栏出现led.c的字样)点击“add”按钮,然后点击“close”按钮即可。

此时可以看到,“Files:”一栏中出现“led.c”文件,然后点击“OK”按钮即可保存。

图4.9 打开HARDW ARE文件
图4.10 添加led.c文件到HARDW ARE文件
图4.11 成功添加led.c文件
添加成功后,可以看到工程目录中出现了HARDWARE文件,点击左侧加号按钮可以看到HARDWARE文件夹下成功添加了led.c文件。

图4.12 文件添加成功
图4.13 添加led.h路径
图4.14 点击LED文件夹
图4.15 点击OK添加成功
图4.16 添加led.h路径
(6)编写led.h文件
图4.17 led.h文件
#ifndef ...#endif必须要配合使用。

#ifndef的意思是如果没有定义,即判断如果没有定义__LED_H,则会进行下面的定义,防止重复定义。

(7)编写led.c文件
首先配置外设时钟。

在配置STM32外设的时候,任何时候都要先使能该外设的时钟。

GPIO是挂载在APB2总线上的外设,在固件库中对挂载在APB2总线上的外设时钟使能是通过函数RCC_APB2PeriphClockCmd()来实现的。

对于这个入口参数设置,这里需要说明的是,因为本试验用到的IO口初始化参数都是设置在结构体变量GPIO_InitStructure中,而且IO口的模式和速度都一样,所以只用初始化一次。

IO口初始化后加入一行代码:GPIO_SetBits(GPIOE, GPIO_Pin_5)的作用是在初始化中将IO口输出设置为高。

最后,保存led.c。

图4.18 led.c文件
操作IO口输出高低电平有三种方法。

第一种方法:位带操作
通过位带操作PE0输出高低电平从而控制LED1。

#define LED1 PEout(0) //位带操作,即LED1代表的是PE0端口
LED1=1; //通过位带操作控制LED1的引脚PE0输出高电平;
LED1=0; //通过位带操作控制LED1的引脚PE0输出低电平;
第二种方法:库函数操作
GPIO_SetBits(GPIOE, GPIO_Pin_0); //设置GPIOE.0输出1,等同LED1=1; GPIO_ResetBits (GPIOE, GPIO_Pin_0); //设置GPIOE.0输0,等同LED1=0;
第三种方法:寄存器操作
GPIOB->ODR|=1<<5;//设置GPIOE.0输出1,等同LED1=1;
GPIOB->ODR|&=~(1<<5);//设置GPIOE.0输出0,等同LED1=0;
对于上面三种方法,根据个人习惯来选择一种即可。

在IO口速度没有太大要求的情况下效果都是一样的。

本次试验通过在固件库中设置ODR寄存器的值
来控制IO口的输出状态:
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
该函数一般用来一次性将一个GPIO的多个端口进行设置。

(8) 编写main()函数。

首先打开USER文件夹内的main.c,删除main.c里面的所有代码,接着开始写主程序,如下图所示。

其中,GPIO_Write函数内的第二个参数需要注意一下,因为实训平台上的LED灯为低电平有效,只有当端口输出为零时,LED灯才会被点亮,所以i需要取反,取反符号为“~”。

当i=00000001时,取反的结果为11111110,这样就只有最低位(PE0)控制的灯被点亮。

图 4.19 主函数
仿真与下载
编译无误后使用软件仿真示波器观察延时时间,观察是否与设定延时时长相符合,再根据软件仿真的结果,将程序下载到实训平台观察运行结果。

相关文档
最新文档