OpenEdv-开源电子网

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

STM32定时器四通道捕获求助

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2011-7-5
在线时间
1 小时
发表于 2012-9-2 17:02:13 | 显示全部楼层 |阅读模式
 想用STM32的定时器的捕获功能。我用通道1就成功捕获了方波信号。我的设计是想用一个定时器捕获四个通道的,但我一直不成功。我认真研究了STM32用户手册,卡在了从模式控制寄存器TIMX_SMCR,搞不懂从模式选择,触发输入,求设置寄存器的思路
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-2 21:54:36 | 显示全部楼层
先成功一个通道了再说。
本论坛有网友发过例子,你找找看先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2011-7-5
在线时间
1 小时
 楼主| 发表于 2012-9-3 00:47:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
好滴 我用三个定时器才捕获到三路信号 现在是想用一个定时器捕获四路信号
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-3 10:16:26 | 显示全部楼层
那参照着改就OK了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-9-3 11:01:12 | 显示全部楼层
回复【3楼】lianzhonghe:
---------------------------------
#include"CAM.h"
#define TIMER TIM2

void init_tim2_cam(u16 psc, u16 arr, u8 way, u8 dir)
{
RCC->APB1ENR |= 1 << 0;   //使能定时器2时钟
RCC->APB2ENR |= 1 << 2; //使能PortA

    switch (way)
{
case 1:
GPIOA->CRL &= 0xfffffff0;
GPIOA->CRL |= 0x00000008;
break;
case 2:
GPIOA->CRL &= 0xffffff00;
GPIOA->CRL |= 0x00000088;
break;
case 3:
GPIOA->CRL &= 0xfffff000;
GPIOA->CRL |= 0x00000888;
break;
case 4:
GPIOA->CRL &= 0xffff0000;
GPIOA->CRL |= 0x00008888;
break;
}

TIMER->SC = psc;
TIMER->ARR = arr;

switch (way)
{
case 4:
TIMER->CCMR2 |= 1 << 8;
if (dir == 0)
TIMER->CCER |= 1 << 13; //下降沿捕获
else
    TIMER->CCER &= ~(1 << 13); //上升沿捕获
TIMER->CCER |= 1 << 12;
TIMER->DIER |= 1 << 4;
case 3: //CCR3 A2
TIMER->CCMR2 |= 1 << 0;
if (dir == 0)
TIMER->CCER |= 1 << 9; //下降沿捕获
else
    TIMER->CCER &= ~(1 << 9); //上升沿捕获
TIMER->CCER |= 1 << 8;
TIMER->DIER |= 1 << 3;
case 2: //CCR2 A1
TIMER->CCMR1 |= 1 << 8; //CCR2配置通道方向:输入
if (dir == 0)
TIMER->CCER |= 1 << 5; //下降沿捕获
else
    TIMER->CCER &= ~(1 << 5); //上升沿捕获
TIMER->CCER |= 1 << 4; //CCR2通道捕获使能
TIMER->DIER |= 1 << 2; //CCR2通道允许捕获中断
case 1: //>CCR1 A0
TIMER->CCMR1 |= 1 << 0; //CCR1配置通道方向:输入
if (dir == 0)
TIMER->CCER |= 1 << 1; //下降沿捕获
else
    TIMER->CCER &= ~(1 << 1); //上升沿捕获
TIMER->CCER |= 1 << 0;     //CCR1捕获使能
TIMER->DIER |= 1 << 1;  //CCR1通道允许捕获中断
break;
}
TIMER->DIER |= 1 << 0;     //允许更新中断
MY_NVIC_Init(1, 2, TIM2_IRQChannel, 2);     //中断
TIMER->CR1 = 0x01;    //使能定时器
TIMER->SR &= ~(1 << 0);
}


以前写的头文件 可以配置定时器2的四路捕获,你参考下嘛,可以正常工作的、
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-9-3 11:02:31 | 显示全部楼层
psc是分频, arr是重载值, way是几路 可以是1-4路, dir是哪个跳变沿捕获                                        
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2011-7-5
在线时间
1 小时
 楼主| 发表于 2012-9-17 21:55:52 | 显示全部楼层
