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);
发布评论