STM32 TIM 输入捕捉 双边沿检测 TIM_ICPolarity_BothEdge
直接来,先上代码:
//初始化TIM1输入捕获参数
TIM1_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端 IC1映射到TI1上
TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
TIM1_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
TIM_ICInit(TIM1, &TIM1_ICInitStructure);
首先,这样写代码是实现不了双边沿输入捕捉的,具体原因是ST这一块没做好,TIM_ICPolarity_BothEdge没有用
多亏这个帖子里的大神,把问题解决了
http://www.openedv.com/thread-12644-1-1.html
按照帖子所述,奉上代码:
/*********************使能双边沿检测************************/
// http://www.openedv.com/thread-12644-1-1.html
TIM1->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E);
TIM1->CCMR1 |= 0x03;
TIM1->SMCR |= (1 << 6);
TIM1->SMCR &= ~((1 << 5) | (1 << 4));
TIM1->CCER |= ((uint16_t)TIM_CCER_CC1E);
/*********************使能双边沿检测************************/