STM32F103_频率计

注意:脉冲波频率检测Capture_Init(u16 arr,u16 psc) 初始化要根据检测脉冲的频率范围设置arr和psc,假设系统时钟72Mhz,arr=2000,psc=(7200-1),即分频器分频后计数频率为1Khz,计数重装值为2000,计一个数用1ms,计满2000个数需要2s时间,则此配置下能采集0.5hz~1Khz的脉冲。这里设置脉冲上升沿触发中断,中断服务函数把计数值取出并清零。


/***************输入捕获频率计**************/

void Capture_Init(u16 arr,u16 psc) 

//此部分需手动修改 IO口设置   
RCC->APB2ENR|=1<<0;    // 辅助功能IO时钟开启  
RCC->APB1ENR|=1<<2;       //TIM4 时钟使能  
RCC->APB2ENR|=1<<3;    //使能PORTB时钟  
   
TIM4->ARR=arr;  //设定计数器自动重装值     
TIM4->PSC=psc;  //预分频器, 

GPIOB->CRL&=0XF0FFFFFF;//PB6    
GPIOB->CRL|=0X04000000;//设置为输入        
GPIOB->ODR|=1<<6;//PB6 上拉 
  
TIM4->SMCR|= 1<<7; //MSM=1 主/从模式  
TIM4->SMCR|= 5<<4; //TS=101 触发选择  
TIM4->SMCR|= 4<<0; //SMS=100 复位模式 

TIM4->CCMR1|=1<<0;//CC1S=01 选择输入端   
TIM4->CCMR1|=3<<4; //IC1F=0011配置输入滤波器 
TIM4->CCER|=0<<1; //CC1P=0 选择有交转换边沿 
TIM4->CCMR1|=0<<2; //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   

//定时器4中断服务程序  
void TIM4_IRQHandler(void) 
{           
IC2Value = TIM4->CCR1;//读取CCR1也可以清CC1IF标志位 
TIM4->SR&=~(1<<1);//清除中断标志位 
}

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值