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

[复制链接]

技术员

发表于 2018-3-9 17:36:54   672 查看 1 回复 显示全部楼层 倒序浏览
分享
W7500(W7500P)芯片简介:
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。

全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。

上一章,介绍了W7500 的 PWM 输出模式的使用方法,这一章,将向大家介绍W7500 的 PWM 输入捕获模式的使用。在本章中,将PWM作为输入捕获模式,另外在初始化PA10引脚,PA10引脚不断的改变自身的电平,利用PWM的捕获功能来捕获该引脚。
章分为如下几个部分:

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

技术员

发表于 2018-3-9 17:42:08    楼主|
第十章 PWM输入捕获试验
上一章,介绍了 W7500 的 PWM输出模式的使用方法,这一章,将向大家介绍W7500 的 PWM输入捕获模式的使用。在本章中,将PWM作为输入捕获模式,另外在初始化PA10引脚,PA10引脚不断的改变自身的电平,利用PWM的捕获功能来捕获该引脚。
章分为如下几个部分:
10.1 输入捕获简介
10.2 硬件设计
10.3 软件设计
10.4 下载验证

10.1 输入捕获简介
当外部输入信号改变时,PWM就会捕获该通道定时器的值。 该通道可以选择在上升沿捕获或下降沿捕获的方式。如果捕获中断被启用,当外部输入信号被切换时捕获中断就发生。定时器的值被保存在 Channel-n 捕获寄存器中,直到中断被清除捕获寄存器才会被重写,如图10.1.1所示:
                              
图10.1.1 带有中断清除的捕获事件
他的配置流程在上一章讲过了这里就不重复了。
可以调用PWM_CaptureModeInit函数来初始化PWM的捕获模式。
      
void PWM_CaptureModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CaptureModeInitTypeDef* PWM_CaptureModeInitStruct);

PWM_CaptureModeInit函数的是针对PWM捕获模式写的,所以配置他的结构体也不一样,下面看看他的结构体成员。
     
typedef struct
{
    uint32_t    PWM_CHn_PR;
    uint32_t    PWM_CHn_MR;
    uint32_t    PWM_CHn_LR;
    uint32_t    PWM_CHn_UDMR;
    uint32_t    PWM_CHn_PDMR;
    uint32_t    PWM_CHn_CMR;
}PWM_CaptureModeInitTypeDef;

可以看到这个结构体包含了如下几个成员:
参数PWM_CHn_PR设置预分频寄存器。
参数PWM_CHn_MR设置匹配寄存器。
参数PWM_CHn_LR设置边界寄存器。
参数PWM_CHn_UDMR设置上下模式寄存器。
参数PWM_CHn_PDMR设置周期模式寄存器。
参数PWM_CHn_CMR设置PWM的捕获模式寄存器。
针对 PWM通道0 的捕获模式初始化范例代码格式:
     
PWM_CaptureModeInitTypeDef PWM_CaptureModeInitStruct;
PWM_CaptureModeInitStruct.PWM_CHn_PR = 50;
PWM_CaptureModeInitStruct.PWM_CHn_LR = 10000;
PWM_CaptureModeInitStruct.PWM_CHn_UDMR = PWM_CHn_UDMR_UpCount;
PWM_CaptureModeInitStruct.PWM_CHn_PDMR = PWM_CHn_PDMR_Periodic;
PWM_CaptureModeInitStruct.PWM_CHn_CMR = PWM_CHn_CMR_RisingEdge;
PWM_CaptureModeInit(PWM_CH0, &PWM_CaptureModeInitStruct);
PWM_CHn_SetPEEER(PWM_CH0, PWM_CHn_PEEER_ExtEnable);
PWM_CHn_Start(PWM_CH0);  //开启定时器PWM_CHn_Start(PWM_CH0);

10.2 硬件设计
本实验用到的硬件资源有:
1)     UART2
2)     PWM
3)     杜邦线
10.3 软件设计
打开输入捕获实验,可以看到,工程和上一个实验没有什么改动。因为输入捕获代码是直接添加在 pwm.c 和 pwm.h 中。
在pwm.c 里面加入如下代码:
     
void PWM_Input(void)
{
  PWM_CaptureModeInitTypeDef PWM_CaptureModeInitStruct;
  PWM_CaptureModeInitStruct.PWM_CHn_PR = 50;
  PWM_CaptureModeInitStruct.PWM_CHn_LR = 10000;
  PWM_CaptureModeInitStruct.PWM_CHn_UDMR = PWM_CHn_UDMR_UpCount;  //递增计数
  PWM_CaptureModeInitStruct.PWM_CHn_PDMR = PWM_CHn_PDMR_Periodic; //循环模式
  PWM_CaptureModeInitStruct.PWM_CHn_CMR = PWM_CHn_CMR_RisingEdge; //上升沿捕获
  PWM_CaptureModeInit(PWM_CH0, &PWM_CaptureModeInitStruct);
  PWM_CHn_SetPEEER(PWM_CH0, PWM_CHn_PEEER_ExtEnable);  // 使能输出禁止输入使能
  PWM_CHn_Start(PWM_CH0);  //开启定时器
}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  PAD_AFConfig(PAD_PC, GPIO_Pin_0, PAD_AF2);
      
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  PAD_AFConfig(PAD_PA, GPIO_Pin_10, PAD_AF1);
}

   
在main.c 里面加入如下代码:
     
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  PAD_AFConfig(PAD_PC, GPIO_Pin_0, PAD_AF2);
      
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  PAD_AFConfig(PAD_PA, GPIO_Pin_10, PAD_AF1);
}

10.4 下载验证
在完成软件设计之后,将编译好的文件下载到W7500开发板上,再打开串口调试助手,选择对应的串口,然后可以看到PWM通道1捕获到的数据,如图10.4.1所示:
图10.4.1 W7500EVB PWM捕获试验结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /8 下一条

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

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区