通用定时器
通用定时器溢出中断
通用定时器 反转输出
定时器配置文件
void Tim4_ch1_PD12_AF ( )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOD, ENABLE ) ;
GPIO_InitStructure. GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure. GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure. GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure. GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure. GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init ( GPIOD , & GPIO_InitStructure) ;
GPIO_PinAFConfig ( GPIOD , GPIO_PinSource12, GPIO_AF_TIM4 ) ;
}
void Tim4_ch1_init ( )
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM4, ENABLE ) ;
Tim4_ch1_PD12_AF ( ) ;
TIM_TimeBaseStructure. TIM_Period = 0xffff ;
TIM_TimeBaseStructure. TIM_Prescaler = 84 - 1 ;
TIM_TimeBaseStructure. TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit ( TIM4 , & TIM_TimeBaseStructure) ;
TIM_OCInitStructure. TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure. TIM_OutputState= TIM_OutputState_Enable;
TIM_OCInitStructure. TIM_OutputNState= TIM_OutputNState_Disable;
TIM_OCInitStructure. TIM_Pulse= 0xffff ;
TIM_OCInitStructure. TIM_OCPolarity= TIM_OCPolarity_High;
TIM_OCInitStructure. TIM_OCIdleState= TIM_OCIdleState_Set;
TIM_OC1Init ( TIM4 , & TIM_OCInitStructure) ;
NVIC_PriorityGroupConfig ( NVIC_PriorityGroup_1) ;
NVIC_InitStructure. NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure. NVIC_IRQChannelPreemptionPriority = 0 ;
NVIC_InitStructure. NVIC_IRQChannelSubPriority = 2 ;
NVIC_InitStructure. NVIC_IRQChannelCmd = ENABLE ;
NVIC_Init ( & NVIC_InitStructure) ;
TIM_OC1FastConfig ( TIM4 , TIM_OCFast_Enable) ;
TIM_OC1PreloadConfig ( TIM4 , TIM_OCPreload_Disable) ;
TIM_CCxCmd ( TIM4 , TIM_Channel_1, TIM_CCx_Enable) ;
TIM_ITConfig ( TIM4 , TIM_IT_CC1 , ENABLE ) ;
TIM_Cmd ( TIM4 , ENABLE ) ;
}
int tim_count = 0 ;
void TIM4_IRQHandler ( void )
{
if ( TIM_GetITStatus ( TIM4 , TIM_IT_CC1 ) != RESET )
{
TIM_ClearITPendingBit ( TIM4 , TIM_IT_CC1 ) ;
tim_count= TIM_GetCapture1 ( TIM4 ) ;
TIM_SetCompare1 ( TIM4 , tim_count+ 1000 ) ;
}
}
主函数
int main ( void )
{
NVIC_PriorityGroupConfig ( NVIC_PriorityGroup_2) ;
delay_init ( 168 ) ;
LED_Init ( ) ;
uart_init ( 115200 ) ;
Tim4_ch1_init ( ) ;
while ( 1 )
{
LED0 = ! LED0 ;
delay_ms ( 2 ) ;
} ;
}
通用定时器产生PWM