第十章 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所示:
他的配置流程在上一章讲过了这里就不重复了。 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通道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 硬件设计打开输入捕获实验,可以看到,工程和上一个实验没有什么改动。因为输入捕获代码是直接添加在 pwm.c 和 pwm.h 中。 在main.c 里面加入如下代码: - int main()
- {
- /* 炜世科技—WIZnet W7500官方代理商,全程技术支持,价格绝对优势!*/
- SystemInit(); /* 系统内部时钟初始化 */
- delay_init(); /* 系统滴答时钟配置*/
- S_UART_Init(115200); /* 初始化串口通信:115200@8-n-1*/
- PWM_Input(); /* PWM 捕获模式初始化 */
-
- printf("PWM捕获测试\r\n");
- while(1)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_10);
- delay_ms(1000);
- GPIO_ResetBits(GPIOA, GPIO_Pin_10);
- delay_ms(1000);
- printf("CR=%d\r\n",PWM_CHn_GetCR(PWM_CH0));
- }
- }
复制代码 10.4 下载验证 图10.4.1 W7500EVB PWM捕获试验结果
|