野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7146|回复: 1

M0+MAC+TCP/IP 以太网单芯片方案 W7500EVB用户手册连载(2)--实战篇

[复制链接]
发表于 2018-2-26 18:17:19 | 显示全部楼层 |阅读模式
W7500(W7500P)芯片简介:
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。
全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。
本篇将从W7500最简单的外设说起。每一个实例都配有详细的代码及解释,手把手教你如何使用W7500EVB的各种外设,通过本篇的学习,希望大家能学会W7500EVB绝大部分外设的使用。

想了解更多关于WIZnet W7500更多信息,或者有技术问题请联系我们:gustin@wisioe.com
深圳炜世科技—WIZnet官方代理商,全程技术支持,价格绝对优势!
电话:0755-86568556
邮箱:support@wisioe.com

W7500EVB开发指南.pdf

395.27 KB, 下载次数: 76

回复

使用道具 举报

 楼主| 发表于 2018-2-26 18:25:21 | 显示全部楼层

M0+MAC+TCP/IP 以太网单芯片方案 W7500EVB用户手册连载(1)--硬件简介

本帖最后由 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函数来进行初始化。
  1. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
复制代码
GPIO_Init函数有两个参数, 第一个参数GPIOx是用来指定 GPIO,取值范围为 GPIOA~GPIOD。第二个参数GPIO_InitStruct是初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。下面来看看这个结构体的定义。
  1. typedef struct{
复制代码
这里我们通过初始化一个GPIO来讲解这个结构体成员变量的含义。
初始化GPIO的常用格式是。
  1. GPIO_InitTypeDef GPIO_InitStructure;
复制代码
上面代码的意思是设置GPIOC的第5个IO口为输出模式。从上面初始化代码可以看出,结构体 GPIO_InitStructure 的第一个成员变量 GPIO_Pin 用来设置是要初始化哪个或者哪些 IO 口; 第二个成员变量 GPIO_Mode 是用来设置对应 IO 口的输出输入模式,这些模式是上面我们讲解的3个模式,在 W7500x_gpio.h 中是通过一个枚举类型定义的。
  1. typedef enum{
  2.     GPIO_Mode_IN    = 0x00,
  3.      GPIO_Mode_OUT  = 0x01,
  4.      GPIO_Mode_AF    = 0x02
复制代码
如果想知道某个IO口的电平状态,可以读取DATA寄存器的某个位的状态就可以了。在固件库中操作DATA寄存器读取IO口数据,可以通过GPIO_ReadInputDataBit函数实现。
  1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
复制代码
比如我要读 GPIOC_5 的电平状态,那么方法是。
  1. GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_5);
复制代码
返回值是 1(Bit_SET)或者 0(Bit_RESET);
如果想要某个IO口输出高电平状态或低电平状态,只要设置GPIO字节屏蔽访问寄存器的某个位就可以了。使用起来也是比较简单的。在固件库中操作GPIO字节屏蔽访问寄存器设置IO口,是通过GPIO_SetBits函数或者GPIO_ResetBits函数。
  1. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
复制代码
如果我要将 GPIOC_5 的电平状态拉高,那么方法是。
  1. GPIO_SetBits(GPIOC, GPIO_Pin_5);
复制代码
如果我要将 GPIOC_5 的电平状态拉低,那么方法是。
  1. GPIO_ResetBits(GPIOC, GPIO_Pin_5);
复制代码
如果想要使用某个IO口的备用功能,只要设置功能引脚备用功能选择寄存器(AFR)就可以了。在固件库中操作该寄存器的设置的PAD_AFConfig函数。
  1. void LED_Configuration(void)
复制代码


图3.2.1 W7500EVB EGBLED原理图

3.3 软件设计
在W7500EVB RGB LED工程里可,我们引入了 bsp_gpio.c 文件以及头文件bsp_gpio.h。
下面我们首先打开bsp_gpio.c 文件,代码如下:
  1. void LED_Configuration(void)
复制代码
LEDR_H,LEDG_H和LEDB_H定义在bsp_gpio.h中:
  1. #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 实验结果










回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 03:40 , Processed in 0.053780 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表