b) 定时器设置
因为使用的是TIM4_CH2,所以需要配置TIM4,并且配置为复位模式,把超时时间定为20ms,为了方便TIM4时钟定输入为1KHZ
- /*
- * This function is called by timer_init() to perform the non-generic portion
- * of the initialization of the timer module.
- */
- void timer_init_non_generic(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- TIM_ICInitTypeDef TIM_ICInitStructure;
- /* TIM4 configuration ----------------------------------------------------*/
- TIM_TimeBaseStructure.TIM_Period = 65535;
- TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock/1000000 * 1000 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
- /* Output Compare Mode configuration: Channel1 */
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
- TIM_OCInitStructure.TIM_Pulse = 20;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
- TIM_OC1Init(TIM4, &TIM_OCInitStructure);
- /* TIM4 Channel 2 Input Capture Configuration */
- TIM_ICInitStructure.TIM_Channel = TIM_Channel_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 = 0;
- TIM_ICInit(TIM4, &TIM_ICInitStructure);
- /* TIM4 Input trigger configuration: External Trigger connected to TI2 */
- TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);
- /* TIM4 configuration in slave reset mode where the timer counter is
- re-initialied in response to rising edges on an input capture (TI2) */
- TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);
- /* TIM4 IT CC1 enable */
- TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE);
- }
|