打印
[STM8]

捕获之不理解

[复制链接]
1560|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seeker2010|  楼主 | 2014-4-26 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近也在用捕获,有如下问题
1:可不可以同时捕获几路,(TIME1有四路),当发生捕获时,计数器是自动清0还是继承续往上计数直到65535,如是继续往上计数,那他下一个捕获到的数据是怎么得来的(我的理解,当上升沿捕获时,计数器会自动清0,接着开始计数到下一上升沿的到来),如我的理解是对的,因只有一个计时器,那就不能同时捕获几路了
2:怎么清捕获寄存器器,如使用UG清除,会影响到其它几路的捕获吗?
沙发
seeker2010|  楼主 | 2014-4-26 22:24 | 只看该作者
本帖最后由 seeker2010 于 2014-4-27 15:44 编辑

初始化
{
//TIME1 work at Capture ,用于遥控
        TIM1_PSCRH =0;                        //Set the Prescaler value
        TIM1_PSCRL =10;                        //(15分频+1)/11.0592mhz=1us计数一次
        TIM1_ARRH =0xff;                //黙认为0xFFFF
        TIM1_ARRL =0xff;                //计数器从复的从0-65535计数
//IC1F[3:0] IC1PSC[1:0] CC1S[1:0]
        TIM1_CCMR1 =3<<4|1<<0;        //滤波8,无预分频器,通道1,
//CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
        TIM1_CCER1 =1<<1|1<<0;        //下降沿触发,捕获使能
//BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE        
        TIM1_IER =1<<1;                        //Capture 1 interrupt enable
//ARPE CMS[1:0] DIR OPM URS UDIS CEN
        TIM1_CR1 |=1<<7|1<<0;        //开启计数
}

中断处理

        TIM1_EGR =1<<0;                //用软件更新的方式清计数器与预分频器,没开软件更新中断
        j =TIM1_CCR1H<<8;        //读计数值,先读高再读低
        j |=TIM1_CCR1L;
        if((j>768)&&(j<1791))//768us--1791us 按机器周期为1US计
              i =0;                        //标准1.12ms
        else if((j>1792)&&(j<2815))        //1792us--2815us
              i =1;                        //标准2.24ms
        else                                //连码标准108ms
       {        remote_degree=0,sampling_8bit=0,remote_delay=0;        //引导码9MS或结束码9MS
                if(code_backup)                        //remote_ok踩样OK标志
                {       if(++remote_speed>=6)        //5*108ms=500ms
                        {       remote_speed=0;
                                 remote_code =code_backup;//
                        }                        
               }
     }  

使用特权

评论回复
板凳
airwill| | 2014-4-26 22:32 | 只看该作者
可不可以同时捕获几路,             当然可以, 4个 CCR 可以捕获4路.
理解错误,                               捕获只是在捕获条件满足时, 将 CNT 的当前值放到 CCR 中, 不会清零 CNT.
清捕获寄存器,                        不需要这个操作

使用特权

评论回复
地板
seeker2010|  楼主 | 2014-4-26 22:35 | 只看该作者
本帖最后由 seeker2010 于 2014-4-27 16:08 编辑

谢谢,不清cnt那它下一个捕获值怎么得来,好比说,CNT发生第一次捕获是2000(cnt的数送给ccr),那第二次当cnt计到4050时捕获第二个脉冲为4500-2000=2050吗?

使用特权

评论回复
5
seeker2010|  楼主 | 2014-4-27 16:05 | 只看该作者
本帖最后由 seeker2010 于 2014-4-27 16:12 编辑
airwill 发表于 2014-4-26 22:32
可不可以同时捕获几路,             当然可以, 4个 CCR 可以捕获4路.
理解错误,                           ...


版主,你继续给解答下呀,我还完全没明白呢,谢谢

使用特权

评论回复
6
huzi2099| | 2014-4-27 19:06 | 只看该作者
不清0的

