void Timerx_Init(GPTM_TypeDef* GPTMx,u16 arr,u16 psc) { GPTM_TimeBaseInitTypeDef GPTM_TimeBaseStructure; //NVIC_InitTypeDef NVIC_InitStructure; Assert_Param(IS_GPTM(GPTMx)); if(GPTMx==GPTM0) { CKCU_APBPerip1ClockConfig(CKCU_APBEN1_GPTM0,ENABLE); } else if(GPTMx==GPTM1) { CKCU_APBPerip1ClockConfig(CKCU_APBEN1_GPTM1,ENABLE); } GPTM_DeInit(GPTMx); GPTM_TimeBaseStructure.CounterReload = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms GPTM_TimeBaseStructure.Prescaler =(7200-1); //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 GPTM_TimeBaseStructure.PSCReloadTime = GPTM_PSC_RLD_UPDATE;//无事件发生,等待下一次重载//TIM 中断源 GPTM_TimeBaseStructure.CounterMode = GPTM_CNT_MODE_UP; //TIM向上计数模式 GPTM_TimeBaseInit(GPTMx, &GPTM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 /* TIM IT enable */ GPTM_IntConfig( //使能或者失能指定的TIM中断 GPTMx, //TIMx TIM_IT_Update | //TIM 中断源 TIM_IT_Trigger, //TIM 触发中断源 ENABLE //使能 ); /* Enable the TIMx global Interrupt */ if(GPTMx==GPTM0) { NVIC_SetPriority(GPTM0_IRQn,NVIC_EncodePriority(5,0,3)); NVIC_EnableIRQ(GPTM0_IRQn); GPTM_IntConfig(GPTM0,GPTM_INT_UEV,ENABLE); } else if(GPTMx==GPTM1) { NVIC_SetPriority(GPTM1_IRQn,NVIC_EncodePriority(5,0,3)); NVIC_EnableIRQ(GPTM1_IRQn); GPTM_IntConfig(GPTM1,GPTM_INT_UEV,ENABLE); } /* NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 */ GPTM_Cmd(GPTMx, ENABLE); //使能TIMx外设 }
/*********************************************************************************************************//** * @brief Configures GPTM0 for time estimate. * @retval None ***********************************************************************************************************/ void GPTM_Configuration(void) { GPTM_TimeBaseInitTypeDef TimeBaseInit; TimeBaseInit.CounterMode = GPTM_CNT_MODE_UP; TimeBaseInit.CounterReload = SystemCoreClock / (1000 * 2); TimeBaseInit.Prescaler = 1; TimeBaseInit.PSCReloadTime = GPTM_PSC_RLD_IMMEDIATE; GPTM_TimeBaseInit(GPTM0, &TimeBaseInit); GPTM_Cmd(GPTM0, ENABLE); }