OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16371|回复: 5

求助STM8的TIM1的输入捕获问题

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-4-13
在线时间
3 小时
发表于 2014-7-5 16:57:26 | 显示全部楼层 |阅读模式
5金钱
不知哪位大神知道STM8的TIM1的输入捕获是如何配置的,现在正在研究超声波测距。需要用TIM1的输入捕获去获得声波返回的高电平时间,由于担心用外部中断加定时器的方法带来的误差太大,而且麻烦。于是就想到了使用TIM1_CH1的输入捕获。但是遇到了一系列的问题,查了好多资料,基本还是在原地打转,求助。
我现在的疑问注主要有以下几点:
1、我设置的TIM1输入捕获是采用通道一,上升沿触发,采用滤波后的定时器输入1和复位模式。我现在不清楚,这个到底是当外部的上升沿信号来之后就触发中断,还是上升沿来后只是触发计数器开始计数,等到高电平结束到下降沿才触发中断的?
2、我现在在中断函数里直接就是读取TIM1的捕获1的寄存器值,但是为何每次的数据都是不一样,而且很不稳定。
3、不知原子哥有没有空,帮忙解决下,附上我的TIM1程序和中断处理程序。
void TIM1_InPut_Config(void)
{
     TIM1_DeInit();
     TIM1_PrescalerConfig(0x063f, TIM1_PSCRELOADMODE_IMMEDIATE);              //分频1599+1
     TIM1_CCER1 = 0x00;                //禁止输入捕获1
     TIM1_CCMR1 =0x01;                // ch1映射到ti1fp1
     TIM1_CCER1 &= 0xfd;               //ch1 上升沿触发
     TIM1_SMCR =0X54;                //选源触发源和触发方式 复位
     TIM1_IER |=0x02;                 //使能中断ch1
     TIM1_CCER1 |= 0x01;            //使能输入捕获1,2
     TIM1_Cmd(ENABLE);              //使能定时器1
}
中断处理:
@far @interrupt void TIM1_sever (void)
{  
       TIM1_Value=0;           //清零TIM1_Value变量,该变量用于读取捕获1值,当作中继
   if( SET == TIM1_GetITStatus(TIM1_IT_CC1))   //判断捕获1标记位是否为一
   { 
       TIM1_Value= TIM1_GetCapture1();    //读取捕获1值
       TIM1_SetCompare1(0x0000);      //清空捕获1值的寄存器,貌似没用
       TIM1_ClearITPendingBit(TIM1_IT_CC1);  //清空捕获1标记位
       TIM1_Value/=10000;  //读取后的数据除以10000,定时器处分频1600,得到秒的数据
       TIM1_Value*=17000;//*34000/2    //乘以声音的速度除以2.。此处单位为厘米
    }
       TIM1_ClearITPendingBit(TIM1_IT_UPDATE); 
        //清除中断标记位 
}

以上的程序可以进中断,,但是TIM1_Value都出来的数据每次都在变,差异还很大,,求救。。。谢谢。。。。。。。。。。。。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-5 21:25:56 | 显示全部楼层
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2014-7-23
在线时间
0 小时
发表于 2014-8-15 15:45:46 | 显示全部楼层
你搞点这个问题了吗。我也遇到这个困难啊。
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-8-18
在线时间
0 小时
发表于 2014-8-19 11:29:40 | 显示全部楼层
捕获的时候读取的数据只是当前的数据,需要跟开始的数据进行运算。
本人做的遥控通道脉冲宽度测量挺准的。
活到老,学到老!
回复

使用道具 举报

8

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-11-6
在线时间
7 小时
发表于 2015-8-13 10:52:50 | 显示全部楼层
你用的STM8哪个型号?捕获IO口怎么初始化的?
回复

使用道具 举报

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
发表于 2015-11-25 16:14:30 | 显示全部楼层
 

 
个人认为应加上这条指令   ;  TIM1_SetCounter(0x0000);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表