PWM输入捕获代码讲解
大家好,我终于出现了,由于要开始准备考研的复习,再加上32的学习已经学到了摄像头,就鸽了几天。
好,话不多说,我们直接进入正题。
这个实验其实就是用于测量PWM信号,同一个定时器不能同时使用输入捕获和输出比较,因此这个实验中我们使用通用定时器来产生信号,高级定时器来捕获信号。
与之前的实验一样,在例程中的User文件夹下添加bsp_AdvanceTim.c和bsp_AdvanceTim.h文件。 这里注意一点,要把advance和general文件夹。这是因为使用不同的定时器时,对应的GPIO是不一样的。
我们先对PIO进行初始化:
static void ADVANCE_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);
}
这里注意一点,要把GPIO设置为IN_FLOATING浮空输入,用来捕获方波。
再移植例程中的.h文件:
#ifndef __BSP_ADVANCETIME_H
#define __BSP_ADVANCETIME_H
#include "stm32f10x.h"
#define ADVANCE_TIM TIM1
#define ADVANCE_TIM_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADVANCE_TIM_CLK RCC_APB2Periph_TIM1
//输入捕获能捕获到的最小频率为72M/{(ARR+1)*(PSC+1)}
#define ADVANCE_TIM_PERIOD (1000-1)
#define ADVANCE_TIM_PSC (72-1)
//中断相关宏定义
#define ADVANCE_TIM_IRQ TIM1_CC_IRQn
#define ADVANCE_TIM_IRQHandler TIM1_CC_IRQHandler
//TIM1输入捕获通道一
#define ADVANCE_TIM_CH1_GPIO_CLK RCC_APB2Periph_GPIOA
#define ADVANCE_TIM_CH1_PORT GPIOA
#define ADVANCE_TIM_CH1_PIN GPIO_Pin_8
#define ADVANCE_TIM_IC1PWM_CHANNEL TIM_Channel_1
void ADVANCE_TIM_Init(void)