【求助】CH32V307 TIM3 PWM无输出

PB0、PB1作为PWM输出,但是用逻辑分析仪测试后没有信号。不知道是不是TIM3的CH1、CH2引脚PA6、PA7被USART1占用影响。定时器初始化代码如下:

    GPIO_InitTypeDef GPIO_InitStructure={0};
    TIM_OCInitTypeDef TIM_OCInitStructure={0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );

//    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOB, &GPIO_InitStructure );
    GPIO_SetBits(GPIOB, GPIO_Pin_0);
    GPIO_ResetBits(GPIOB, GPIO_Pin_1);

    TIM_InternalClockConfig(TIM3);

    TIM_TimeBaseInitStructure.TIM_Period = 2000;//SystemCoreClock/HeatFreq-1;
    TIM_TimeBaseInitStructure.TIM_Prescaler = 95;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 1000;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC3Init( TIM3, &TIM_OCInitStructure );

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC4Init( TIM3, &TIM_OCInitStructure );

    TIM_CtrlPWMOutputs(TIM3, ENABLE );
//    TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable );
//    TIM_OC4PreloadConfig( TIM3, TIM_OCPreload_Disable );
//    TIM_ARRPreloadConfig( TIM3, ENABLE );
    TIM_Cmd( TIM3, ENABLE );


我将

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

改为

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

PWM能正常输出

查看芯片文档,发现TIM3属于片上外设,走复用通道,所以必须使用AF_PP

image.png


只有登录才能回复,可以选择微信账号登录