关于使用STM32单片机完成脉冲计数功能的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于使用STM32单片机完成脉冲计数功能的问题相关的知识,希望对你有一定的参考价值。

如题,想需要使用STM32单片机完成脉冲计数功能,被计数的脉冲是每隔50ms左右发送一组脉冲群,我需要记录这组脉冲群的频率和脉宽,脉冲群计数结束后隔50ms左右后再重新对下一组脉冲群进行计数。最好有个例程供参考,谢谢!

interrupt 外部中断ISR()

定时器打开
T++;

interrupt 定时器中断()

关定时器;
time = 读取定时器值;
定时器初始化归零;

time 就是脉冲宽度;T就是脉冲数
具体实现就将我的汉字版翻译成你的C就行
参考技术A 用定时器计数,用中断就好,例程里有自己参考一下就好了。

关于STM32F103 脉冲计数的问题

//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的值就可以知道脉冲的个数了。

以上是关于关于使用STM32单片机完成脉冲计数功能的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于STM32F103 脉冲计数的问题

关于STM32单片机PWM输出实验定时器的问题

STM32 TIM1 ETR计数外部脉冲数,怎么用中断方法实现?

STM32f407定时器用为编码器接口模式采集脉冲,但单片机供电后,复用引脚直接有电压输出

关于stm32的计数器???

STM32F10X-定时器/计数器