STM32F4 高级定时器中心对齐PWM模式,代码分享

   使用STM32F407

 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStre;
    TIM_OCInitTypeDef TIM_OCInitStre;
    GPIO_InitTypeDef GPIO_InitStre;
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//时钟使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
    
    GPIO_InitStre.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//IO初始化 PC8 PC9
    GPIO_InitStre.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStre.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO_InitStre.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStre.GPIO_Speed=GPIO_Medium_Speed;
    GPIO_Init(GPIOC,&GPIO_InitStre);
    
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM8);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM8);
    
    TIM_DeInit(TIM8);
    TIM_TimeBaseInitStre.TIM_Prescaler=0;
    TIM_TimeBaseInitStre.TIM_Period=42000-1;//f=168M/42000/2=2kHZ,这里为什么多除了一个2,请看另一篇分享文章
    TIM_TimeBaseInitStre.TIM_ClockDivision=0;//不分频
    TIM_TimeBaseInitStre.TIM_CounterMode=TIM_CounterMode_CenterAligned1;
    TIM_TimeBaseInitStre.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStre);
    
    TIM_OCInitStre.TIM_OCMode=TIM_OCMode_PWM1;
    TIM_OCInitStre.TIM_OCIdleState=TIM_OCIdleState_Reset;
    TIM_OCInitStre.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OCInitStre.TIM_Pulse=20000;
    TIM_OCInitStre.TIM_OutputState=TIM_OutputState_Enable;    
    TIM_OC3Init(TIM8, &TIM_OCInitStre);
    
    TIM_OCInitStre.TIM_Pulse=10000;
    TIM_OC4Init(TIM8, &TIM_OCInitStre);
    
    TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);//重装载寄存器的值立刻更新到影子寄存器,不缓冲;
    TIM_OC4PreloadConfig(TIM8,TIM_OCPreload_Enable);//重装载寄存器的值立刻更新到影子寄存器,不缓冲;

  //TIM_ClearITPendingBit(TIM8,TIM_IT_Update);
    //TIM_ITConfig(TIM8,TIM_IT_Update ,DISABLE);//不使用中断
    
  TIM_ARRPreloadConfig(TIM8,ENABLE);
    TIM_CtrlPWMOutputs(TIM8,ENABLE);
    TIM_Cmd(TIM8,ENABLE);

STM32F4 高级定时器中心对齐PWM模式,代码分享

   使用STM32F407

 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStre;
    TIM_OCInitTypeDef TIM_OCInitStre;
    GPIO_InitTypeDef GPIO_InitStre;
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//时钟使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
    
    GPIO_InitStre.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//IO初始化 PC8 PC9
    GPIO_InitStre.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStre.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO_InitStre.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStre.GPIO_Speed=GPIO_Medium_Speed;
    GPIO_Init(GPIOC,&GPIO_InitStre);
    
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM8);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM8);
    
    TIM_DeInit(TIM8);
    TIM_TimeBaseInitStre.TIM_Prescaler=0;
    TIM_TimeBaseInitStre.TIM_Period=42000-1;//f=168M/42000/2=2kHZ,这里为什么多除了一个2,请看另一篇分享文章
    TIM_TimeBaseInitStre.TIM_ClockDivision=0;//不分频
    TIM_TimeBaseInitStre.TIM_CounterMode=TIM_CounterMode_CenterAligned1;
    TIM_TimeBaseInitStre.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStre);
    
    TIM_OCInitStre.TIM_OCMode=TIM_OCMode_PWM1;
    TIM_OCInitStre.TIM_OCIdleState=TIM_OCIdleState_Reset;
    TIM_OCInitStre.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OCInitStre.TIM_Pulse=20000;
    TIM_OCInitStre.TIM_OutputState=TIM_OutputState_Enable;    
    TIM_OC3Init(TIM8, &TIM_OCInitStre);
    
    TIM_OCInitStre.TIM_Pulse=10000;
    TIM_OC4Init(TIM8, &TIM_OCInitStre);
    
    TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);//重装载寄存器的值立刻更新到影子寄存器,不缓冲;
    TIM_OC4PreloadConfig(TIM8,TIM_OCPreload_Enable);//重装载寄存器的值立刻更新到影子寄存器,不缓冲;

  //TIM_ClearITPendingBit(TIM8,TIM_IT_Update);
    //TIM_ITConfig(TIM8,TIM_IT_Update ,DISABLE);//不使用中断
    
  TIM_ARRPreloadConfig(TIM8,ENABLE);
    TIM_CtrlPWMOutputs(TIM8,ENABLE);
    TIM_Cmd(TIM8,ENABLE);