本帖最后由 WSGustin 于 2018-2-26 18:35 编辑
第三章 RGB LED试验W7500 最简单的外设莫过于 IO 口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启 W7500EVB 之旅, 通过本章的学习, 将了解到W7500的 IO 口作为输出使用的方法。 在本章中, 我们将通过代码控制 W7500EVB 开发板上的RGB LED: 红绿蓝交替闪烁。
本章分为如下四个小节:
3.1 W7500 IO 口简介
3.2 硬件设计
3.3 软件设计
3.4 下载验证
3.1 W7500 IO 口简介本章将要实现的是控制 W7500EVB 开发板上的RGB LED 实现一个跑马灯的效果, 该实验的关键在于如何控制 W7500 的 IO 口输出。了解了W7500的 IO 口是如何输出的,就可以实现跑马灯了。通过这一章的学习, 将初步掌握W7500基本 IO 口的使用,这是迈向W7500的第一步。 W7500 的 IO 口可以由软件配置成如下 3 种模式1. 输入模式2. 输出模式3. 复用功能模式
每个 IO 口可以自由编程,都有各自的输出使能位和清除输出使能位以及其它复用功能的选择。 下面我们来看一下GPIO的初始化,我们可以调用GPIO_Init函数来进行初始化。 - void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
复制代码GPIO_Init函数有两个参数, 第一个参数GPIOx是用来指定 GPIO,取值范围为 GPIOA~GPIOD。第二个参数GPIO_InitStruct是初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。下面来看看这个结构体的定义。 这里我们通过初始化一个GPIO来讲解这个结构体成员变量的含义。 初始化GPIO的常用格式是。 - GPIO_InitTypeDef GPIO_InitStructure;
复制代码上面代码的意思是设置GPIOC的第5个IO口为输出模式。从上面初始化代码可以看出,结构体 GPIO_InitStructure 的第一个成员变量 GPIO_Pin 用来设置是要初始化哪个或者哪些 IO 口; 第二个成员变量 GPIO_Mode 是用来设置对应 IO 口的输出输入模式,这些模式是上面我们讲解的3个模式,在 W7500x_gpio.h 中是通过一个枚举类型定义的。 - typedef enum{
- GPIO_Mode_IN = 0x00,
- GPIO_Mode_OUT = 0x01,
- GPIO_Mode_AF = 0x02
复制代码如果想知道某个IO口的电平状态,可以读取DATA寄存器的某个位的状态就可以了。在固件库中操作DATA寄存器读取IO口数据,可以通过GPIO_ReadInputDataBit函数实现。 - uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
复制代码比如我要读 GPIOC_5 的电平状态,那么方法是。 - GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_5);
复制代码返回值是 1(Bit_SET)或者 0(Bit_RESET); 如果想要某个IO口输出高电平状态或低电平状态,只要设置GPIO字节屏蔽访问寄存器的某个位就可以了。使用起来也是比较简单的。在固件库中操作GPIO字节屏蔽访问寄存器设置IO口,是通过GPIO_SetBits函数或者GPIO_ResetBits函数。 - void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
复制代码如果我要将 GPIOC_5 的电平状态拉高,那么方法是。 - GPIO_SetBits(GPIOC, GPIO_Pin_5);
复制代码如果我要将 GPIOC_5 的电平状态拉低,那么方法是。 - GPIO_ResetBits(GPIOC, GPIO_Pin_5);
复制代码如果想要使用某个IO口的备用功能,只要设置功能引脚备用功能选择寄存器(AFR)就可以了。在固件库中操作该寄存器的设置的PAD_AFConfig函数。 - void LED_Configuration(void)
复制代码
图3.2.1 W7500EVB EGBLED原理图
3.3 软件设计在W7500EVB RGB LED工程里可,我们引入了 bsp_gpio.c 文件以及头文件bsp_gpio.h。 下面我们首先打开bsp_gpio.c 文件,代码如下: - void LED_Configuration(void)
复制代码LEDR_H,LEDG_H和LEDB_H定义在bsp_gpio.h中: - #define LEDR_H GPIO_SetBits(GPIOA, GPIO_Pin_4)
复制代码该代码里面中的 void LED_Configuration(void)函数就是用来配置 PA3、PA4和PC5 引脚作为输出模式。 在看看我们的main.c文件里的代码: int main() { SystemInit(); /* 系统内部时钟初始化 */ delay_init(); /* 系统滴答时钟配置*/ LED_Configuration(); /*---------------------------------------------------------------------------------------- | 炜世科技—WIZnet W7500官方代理商,全程技术支持,价格绝对优势! | -----------------------------------------------------------------------------------------*/ while(1) { LEDR_L; LEDG_H; LEDB_H; delay_ms(500); LEDR_H; LEDG_L; LEDB_H; delay_ms(500); LEDR_H; LEDG_H; LEDB_L; delay_ms(500); } }
3.4 下载验证程序成功下载到 W7500EVB 开发板上之后,我们可以看到RGB LED灯的红绿蓝交替闪烁,如图3.4.1所示:
图3.4.1 实验结果
|