OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 1787|回复: 2

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

[复制链接]

  离线 

27

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2018-2-23
在线时间
18 小时
发表于 2018-2-26 11:19:21 | 显示全部楼层 |阅读模式
正点原子公众号
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, 下载次数: 29

回复

使用道具 举报

  离线 

27

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2018-2-23
在线时间
18 小时
 楼主| 发表于 2018-2-26 11:27:45 | 显示全部楼层
第三章 RGB LED试验
W7500 最简单的外设莫过于 IO 口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启 W7500EVB 之旅, 通过本章的学习, 将了解到W7500的 IO 口作为输出使用的方法。 在本章中, 我们将通过代码控制W7500EVB 开发板上的RGBLED: 红绿蓝交替闪烁。
本章分为如下四个小节:
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函数来进行初始化。
[C] 纯文本查看 复制代码
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

GPIO_Init函数有两个参数, 第一个参数GPIOx是用来指定 GPIO,取值范围为 GPIOA~GPIOD。第二个参数GPIO_InitStruct是初始化参数结构体指针,结构体类型为GPIO_InitTypeDef。下面来看看这个结构体的定义。


[AppleScript] 纯文本查看 复制代码
typedef struct
{
    uint32_t GPIO_Pin; 
    GPIOMode_TypeDef GPIO_Mode; 
    GPIOPad_TypeDef GPIO_Pad; 
}GPIO_InitTypeDef;

这里我们通过初始化一个GPIO来讲解这个结构体成员变量的含义。
初始化GPIO的常用格式是。

[C] 纯文本查看 复制代码
GPIO_InitTypeDef GPIO_InitStructure; 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_Init(GPIOC, &GPIO_InitStructure); 
PAD_AFConfig(PAD_PC, GPIO_Pin_5, PAD_AF1);

上面代码的意思是设置GPIOC的第5个IO口为输出模式。从上面初始化代码可以看出,结构体GPIO_InitStructure 的第一个成员变量GPIO_Pin 用来设置是要初始化哪个或者哪些 IO口; 第二个成员变量 GPIO_Mode 是用来设置对应 IO 口的输出输入模式,这些模式是上面我们讲解的3个模式,在 W7500x_gpio.h中是通过一个枚举类型定义的。
[C] 纯文本查看 复制代码
typedef enum
{
    GPIO_Mode_IN    = 0x00, 
    GPIO_Mode_OUT   = 0x01, 
    GPIO_Mode_AF    = 0x02  
}GPIOMode_TypeDef;

如果想知道某个IO口的电平状态,可以读取DATA寄存器的某个位的状态就可以了。在固件库中操作DATA寄存器读取IO口数据,是通过GPIO_ReadInputDataBit函数实现的,使用起来是比较简单的:

[C] 纯文本查看 复制代码
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

比如我要读GPIOC_5 的电平状态,那么方法是。

[C] 纯文本查看 复制代码
GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_5);

返回值是1(Bit_SET)或者0(Bit_RESET);


如果想要某个IO口输出高电平状态或低电平状态,只要设置GPIO字节屏蔽访问寄存器的某个位就可以了。使用起来也是比较简单的。在固件库中操作GPIO字节屏蔽访问寄存器设置IO口,是通过GPIO_SetBits函数或者GPIO_ResetBits函数。

[C] 纯文本查看 复制代码
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

如果我要将GPIOC_5 的电平状态拉高,那么方法是:

[AppleScript] 纯文本查看 复制代码
GPIO_SetBits(GPIOC, GPIO_Pin_5);

如果我要将GPIOC_5 的电平状态拉低,那么方法是:

[C] 纯文本查看 复制代码
GPIO_ResetBits(GPIOC, GPIO_Pin_5);

如果想要使用某个IO口的备用功能,只要设置功能引脚备用功能选择寄存器(AFR)就可以了。在固件库中操作该寄存器的设置的PAD_AFConfig函数:

