基于CH32F203利用TIM1 同时输出4通道固定PWM占空比波形 
  📌相关篇《关于CH32F203程序下载方式说明》 📍有关CH32F203资料手册以及SDK资料:https://www.wch.cn/products/CH32F103.html 🌴《树莓派RP2040 100M 24通道逻辑分析仪开源项目》  
 ✨虽然CH32F203和STM32F103重合度很高,但是在程序上有些外设还是不能兼容。外设的使用还是可以参考资料丰富的STM32来开发或学习使用。从对应提供的接口API函数来看,基本都是照搬的。   
🔖本案例是基于官方提供SDK资料中的单路PWM输出例程中新增的多通道PWM输出。  
  🎈原案例:CH32F20xEVT\EVT\EXAM\TIM\PWM_Output  🎞4通道输出PWM波形 🎉使用RP2040开源的逻辑分析仪,使用免费上位机软件PulseView参考pwm波形脉宽 
 
✨如果想对每个通道单独进行初始化配置,可以将下面的函数分开来写。 void  TIM1_PWMOut_Init ( u16 arr,  u16 psc,  u16 ccp) 
{ 
    GPIO_InitTypeDef GPIO_InitStructure =  { 0 } ; 
    TIM_OCInitTypeDef TIM_OCInitStructure =  { 0 } ; 
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure =  { 0 } ; 
    RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA |  RCC_APB2Periph_TIM1,  ENABLE) ; 
		
    GPIO_InitStructure. GPIO_Pin =  ( uint16_t ) ( GPIO_Pin_11 |  GPIO_Pin_10 |  GPIO_Pin_9|  GPIO_Pin_8) ; 
    GPIO_InitStructure. GPIO_Mode =  GPIO_Mode_AF_PP; 
    GPIO_InitStructure. GPIO_Speed =  GPIO_Speed_50MHz; 
    GPIO_Init ( GPIOA,  & GPIO_InitStructure) ; 
    TIM_TimeBaseInitStructure. TIM_Period =  arr; 
    TIM_TimeBaseInitStructure. TIM_Prescaler =  psc; 
    TIM_TimeBaseInitStructure. TIM_ClockDivision =  TIM_CKD_DIV1; 
    TIM_TimeBaseInitStructure. TIM_CounterMode =  TIM_CounterMode_Up; 
    TIM_TimeBaseInit ( TIM1,  & TIM_TimeBaseInitStructure) ; 
# if  ( PWM_MODE ==  PWM_MODE1) . TIM_OCMode =  TIM_OCMode_PWM1; 
# elif  ( PWM_MODE ==  PWM_MODE2) . TIM_OCMode =  TIM_OCMode_PWM2; 
# endif . TIM_OutputState =  TIM_OutputState_Enable; 
    TIM_OCInitStructure. TIM_Pulse =  ccp; 
    TIM_OCInitStructure. TIM_OCPolarity =  TIM_OCPolarity_High; 
    TIM_OC1Init ( TIM1,  & TIM_OCInitStructure) ; 
    TIM_OC2Init ( TIM1,  & TIM_OCInitStructure) ; 
    TIM_OC3Init ( TIM1,  & TIM_OCInitStructure) ; 
    TIM_OC4Init ( TIM1,  & TIM_OCInitStructure) ; 
    TIM_CtrlPWMOutputs ( TIM1,  ENABLE) ; 
    TIM_OC1PreloadConfig ( TIM1,  TIM_OCPreload_Disable) ; 
    TIM_ARRPreloadConfig ( TIM1,  ENABLE) ; 
    TIM_Cmd ( TIM1,  ENABLE) ; 
} 
🔰由于通道2在PA9引脚上,不能开启串口1,否则该引脚无法输出波形。 int  main ( void ) 
{ 
    TIM1_PWMOut_Init ( 1000 ,  48  -  1 ,  500 ) ;   
    TIM_SetCompare1 ( TIM1,  800 ) ;  
    TIM_SetCompare2 ( TIM1,  600 ) ;  
    TIM_SetCompare3 ( TIM1,  400 ) ;  
    TIM_SetCompare4 ( TIM1,  200 ) ;  
    while ( 1 ) ; 
} 
 
   
链接:  https: 
提取码:  4 s9d