STM32 TIM1 ETR计数外部脉冲数,怎么用中断方法实现?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 TIM1 ETR计数外部脉冲数,怎么用中断方法实现?相关的知识,希望对你有一定的参考价值。
STM32 TIM1 ETR计数外部脉冲数,实现计数到100个脉冲产生中断,求程序,谢谢!
参考技术A 你用tim1输入捕获功能计数多少个脉冲,等到了的话设置条件实现功能即可,输入捕获是计一个脉冲就进一次定时器中断的追问请问一下TIM1 ETR引脚能作为捕获的输入引脚吗?
参考技术B 外部触发输入引脚,如果用外部信号产生触发事件的话,信号就从这个脚进来。 参考技术C 关注这个问题关于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 TIM1 ETR计数外部脉冲数,怎么用中断方法实现?的主要内容,如果未能解决你的问题,请参考以下文章
用STM32定时器捕获做脉冲输入计数,一定要用ETR管脚嘛,其他的比如TIM_CH0可以吗