STM32 第16章TPAD实验为什么初始化不用使能中断

2019-08-08 12:46发布

//定时器 2 通道 2 输入捕获配置
void TIM5_CH2_Cap_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef    GPIO_InitStructure;   
        TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
        TIM_ICInitTypeDef    TIM5_ICInitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);     //使能 TIM5 时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能 PA 时钟
        //设置 GPIOA.1 为浮空输入
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                         //PA1  端口配置
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                      //速度 50MHz
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;           //浮空输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                              //初始化 GPIOA.1

        //初始化 TIM5     
        TIM_TimeBaseStructure.TIM_Period = arr;                                  //设定计数器自动重装值      
        TIM_TimeBaseStructure.TIM_Prescaler =psc;                             //预分频器            
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    //向上计数模式
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);              //根据参数初始化 TIMx
        //初始化 TIM5 通道 2   
        TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; //选择输入端  IC2 映射到 TI5 上
        TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
        TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   
        TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    //配置输入分频,不分频   
        TIM5_ICInitStructure.TIM_ICFilter = 0x03;//配置输入滤波器  8 个定时器时钟周期滤波
        TIM_ICInit(TIM5, &TIM5_ICInitStructure);//初始化 I5 IC2

        TIM_Cmd(TIM5,ENABLE );                        //使能定时器 5
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
非常感
1楼-- · 2019-08-08 17:26
 精彩回答 2  元偷偷看……
login_FAE
2楼-- · 2019-08-08 20:59
没有用到中断
非常感
3楼-- · 2019-08-08 23:28
login_FAE 发表于 2017-11-1 16:30
没有用到中断

用到了啊,
//得到定时器捕获值
//如果超时,则直接返回定时器的计数值.
u16 TPAD_Get_Val(void)
{     
        TPAD_Reset();
        while(TIM_GetITStatus(TIM5, TIM_IT_CC2)== RESET)      //等待溢出
        {
                if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)
                return TIM_GetCounter(TIM5);        //超时了,直接返回 CNT 的值
        };      
        return TIM_GetCapture2(TIM5);      
}   
这个函数不是查询了中断标志吗,说明用了中断啊!                           

一周热门 更多>