[C] 纯文本查看 复制代码
void PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF);



  
功能选择寄存器值
  

  
00(复位值)
  
  
01
  
  
10
  
  
11
  
  
功能引脚
  
  
PIN
  
  
Normal  Function
  
  
2nd  Function
  
  
3rd  Function
  
  
4th  Function
  
  
PA_00
  
  
29
  
  
GPIOA_0
  
  
GPIOA_0
  
  
PWM6/CAP6
  
  
  
  
PA_01
  
  
30
  
  
GPIOA_1
  
  
GPIOA_1
  
  
PWM7/CAP7
  
  
  
  
PA_02
  
  
31
  
  
GPIOA_2
  
  
GPIOA_2
  
  
CLKOUT
  
  
  
  
PA_03
  
  
49
  
  
SWCLK
  
  
GPIOA_3
  
  
  
  
  
  
PA_04
  
  
50
  
  
SWDIO
  
  
GPIOA_4
  
  
  
  
  
  
PA_05
  
  
33
  
  
SSEL0
  
  
GPIOA_5
  
  
SCL1
  
  
PWM2/CAP2
  
  
PA_06
  
  
34
  
  
SCLK0
  
  
GPIOA_6
  
  
SDA1
  
  
PWM3/CAP3
  
  
PA_07
  
  
35
  
  
MISO0
  
  
GPIOA_7
  
  
U_CTS1
  
  
PWM4/CAP4
  
  
PA_08
  
  
36
  
  
MOSI0
  
  
GPIOA_8
  
  
U_RTS1
  
  
PWM5/CAP5
  
  
PA_09
  
  
37
  
  
SCL0
  
  
GPIOA_9
  
  
U_TXD1
  
  
PWM6/CAP6
  
  
PA_10
  
  
38
  
  
SDA0
  
  
GPIOA_10
  
  
U_RXD1
  
  
PWM7/CAP7
  
  
PA_11
  
  
40
  
  
U_CTS0
  
  
GPIOA_11
  
  
SSEL1
  
  
  
  
PA_12
  
  
41
  
  
U_RTS0
  
  
GPIOA_12
  
  
SCLK1
  
  
  
  
PA_13
  
  
42
  
  
U_TXD0
  
  
GPIOA_13
  
  
MISO1
  
  
  
  
PA_14
  
  
43
  
  
U_RXD0
  
  
GPIOA_14
  
  
MOSI1
  
  
  
  
PA_15
  
  
44
  
  
GPIOA_15
  
  
GPIOA_15
  
  
  
  
  
  
PB_00
  
  
45
  
  
SSEL1
  
  
GPIOB_0
  
  
U_CTS0
  
  
  
  
PB_01
  
  
46
  
  
SCLK1
  
  
GPIOB_1
  
  
U_RTS0
  
  
  
  
PB_02
  
  
47
  
  
MISO1
  
  
GPIOB_2
  
  
U_TXD0
  
  
  
  
PB_03
  
  
48
  
  
MOSI1
  
  
GPIOB_3
  
  
U_RXD0
  
  
  
  
PB_04
  
  
24
  
  
TXEN
  
  
GPIOB_4
  
  
  
  
  
  
PB_05
  
  
25
  
  
COL
  
  
GPIOB_5
  
  
  
  
  
  
PB_06
  
  
16
  
  
RXD3
  
  
GPIOB_6
  
  
  
  
  
  
PB_07
  
  
17
  
  
RXCLK
  
  
GPIOB_7
  
  
  
  
  
  
PB_08
  
  
18
  
  
DUP
  
  
GPIOB_8
  
  
  
  
  
  
PB_09
  
  
19
  
  
TXCLK
  
  
GPIOB_9
  
  
  
  
  
  
PB_10
  
  
20
  
  
TXD0
  
  
GPIOB_10
  
  
  
  
  
  
PB_11
  
  
21
  
  
TXD1
  
  
GPIOB_11
  
  
  
  
  
  
PB_12
  
  
22
  
  
TXD2
  
  
GPIOB_12
  
  
  
  
  
  
PB_13
  
  
23
  
  
TXD3
  
  
GPIOB_13
  
  
  
  
  
  
PB_14
  
  
26
  
  
  
  
GPIOB_14
  
  
  
  
  
  
PB_15
  
  
27
  
  
  
  
GPIOB_15
  
  
  
  





回复 支持 反对

使用道具 举报

  离线 

27

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2018-2-23
在线时间
18 小时
 楼主| 发表于 2018-2-26 11:32:23 | 显示全部楼层
  
