//TIM2_CH2 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数 计数器功能
void TIM2_ETR_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<0; //TIM2时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL &= 0XFFFFFF0F; //
GPIOA->CRL |= 0X00000080; //PA1下拉输入
GPIOA->ODR |= 0<<1;
TIM2->ARR=arr; //设定计数器自动重装值
TIM2->PSC=psc; //预分频器不分频
TIM2->CCMR1|=1<<8; //CC2S=01 选择输入端 IC1映射到TI2上
TIM2->CCMR1|=0<<12; //IC2F=0000 配置输入滤波器 以Fck_int采样
TIM2->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频
TIM2->CCER |=0<<5; //CC2P=0 上升沿捕获
TIM2->SMCR |=0X07<<0; //SMS =111
TIM2->SMCR |=0X06<<4; //TS =110
TIM2->CR1 |= 0x01; //使能计数器1
}
首先我们要先明白,其实定时器就是在对时钟脉冲的计数的累加,因为定时器的每个时钟脉冲都是固定并且是可设置,那么当累加到一定程度的数值时候,再去乘以对应的脉冲宽度,就能计算出脉冲时间了。那么脉冲计数的道理跟这个一样,我们只需要将内部时钟源改为外部时钟,M3的外部时钟有两种模式1和模式2的区别在于极性选择和分频器,对于比较稳稳定并且连续的脉冲,建议选择ETR 触发;对于其他情况可以选择TIMX_CHX 捕获通道对脉冲进行捕获。
在STM32中文参考手册中,同样给出了配置步骤:
对于脉冲计数,我们不对采集到的脉冲进行计数,ARR重载寄存器的值配置为最大65535,否则计数器CNT一旦到达这个值就会从0开始。最终只需读取CNT的值就可以知道脉冲的个数了。