- void TIM4_LED_Config(void)
- {
- TIM_OCInitTypeDef TIM_OCInitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- uint16_t prescalervalue = 0;
-
- /* TIM4 clock enable */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- /* Enable the TIM3 gloabal Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- /* Initialize Leds mounted on STM324F4-EVAL board */
- STM_EVAL_LEDInit(LED3);
- STM_EVAL_LEDInit(LED4);
- STM_EVAL_LEDInit(LED5);
- STM_EVAL_LEDInit(LED6);
-
- /* Compute the prescaler value */
- prescalervalue = (uint16_t) ((SystemCoreClock ) / 50000) - 1;
-
- /* Time base configuration */
- TIM_TimeBaseStructure.TIM_Period = 65535;
- TIM_TimeBaseStructure.TIM_Prescaler = prescalervalue;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
-
- /* Enable TIM4 Preload register on ARR */
- TIM_ARRPreloadConfig(TIM4, ENABLE);
-
- /* TIM PWM1 Mode configuration: Channel */
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_Pulse = CCR_Val;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
-
- /* Output Compare PWM1 Mode configuration: Channel2 */
- TIM_OC1Init(TIM4, &TIM_OCInitStructure);
- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable);
-
- /* TIM Interrupts enable */
- TIM_ITConfig(TIM4, TIM_IT_CC1 , ENABLE);
-
- /* TIM4 enable counter */
- TIM_Cmd(TIM4, ENABLE);
- }
输出比较设置timing 计时模式,定时中断,然后小灯反转闪烁,为什么 TIM_TimeBaseStructure.TIM_Period = 65535;必须设置成65535呢?换成别的就小灯闪的就不对了,乱闪
|