打印
[STM32F4]

定时器捕获脉冲计数

[复制链接]
2270|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tobyking|  楼主 | 2015-5-21 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tobyking 于 2015-5-21 17:00 编辑

各位大侠,下面是小弟的程序,小弟初学者,刚用定时器没几天,刚学会产生PWM波形, 看看我的为啥检测不到脉冲的输入呢?
我用TIM3产生PWM波形,直接输入到TIM4的CH2,想让pulse_numb_min = TIM_GetCapture2(TIM4)收集到一些脉冲数量,请问我要怎么改?

unsigned int pulse_numb_min=0,pulse_count;

/* Private variables ---------------------------------------------------------*/
TIM_ICInitTypeDef  TIM_ICInitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
/* Private function prototypes -----------------------------------------------*/
void RCC_Config(void);
void GPIO_Config(void);
void NVIC_Config(void);

//void LED_Configuration(void);

/************************************************************/


//extern u8 CAPTURE_STA;                           


int main(void)

{
        
  /* System Clocks Configuration */
  RCC_Config();

  /* NVIC configuration */
  NVIC_Config();

  /* Configure the GPIO ports */
  GPIO_Config();
        
  TIM3_GPIO_Config();//PWM²¨ÐÎÊä³ö¹Ü½ÅÅäÖÃ

        TIM3_Mode_Config(222,121);//˫·PWM²¨ÐβúÉú£¬Õ¼¿Õ±ÈÉèÖÃ
        
        LED_Configuration( );
        
  TIM_DeInit(TIM4);
  
  TIM_TimeBaseStructure.TIM_Period = 999;    //
  TIM_TimeBaseStructure.TIM_Prescaler = 83;  //1MHz
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//ͨµÀ2
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //ÉÏÉýÑØ´¥·¢
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;//²»ÓÃÂ˲¨Æ÷
        
  TIM_ICInit(TIM4, &TIM_ICInitStructure);

  //´¥·¢Æ÷TIM4
  TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); //Ñ¡ÔñIC2ΪʼÖÕ´¥·¢Ô´
  TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);//TIM´Óģʽ£º´¥·¢ÐźŵÄÉÏÉýÑØÖØгõʼ»¯¼ÆÊýÆ÷ºÍ´¥·¢¼Ä´æÆ÷µÄ¸üÐÂʼþ
  TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); //Æô¶¯¶¨Ê±Æ÷µÄ±»¶¯´¥·¢
  
  /* TIM enable counter */
  TIM_Cmd(TIM4, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);//ʹÄÜÖжÏ
        
  
                while( 1 )
                                {
                                   
                                         
                                        if(pulse_numb_min >= 50 )
                                        LED1_OFF;
                                }
        

   
        }


////////////////////
//ÒÔÉÏÊÇÖ÷³ÌÐò²¿·Ö//
////////////////////

/************ÖжÏÀïÃæ×öµÄÊÂÇé**************/

extern unsigned int pulse_numb_min;

void TIM4_IRQHandler(void)
{
               

/******************************************************************************************/               

                if( TIM_GetITStatus(TIM4,TIM_FLAG_CC2)== SET )
                        {
                                
                                pulse_numb_min = TIM_GetCapture2(TIM4);
                 
                        TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);  //Çå³ýTIMµÄÖжϴý´¦Àíλ
                        }



}


void RCC_Config(void)
  {
  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  /* GPIOA and GPIOB clock enable */
  RCC_AHB2PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
   }

void GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* TIM4 channel 2 pin (PB.07) configuration */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//¸¡¿ÕÊäÈë
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM3 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
沙发
fanxsd| | 2015-5-21 16:51 | 只看该作者
楼主最好看看 官方的实例。还是比较的简单的。

使用特权

评论回复
板凳
tobyking|  楼主 | 2015-5-21 16:54 | 只看该作者
fanxsd 发表于 2015-5-21 16:51
楼主最好看看 官方的实例。还是比较的简单的。

我是初学者,刚学两个月呢,零基础,现在也只能勉强改改管脚配置,算算定时周期什么的

使用特权

评论回复
地板
luofeng2g| | 2015-5-21 17:17 | 只看该作者
按照例程来配置,一步步来!

使用特权

评论回复
5
fanxsd| | 2015-5-21 17:22 | 只看该作者
tobyking 发表于 2015-5-21 16:54
我是初学者,刚学两个月呢,零基础,现在也只能勉强改改管脚配置,算算定时周期什么的 ...

那更应该看了,自己搞懂了。是质的飞跃啊!

使用特权

评论回复
6
tobyking|  楼主 | 2015-5-21 17:25 | 只看该作者
fanxsd 发表于 2015-5-21 17:22
那更应该看了,自己搞懂了。是质的飞跃啊!

求例程啊,我已经看了很多了,参考了很多

使用特权

评论回复
7
tobyking|  楼主 | 2015-5-21 17:26 | 只看该作者
luofeng2g 发表于 2015-5-21 17:17
按照例程来配置,一步步来!

已经参考了很多,我都快能把它背下来了,还是不行,求靠谱些的例程

使用特权

评论回复
8
luofeng2g| | 2015-5-21 17:28 | 只看该作者
tobyking 发表于 2015-5-21 17:26
已经参考了很多,我都快能把它背下来了,还是不行,求靠谱些的例程

官方例程?如果这还不靠谱。。。。。那我也不知道还有什么靠谱的

使用特权

评论回复
9
fanxsd| | 2015-5-21 17:35 | 只看该作者
tobyking 发表于 2015-5-21 17:26
已经参考了很多,我都快能把它背下来了,还是不行,求靠谱些的例程

表皮 肤浅

使用特权

评论回复
10
冰河w| | 2015-5-21 19:37 | 只看该作者
定时器捕获功能设置对了吗

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
tobyking + 1 淡定
11
tobyking|  楼主 | 2015-5-22 08:31 | 只看该作者
冰河w 发表于 2015-5-21 19:37
定时器捕获功能设置对了吗

查了很多遍,没问题啊

使用特权

评论回复
12
liuliuzhou| | 2015-7-21 17:03 | 只看该作者
fanxsd 发表于 2015-5-21 16:51
楼主最好看看 官方的实例。还是比较的简单的。

求问官方实例在哪?

使用特权

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

本版积分规则

3

主题

11

帖子

0

粉丝