打印

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

[复制链接]
3055|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nobleyinhuan|  楼主 | 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位,则会产生一个中断。
沙发
nobleyinhuan|  楼主 | 2010-4-14 17:04 | 只看该作者
程序配置如下:
TIM2 -> PSCR = 0X03;//预分频为1:8
TIM2 -> CCMR3 =  0B00110001;//配置采样频率与采样次数,采样时预分频,捕获通道。
TIM2 -> CCER2 = 0B00000001;//捕获上升沿,并使能。
TIM2 -> IER = 0B00001000;//使能中断。

使用特权

评论回复
板凳
香水城| | 2010-4-14 17:11 | 只看该作者
可以参考固件库中的例子。

使用特权

评论回复
地板
nobleyinhuan|  楼主 | 2010-4-14 17:14 | 只看该作者
本帖最后由 nobleyinhuan 于 2010-4-14 17:16 编辑

后来我换了一种方案来做,我用外部端口电平变化(上升沿)中断来做,先关闭中断,读取TIM2计数值,再对其清零,在开启TIM2用来计数内部时钟周期,再等下一次上升沿的到来。结果还是为零。郁闷中呢

使用特权

评论回复
5
香水城| | 2010-4-14 17:31 | 只看该作者
你配置时基单元了吗?还是先看看固件库中的例子吧。

使用特权

评论回复
6
nobleyinhuan|  楼主 | 2010-4-14 23:24 | 只看该作者
今晚我有固件库的例子来做,结果还是一样。
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);

使用特权

评论回复
7
香水城| | 2010-4-15 09:46 | 只看该作者
你配置时基单元了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

34

帖子

1

粉丝