PS:计算两个边沿触发间隔的时间时,不能简单的A-B,要考虑可能计数器已经溢出后重新一轮计数的情况。
一般配置步骤
使能定时器x和相关IO口时钟。
- 使能定时器x时钟:RCC_APB1PeriphClockCmd();
- 使能GPIOx时钟:RCC_APB2PeriphClockCmd();
初始化IO口为上拉/下拉输入。函数:GPIO_Init();
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD/GPIO_Mode_IPU;
/**根据需要是否重映射
- 里我们是要把Pxx用作定时器x输入引脚,所以要重映射配置。(例子这里是部分重映射,自己使用时应当查表看是否需要重映射以及是什么重映射)
- 使能复用端口时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
- 部分重映射(此处可根据需要省略): GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
**/
初始化定时器:ARR,PSC等:TIM_TimeBaseInit();
配置输入捕获参数:TIM_ICInit();
设置捕获通道极性函数: TIM_OCxPolarityConfig()
* 注释部分为需要开启中断时使用
- 使能指定的TIMx溢出中断,允许更新中断TIM_IT_Update: TIM_ITConfig(TIMx,TIM_IT_Update,ENABLE );
- 使能指定的TIMx捕获中断,允许更新中断TIM_IT_Update:
- TIM_ITConfig(TIMx,TIM_IT_CCx,ENABLE);
- 初始化NVIC中断优先级参数:NVIC_Init()
- 主函数main.c中要有中断优先级分组:NVIC_PriorityGroupConfig();
*/
- 使能定时器。TIM_Cmd();
/*
- 编写中断服务函数 TIMx_IRQHandler();
**/