初级会员

- 积分
- 180
- 金钱
- 180
- 注册时间
- 2018-2-27
- 在线时间
- 69 小时
|
1金钱
本帖最后由 路雨潇潇ll 于 2018-3-24 15:22 编辑
只有第四个通道输出pwm 前三个通道很乱,像pwm但是杂波严重 。原子哥和大神帮忙看下,我程序哪个地方出了问题
#include "timer.h"
#include "led.h"
void timer1_init(u16 arr,u16 psc) //高级定时器1中断溢出
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0; //重复计数设置
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
// TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
TIM_ClearFlag(TIM1,TIM_FLAG_Update);
TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger,ENABLE); //此步必不可少 更新中断源 触发中断源
NVIC_InitStruct.NVIC_IRQChannel=TIM1_UP_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM1,ENABLE);
}
void TIM1_UP_IRQHandler(void)
{
if( TIM_GetITStatus(TIM1,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
LED0=!LED0;
LED1=!LED1;
}
}
void pwm_init(u16 arr,u16 psc) //定时器一pwm四路输出 A8 A9 A10 A11 分别对应通道1234
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_TIM1|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);
// RCC_APB1PeriphClockCmd();
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
// TIM_OCInitStruct.TIM_OCIdleState=
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
// TIM_OCInitStruct.TIM_OCNIdleState=
// TIM_OCInitStruct.TIM_OCNPolarity=
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High; //tim输出比较极性高
// TIM_OCInitStruct.TIM_OutputNState= //互补输出使能1
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
// TIM_OCInitStruct.TIM_Pulse=
TIM_OC1Init(TIM1,&TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM1,&TIM_OCInitStruct);
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC3Init(TIM1,&TIM_OCInitStruct);
TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High ;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable ;
TIM_OC4Init(TIM1,&TIM_OCInitStruct);
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_Cmd(TIM1,ENABLE);
}
|
|