stm32f103c8通过tim的4个通道产生4路占空比可变的pwm波

2019-08-19 17:57发布

下面这个是产生1路pwm波的函数。我想知道如果要产生4路都需要什么呢。我想多加入几个参数,但是只让传入两个参数。void TIM2_CH1_PWM(uint32_t Freq, uint16_t Dutycycle){
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  uint16_t tim2_period;
  uint16_t tim2_pulse;

  tim2_period = (uint16_t)(TIM2_COUNTER_CLOCK/Freq - 1);             //计算周期决定频率
  tim2_pulse  = (tim2_period + 1)*Dutycycle / 100;                  //计算脉宽决定占空比

  /* TIM2ê±»ùμ¥ÔaÅäÖÃ */
  TIM_TimeBaseStructure.TIM_Prescaler = TIM2_PRESCALER_VALUE;        
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;      
  TIM_TimeBaseStructure.TIM_Period = tim2_period;                    
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;         
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  /* TIM2í¨μà1WM1Ä£ê½ÅäÖà */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;      
  TIM_OCInitStructure.TIM_Pulse = tim2_pulse;                     
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;         
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM2, ENABLE);
  TIM_Cmd(TIM2, ENABLE);
}

还有就是为什么我在程序设置串口波特率为115200,但是用串口调试助手调试是,波特率设置为115200,不能正常的接收数据,但是设置为9600确能正确的接收数据。这是为什么啊,,求各位大佬给帮个忙,,谢谢啦。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。