对外部脉冲进行计数
请问有谁使用过使STM32F140对外部脉冲进行计数,帮忙说一下方法呗.。。。计数最好使用计数器这样比较简单呵呵 这是个人的一点意见
我看到有人使用timer-A的外部时钟输入脚测脉冲,但具体不会操作,不知道有谁使用过这个功能
可以用定时器,输入设为外部输入就行了。
P1SEL |= 0x01; // P1.0TACLK input
TACTL = TASSEL_0 + MC_2 + TAIE +ID_0;// TACLK, contmode 开溢出中断 可以的 设置边沿检测 或者中断。
可以在中断函数里面进行计数。
使用 timer-A ,timer-B 就是太费了,用了之后,就不能在干别的了。
正点原子不是有写好的例程吗?可以参考啊
有很多方法实现
定时器、计数器、IO中断,都行
看脉冲频率了。
用io口中断就可以呀
如果频率太快的话 io口是反应不过来的
如果频率不高 就用io口的边沿触发就行 不过要防抖
可以使用电平进行计数在这种方式下 要不停的轮询io口状态了 使用普通io口的高低电平的中断就可以达到计数的目的 使用定时器的外部捕捉模式就可以对脉冲进行计数 应该使用TIMX的ETR方式,我的理解每个定时器都有一路外部计数端口 TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使用这一句时:使用系统时钟时 可以产生Update中断
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); // 使用这一句时 :用etr做时钟 就没法中断
/* TIM2 configuration */
TIM_TimeBaseStructure.TIM_Period = 0xffee; //
TIM_TimeBaseStructure.TIM_Prescaler = 0x0000; //分频系数(除数)
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000; //计数周期 参见手册
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);