PC_00
  
  
53
  
  
U_CTS1
  
  
GPIOC_0
  
  
PWM0/CAP0
  
  
  
  
PC_01
  
  
54
  
  
U_RTS1
  
  
GPIOC_1
  
  
PWM1/CAP1
  
  
  
  
PC_02
  
  
55
  
  
U_TXD1
  
  
GPIOC_2
  
  
PWM2/CAP2
  
  
  
  
PC_03
  
  
56
  
  
U_RXD1
  
  
GPIOC_3
  
  
PWM3/CAP3
  
  
  
  
PC_04
  
  
57
  
  
SCL1
  
  
GPIOC_4
  
  
PWM4/CAP4
  
  
  
  
PC_05
  
  
58
  
  
SDA1
  
  
GPIOC_5
  
  
PWM5/CAP5
  
  
  
  
PC_06
  
  
51
  
  
GPIOC_6
  
  
GPIOC_6
  
  
U_TXD2
  
  
  
  
PC_07
  
  
52
  
  
GPIOC_7
  
  
GPIOC_7
  
  
U_RXD2
  
  
  
  
PC_08
  
  
1
  
  
PWM0/CAP0
  
  
GPIOC_8
  
  
SCL0
  
  
AIN7
  
  
PC_09
  
  
2
  
  
PWM1/CAP1
  
  
GPIOC_9
  
  
SDA0
  
  
AIN6
  
  
PC_10
  
  
3
  
  
U_TXD2
  
  
GPIOC_10
  
  
PWM2/CAP2
  
  
AIN5
  
  
PC_11
  
  
4
  
  
U_RXD2
  
  
GPIOC_11
  
  
PWM3/CAP3
  
  
AIN4
  
  
PC_12
  
  
5
  
  
AIN3
  
  
GPIOC_12
  
  
SSEL0
  
  
AIN3
  
  
PC_13
  
  
6
  
  
AIN2
  
  
GPIOC_13
  
  
SCLK0
  
  
AIN2
  
  
PC_14
  
  
7
  
  
AIN1
  
  
GPIOC_14
  
  
MISO0
  
  
AIN1
  
  
PC_15
  
  
8
  
  
AIN0
  
  
GPIOC_15
  
  
MOSI0
  
  
AIN0
  
  
PD_00
  
  
11
  
  
CRS
  
  
GPIOD_0
  
  
  
  
  
  
PD_01
  
  
12
  
  
RXDV
  
  
GPIOD_1
  
  
  
  
  
  
PD_02
  
  
13
  
  
RXD0
  
  
GPIOD_2
  
  
  
  
  
  
PD_03
  
  
14
  
  
RXD1
  
  
GPIOD_3
  
  
  
  
  
  
PD_04
  
  
15
  
  
RXD2
  
  
GPIOD_4
  
  
  
  
  

比如我要将GPIOC_5 的工作模式设置成GPIO模式我们可以对照上面的表格来设置。

[C] 纯文本查看 复制代码
PAD_AFConfig(PAD_PC, GPIO_PIN_5, PAD_AF1);


3.2 硬件设计

本章用到的硬件只有RGB LED。其电路在W7500 开发板上默认是已经连接好了的。LEDR 接 PA3,LEDG接 PC5,LEDB接PA4。所以在硬件上不需要动任何东西,如图3.2.1所示:

新建 Kankan JPEG 图像 (2).JPG


3.2.1 W7500EVB EGBLED原理图
3.3 软件设计W7500EVB RGB LED工程里可,我们引入了 bsp_gpio.c 文件以及头文件bsp_gpio.h
下面我们首先打开bsp_gpio.c 文件,代码如下:

[C] 纯文本查看 复制代码
void LED_Configuration(void) 
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* GPIO Configuration for red LED */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;            // Connecting GPIO_Pin_8(LED(R)) 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Set to GPIO Mode to Output Port
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  PAD_AFConfig(PAD_PA, GPIO_Pin_4, PAD_AF1);       // PAD Config - LED used 2nd Function
  
  /* GPIO Configuration for green LED */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;            // Connecting GPIO_Pin_9(LED(B)) 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Set to GPIO Mode to Output Port
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  PAD_AFConfig(PAD_PA, GPIO_Pin_3, PAD_AF1);       // PAD Config - LED used 2nd Function
  
  /* GPIO Configuration for blove LED */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;            // Connecting GPIO_Pin_5(LED(G)) 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Set to GPIO Mode to Output Port
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  PAD_AFConfig(PAD_PC, GPIO_Pin_5 , PAD_AF1);      // PAD Config - LED used 2nd Function
 
  LEDR_H; 
  LEDG_H; 
  LEDB_H; 
}

LEDR_HLEDG_HLEDB_H定义在bsp_gpio.h中:

[C] 纯文本查看 复制代码
#define LEDR_H   GPIO_SetBits(GPIOA, GPIO_Pin_4)
#define LEDR_L GPIO_ResetBits(GPIOA, GPIO_Pin_4) 

#define LEDG_H   GPIO_SetBits(GPIOC, GPIO_Pin_5) 
#define LEDG_L GPIO_ResetBits(GPIOC, GPIO_Pin_5) 

#define LEDB_H   GPIO_SetBits(GPIOA, GPIO_Pin_3) 
#define LEDB_L GPIO_ResetBits(GPIOA, GPIO_Pin_3)

该代码里面中的void LED_Configuration(void)函数就是用来配置 PA3、PA4和PC5 引脚作为输出模式。

在看看我们的main.c文件里的代码:
[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 开发板上之后,我们可以看到RGBLED灯的红绿蓝交替闪烁,如图3.4.1所示:

新建 Kankan JPEG 图像.JPG

3.4.1 实验结果






回复 支持 反对

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-6-24 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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