版主,请教一下定时器捕获问题。

zhuyonghua   2010-4-14 17:02 楼主
版主,请教一个问题。我用的是STM8S103K3的片子,由于是第一次使用ST单片机,所以很多的地方不明白。我现在用TIM2 的第三通道来捕获一个脉冲信号,并要把脉冲宽度读出来。我按着数据手册上一步一步的做,结果还是没有出来,能在进入捕获中断,但是就读不出TIM2_CCR3的值,每次读的是O.其配置方法如下:
1.
选择有效输入端:例如TIM1_CCR1连接到TI1输入,所以写入TIM1_CCR1寄存器中的CC1S=01,此时通道被配置为输入,并且TIM1_CCR1寄存器变为只读。
2.
根据输入信号TIi的特点,可通过配置TIM1_CCMRi寄存器中的ICiF位来设置相应的输入滤波器的滤波时间。假设输入信号在最多5个时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期;因此我们可以连续采样8次,以确认在TI1上一次真实的边沿变换,即在TIMi_CCMR1寄存器中写入IC1F=0011,此时,只有连续采样到8个相同的TI1信号,信号才为有效(采样频率为fMASTER)。
3.
选择TI1通道的有效转换边沿,在TIM1_CCER1寄存器中写入CC1P=0(上升沿)。
4.
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIM1_CCMR1寄存器的IC1PS=00)。
5.
设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
6.
如果需要,通过设置TIM1_IER寄存器中的CC1IE位允许相关中断请求。
当发生一个输入捕获时:

当产生有效的电平转换时,计数器的值被传送到TIM1_CCR1寄存器。

CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除时,CC1OF也被置1。

如设置了CC1IE位,则会产生一个中断。

回复评论 (6)

程序配置如下:
TIM2 -> PSCR = 0X03;//预分频为1:8
TIM2 -> CCMR3 =  0B00110001;//配置采样频率与采样次数,采样时预分频,捕获通道。
TIM2 -> CCER2 = 0B00000001;//捕获上升沿,并使能。
TIM2 -> IER = 0B00001000;//使能中断。
点赞  2010-4-14 17:04
                                 可以参考固件库中的例子。
点赞  2010-4-14 17:11


后来我换了一种方案来做,我用外部端口电平变化(上升沿)中断来做,先关闭中断,读取TIM2计数值,再对其清零,在开启TIM2用来计数内部时钟周期,再等下一次上升沿的到来。结果还是为零。郁闷中呢
点赞  2010-4-14 17:14
                                 你配置时基单元了吗?还是先看看固件库中的例子吧。
点赞  2010-4-14 17:31
今晚我有固件库的例子来做,结果还是一样。
TIM2_ICInit(TIM2_CHANNEL_3 ,TIM2_ICPOLARITY_RISING,
        TIM2_ICSELECTION_DIRECTTI,TIM2_ICPSC_DIV1,3);
TIM2_CCxCmd(TIM2_CHANNEL_3, ENABLE);
然后我在主程序里读
CatchSignalCnt = TIM2_GetCapture3();
结果还是为0;看来自己太笨了,又没有太多的时间去看手册,我不知这样配置有没有问题,方波信号是通过TIM4模拟到PA3口(TIM2_CHANNEL_3);
点赞  2010-4-14 23:24

7楼 mpc 

                                 你配置时基单元了吗?
点赞  2010-4-15 09:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复