OpenEdv-开源电子网

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

用计数器计上升沿的个数,计数溢出后进入中断,怎样配置输入?不用输入捕获行么?

[复制链接]

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
发表于 2016-7-12 09:33:10 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-1-7
在线时间
54 小时
发表于 2016-7-12 09:33:11 | 显示全部楼层
外部中断或者定时器捕获都可以
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-12 09:47:09 | 显示全部楼层
直接外部中断,中断里面计数,计数到了处理
回复

使用道具 举报

11

主题

56

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-7
在线时间
48 小时
发表于 2016-7-12 10:09:15 | 显示全部楼层
void TIM1_Init(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//        TIM_ICInitTypeDef        TIM_ICInitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        TIM_DeInit(TIMx);
        TIM_TimeBaseStructure.TIM_Period=0xffff;
        TIM_TimeBaseStructure.TIM_Prescaler=0x00;
        TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);
        TIM_ITRxExternalClockConfig(TIMx,TIM_TS_ETRF);
  TIM_ETRClockMode2Config(TIMx, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 1);
        TIM_SetCounter(TIMx,0);
        TIM_ITConfig(TIMx,TIM_IT_Update, ENABLE);
        TIM_Cmd(TIMx,ENABLE);       
}
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-7-8
在线时间
11 小时
发表于 2016-7-12 10:15:16 | 显示全部楼层
不用输入捕获就用外部中断 配置一下引脚和EXIT_Init, 在中断函数里面计数
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 12:50:05 | 显示全部楼层
请问这样做为何不能计数?
void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
               

   
   GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
    TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; /*定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)
                                                                            使用的采样频率之间的分频比为1*/
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure); // Time base configuration  
   
  TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);
  TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 1);                           

}

int main(void)
{
        uint16_t CountPulse,CountTims;
    uint16_t i=0;       


    USART1_Config();
          TIM3_Configuration();
    TIM_SetCounter(TIM2, 0);   // 清零计数器CNT
          TIM3->CR1 |= 1;
    TIM_Cmd(TIM2,ENABLE);  
    SecCnt = 0;
    Secok = 0;

    while(1)
    {
        delay_ms(10);
            CountPulse = TIM_GetCounter(TIM2);        
                                               
            Secok = 0;
            if(++CountTims>=120)
            {
                                                                TIM_Cmd(TIM2,DISABLE);
                                                                printf("Pulse = %6d",CountPulse);                                                       
                                                                CountPulse = TIM_GetCounter(TIM2);        

                                                                if(++i>11)i=0;
                                                                TIM_SetCounter(TIM2, 0);   // 清零计数器CNT
                                                                TIM_Cmd(TIM2,ENABLE);  
                                                                SecCnt = 0;
                                                                Secok = 0;
                CountTims =0;
            }
                                               
    }
      
}
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 15:29:55 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-12 09:47
直接外部中断,中断里面计数,计数到了处理

可是就会一直不断进中断处理程序啊
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-12 15:32:39 | 显示全部楼层
cinney 发表于 2016-7-12 15:29
可是就会一直不断进中断处理程序啊

你上升沿很频繁么。
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 16:14:13 | 显示全部楼层

测高频的那种
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-12 16:16:45 | 显示全部楼层

多高,如果是M级别的,感觉STM32够呛
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 17:52:56 | 显示全部楼层
1M左右就好
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 17:53:14 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-12 16:16
多高,如果是M级别的,感觉STM32够呛

1M左右就好
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-12 18:48:27 | 显示全部楼层
本帖最后由 cinney 于 2016-7-12 19:26 编辑

如果用计数器,外部触发,计数上升沿,溢出后中断该怎么配置定时器呢?
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-7-8
在线时间
11 小时
发表于 2016-7-12 20:16:05 | 显示全部楼层
就是配置捕获通道就行了,这里拿TIM3的CC1通道为例
        TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1;                               
        TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM3_ICInitStructure.TIM_ICFilter = 0x0;                                               
        TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInit(TIM3, &TIM3_ICInitStructure);
        然后记得开捕获中断 在中断函数里计数
        TIM_ITConfig(TIM3, TIM_IT_Update|TIM_IT_CC1, ENABLE);
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-6
在线时间
12 小时
 楼主| 发表于 2016-7-13 19:42:46 | 显示全部楼层
已经做出来了,谢谢大家,测高频部分还是可以的
回复

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-3-17
在线时间
19 小时
发表于 2016-7-30 10:40:04 | 显示全部楼层
cinney 发表于 2016-7-13 19:42
已经做出来了,谢谢大家,测高频部分还是可以的

求分享,2223824114@qq.com
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-7-28
在线时间
12 小时
发表于 2017-8-7 10:56:53 | 显示全部楼层
我不是萌妹子 发表于 2016-7-12 10:09
void TIM1_Init(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

朋友您好。我是新手。
请问一下,我用TIM2产生了PWM波,想利用其它计时器比如TIM4进行计数,然后控制TIM2输出一定数量的脉冲,1.那我怎么配置TIM4呢?   2. TIM2需要怎么配置给TIM4输出信号吗?也就是怎么联系这两个定时器啊
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-20
在线时间
21 小时
发表于 2017-8-7 21:22:17 | 显示全部楼层
cinney 发表于 2016-7-13 19:42
已经做出来了,谢谢大家,测高频部分还是可以的

请问你是怎样做的,能不能分享下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 18:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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