回复【6楼】lsj9383:
---------------------------------
多谢大神分享 小弟照做之后采集回来的频率不对啊 我捕获中断处理程序是读一次捕获寄存器的值,你捕获中断函数中是怎么样处理的 盼望回复 感激不尽
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-9-17 22:46:44 | 显示全部楼层
试一下单通道的可以不,捕获频率???需要两个通道吧,这样一个定时器能捕获两个信号
努力,前进。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2011-7-5
在线时间
1 小时
 楼主| 发表于 2012-9-17 22:53:09 | 显示全部楼层
回复【8楼】5498折戟沉沙:
---------------------------------
我就是想用来捕获信号的周期,从而测频率。定时器有四个捕获通道,我一个通道的信号就可以捕获成功,多通道的话我不知道怎么设置
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2012-10-19
在线时间
0 小时
发表于 2013-7-4 22:24:22 | 显示全部楼层
楼主,你的一个定时器同时捕获四路高电平的实验成功了吗?我现在也遇到这个问题了。总感觉  TIM5CH1_CAPTURE_STA=0;//清空
TIM5CH1_CAPTURE_VAL=0;
 TIM_SetCounter(TIM5,0);
TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
         TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获
这句话阻碍了同时捕获的可能性。
望高手指点一下啊
回复 支持 反对

使用道具 举报

54

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2014-5-13
在线时间
66 小时
发表于 2014-5-13 16:12:47 | 显示全部楼层
原子哥,小弟也想通过TIM4来做4个捕获,现在遇到的问题是我只在CH1通道上加脉冲,中断程序也会进入了通道2的程序中。
程序如下:
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET) 
{
TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
if(IC2CaptureNumber == 0)
{
IC2ReadValue1 = TIM_GetCapture2(TIM4);
IC2CaptureNumber = 1;
}
else if(IC2CaptureNumber == 1)
{
IC2ReadValue2 = TIM_GetCapture2(TIM4); 

IC2CaptureNumber = 0;
}
}

if(TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET) 
{
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
if(IC1CaptureNumber == 0)
{
IC1ReadValue1 = TIM_GetCapture1(TIM4);
IC1CaptureNumber = 1;
}
else if(IC1CaptureNumber == 1)
{
IC1ReadValue2 = TIM_GetCapture1(TIM4); 

IC1CaptureNumber = 0;
}
}
if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
}
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-13 22:43:10 | 显示全部楼层
回复【11楼】jungle1989:
---------------------------------
怀疑是干扰.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2014-5-13
在线时间
66 小时
发表于 2014-5-14 09:32:58 | 显示全部楼层
怎么解决呢,不想用多个定时器来做啊。。。
回复 支持 反对

使用道具 举报

54

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2014-5-13
在线时间
66 小时
发表于 2014-5-14 10:32:09 | 显示全部楼层
问题解决了,测试CH1时,我用示波器测量CH2的波形,发现当我接触到引脚的时候,数据就正常了,没干扰了,于是,我就将引脚配置为下拉,再一全速,果然数据都对了。
回复 支持 反对

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-5-31
在线时间
0 小时
发表于 2014-6-18 10:26:06 | 显示全部楼层
回复【14楼】jungle1989:
---------------------------------
怎么解决的呢,能不能把代码给我参考一下
回复 支持 反对

使用道具 举报

20

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2014-3-23
在线时间
22 小时
发表于 2015-3-16 16:49:03 | 显示全部楼层
回复【14楼】jungle1989:
---------------------------------
求分享啊,我也是在研究一个定时器多个通道输入捕获,没法进行了,更新中断的溢出处理那
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-10-8
在线时间
0 小时
发表于 2015-4-13 17:32:56 | 显示全部楼层
回复【6楼】lsj9383:
---------------------------------
是四路吗?假如是四路捕获 第二个switch初始化不还只是配置了一路捕获吗?
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
0 小时
发表于 2015-7-16 23:04:53 | 显示全部楼层
回复【11楼】jungle1989:
---------------------------------
你好,你的那个各个通道的配置函数可以给我看一看么?我现在一直配不成功,,,
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2013-4-24
在线时间
35 小时
发表于 2016-4-26 14:59:01 | 显示全部楼层
真准备玩这个
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 16:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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