原子大哥最近用STM32作频率计 但是读出来的计数值不对啊 您看看问题出在那
void PINLV_Init(void)//(u16 arr,u16 psc)
{
//此部分需手动修改IO 口设置
RCC->APB1ENR|=1<<2; //TIM4 时钟使能
RCC->APB2ENR|=1<<3; //PB 口时钟使能PB6
GPIOB->CRL&=0XF0FFFFFF;//PB6 输出
GPIOB->CRL|=0X04000000;//复用功能输入
GPIOB->ODR|=1<<6; //PB6 上拉
TIM4->SMCR|=0x00D6;//MSM=1 主/从模式TS=101触发选择SMS=110触发模式
TIM4->CCMR1|=1<<0; //CC1通道被配置为输入,IC1映射在TI1上 CH1 输入捕获模式
TIM4->CCMR1|=3<<4; //IC1F=0011配置输入滤波器
TIM4->CCER&=0XFFFFFFFD; //CC1P置0,上升沿触发
TIM4->CCMR1&=0XFFFFFFF3; //IC1PS=00,预分频禁止
TIM4->CCER|=1<<0; //CC1E置1,允许捕获计数器的值到捕获寄存器中
TIM4->DIER|=1<<1; //允许更新捕获中断
TIM4->CR1|=0x01; //使能定时器4
MY_NVIC_Init(1,3,TIM4_IRQChannel,2);//抢占1,子优先级3,组2
}
中断服务函数
void TIM4_IRQHandler(void)
{
CAPi=TIM4->CCR1;//读取CCR1也可以清CC1IF标志位
TIM4->SR&=0XFFFFFFFD;//清除中断标志位
TIM4->DIER&=0XFFFFFFFD; //禁止更新捕获中断
TIM4->CR1&=0XFFFE; //禁止定时器4
}
我在采集同频率时每次的CAPi的值采出来都不同
|