微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 着急!程序进不了中断!求大神指点---STM32输入捕获...

着急!程序进不了中断!求大神指点---STM32输入捕获...

时间:10-02 整理:3721RD 点击:
设置TIM3_CH1为捕获输入模式,在中断中测量捕获信号(方波)的频率,不知哪里出了问题?
/****************************
*
*
*
*
*************************/
#include"tim.h"
#include"misc.h"

/**************************************
*函数名 :void TIM3_NVIC_Config(void)
*描述   :配置TIM3的中断
*输入   :无
*输出   :无
*调用   :内部调用
**************************************/
static void TIM3_NVIC_Config(void)
{
         NVIC_InitTypeDef  NVIC_InitStructure;
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                  
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
         NVIC_Init(&NVIC_InitStructure);
}


/*************************
*函数名   :TIM3_GPIO_Config()
*描述     :  初始化TIM3及GPIO
*输入     :无
*输出     :无
*调用           :内部调用
*************************/
static void TIM3_GPIO_Config(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
//        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//        TIM_ICInitTypeDef  TIM_ICInitStructure;
//        TIM_DeInit(TIM3);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
\
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // PA6----TIM3_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}
/**************************
*函数名   : TIM3_Mode_Config
* 描述  :配置TIM3为捕获输入模式
* 输入  :无
* 输出  :无
* 调用  :内部调用
****************************/
static void TIM3_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef  TIM_ICInitStructure;
        TIM_DeInit(TIM3);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

                //初始化TIM3的相关参数
        TIM_TimeBaseStructure.TIM_Period = 999; //1000个数据
        TIM_TimeBaseStructure.TIM_Prescaler = (36-1); //2M
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_div1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
        //初始化TM3输入捕获通道        1   TIM3_CH1
       
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1; //不分频
        TIM_ICInitStructure.TIM_ICSelection =  TIM_ICSelection_DirectTI;  //
        TIM_ICInitStructure.TIM_ICFilter =         0x00;  //
        TIM_ICInit(TIM3,&TIM_ICInitStructure);
        TIM_CCxCmd(TIM3,TIM_Channel_1,TIM_CCx_Enable);
        TIM3_NVIC_Config();
        TIM_ITConfig(TIM3,TIM_IT_CC1,ENABLE);    //配置TIM3的CC1中断并使能
        TIM_Cmd(TIM3,ENABLE);
         
}

/*
* 函数名:TIM3_IC_Init
* 描述  :TIM3 捕获输入初始化
* 输入  :无
* 输出  :无
* 调用  :外部调用
*/
void TIM3_IC_Init(void)
{
        TIM3_GPIO_Config();
        TIM3_Mode_Config();
}


仿真一下 看下TIM3相关的寄存器状态

可以先尝试下,是不是timer3的一般定时器中断是不是也没有成功开启,看看能不能进中断先

上一篇:短路問題
下一篇:STC烧写工具

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top