OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4309|回复: 2

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

[复制链接]

28

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-2-23
在线时间
37 小时
发表于 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, 下载次数: 61

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-2-23
在线时间
37 小时
 楼主| 发表于 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函数来进行初始化。
[mw_shl_code=c,true]void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);[/mw_shl_code]

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


[mw_shl_code=applescript,true]typedef struct
{
    uint32_t GPIO_Pin;
    GPIOMode_TypeDef GPIO_Mode;
    GPIOPad_TypeDef GPIO_Pad;
}GPIO_InitTypeDef;
[/mw_shl_code]
这里我们通过初始化一个GPIO来讲解这个结构体成员变量的含义。
初始化GPIO的常用格式是。

[mw_shl_code=c,true]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);
[/mw_shl_code]

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

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

[mw_shl_code=c,true]uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);[/mw_shl_code]

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

[mw_shl_code=c,true]GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_5);[/mw_shl_code]

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


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

[mw_shl_code=c,true]void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
[/mw_shl_code]

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

[mw_shl_code=applescript,true]GPIO_SetBits(GPIOC, GPIO_Pin_5);[/mw_shl_code]

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

[mw_shl_code=c,true]GPIO_ResetBits(GPIOC, GPIO_Pin_5);[/mw_shl_code]

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

[mw_shl_code=c,true]void PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF);[/mw_shl_code]



  
功能选择寄存器值
  

  
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
  
  
  
  





回复 支持 反对

使用道具 举报

28

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-2-23
在线时间
37 小时
 楼主| 发表于 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模式我们可以对照上面的表格来设置。

[mw_shl_code=c,true]PAD_AFConfig(PAD_PC, GPIO_PIN_5, PAD_AF1);[/mw_shl_code]


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 文件,代码如下:

[mw_shl_code=c,true]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;
}
[/mw_shl_code]
LEDR_HLEDG_HLEDB_H定义在bsp_gpio.h中:

[mw_shl_code=c,true]#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)
[/mw_shl_code]

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

在看看我们的main.c文件里的代码:
[mw_shl_code=c,true]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);
  }
}
[/mw_shl_code]
3.4 下载验证

程序成功下载到W7500EVB 开发板上之后,我们可以看到RGBLED灯的红绿蓝交替闪烁,如图3.4.1所示:

新建 Kankan JPEG 图像.JPG

3.4.1 实验结果






回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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