使用特权

评论回复
7
huzi2099| | 2014-4-27 19:09 | 只看该作者
seeker2010 发表于 2014-4-26 22:35
谢谢,不清cnt那它下一个捕获值怎么得来,好比说,CNT发生第一次捕获是2000(cnt的数送给ccr),那第二次当cnt计 ...

减完求绝对值,条件是测量时间小于计数周期.
如果大于一个计数周期用更新中断计数

使用特权

评论回复
8
airwill| | 2014-4-27 19:37 | 只看该作者
seeker2010 发表于 2014-4-26 22:35
谢谢,不清cnt那它下一个捕获值怎么得来,好比说,CNT发生第一次捕获是2000(cnt的数送给ccr),那第二次当cnt计 ...

那第二次当cnt计到4050时捕获第二个脉冲.
CCR 就等于 4050. 原来的值被冲掉

使用特权

评论回复
9
seeker2010|  楼主 | 2014-4-27 21:38 | 只看该作者
huzi2099 发表于 2014-4-27 19:09
减完求绝对值,条件是测量时间小于计数周期.
如果大于一个计数周期用更新中断计数 ...

是不是可以这样理解,在当前发生一次捕获时,当前的捕获值2000也就是cnt值是下一个捕获的起点,当第二次捕获发生时cnt是4050而送入捕获寄存器的值是4050-2000=2050,但是如果第二次捕获发生时cnt计到65535后从新从0开始加,这时才发生捕获,那这样第二次的捕获周期怎么得来

使用特权

评论回复
10
huzi2099| | 2014-4-27 21:51 | 只看该作者
seeker2010 发表于 2014-4-27 21:38
是不是可以这样理解,在当前发生一次捕获时,当前的捕获值2000也就是cnt值是下一个捕获的起点,当第二次 ...

如果65535直接取反就是取负值,如果模数不为2N次幂则加模数后再减

使用特权

评论回复
11
usst_mcclane| | 2014-4-30 10:50 | 只看该作者
恩,学习了

使用特权

评论回复
12
香水城| | 2014-4-30 13:44 | 只看该作者
seeker2010 发表于 2014-4-27 21:38
是不是可以这样理解,在当前发生一次捕获时,当前的捕获值2000也就是cnt值是下一个捕获的起点,当第二次 ...

比如TIM的通道1上的信号,第一次捕获时,把当前CNT的值,就是这里的2000硬件保存到CCR1寄存器中;

CTN继续自加;

第二次捕获时发生时,把当前CNT,就是4050又硬件保存到CCR1寄存器中,把刚才CCR1中的2000就冲掉了。

你要计算两次捕获之间的时间间隔,就需要再下一次捕获到来之前,收到把2000保存到其他地方,等第二次捕获发生后,拿CCR1中的4050减去保存在其他地方的2000。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
seeker2010 + 1
13
seeker2010|  楼主 | 2014-5-6 21:21 | 只看该作者
第一次捕获得到一个波型的周期,而为了捕获下一个波型的周期,我必须要清掉cnt,不然得不出准确的周期,因只有一个time1,所以不能同时用四路捕获去捕获周期

使用特权

评论回复
14
huzi2099| | 2014-5-6 23:11 | 只看该作者
seeker2010 发表于 2014-5-6 21:21
第一次捕获得到一个波型的周期,而为了捕获下一个波型的周期,我必须要清掉cnt,不然得不出准确的周期,因只有 ...

如果你一定要清cnt就无解了,即便清了cnt捕获时间差仍然不能大于一个计数周期.
不需要清cnt的,更新中断时累加到高位计数就行了,捕获后和上次的数做减法,就这样!

使用特权

评论回复
15
拿起书本| | 2014-5-7 08:58 | 只看该作者
标记一下,正好要做个实验,估计要用到楼主所提的问题。

使用特权

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

本版积分规则

4

主题

39

帖子

0

粉丝