ch32v307vct6的完全重映射到引脚PE3-PE4-PE5,无法输出PWM

各位专家您好,我在重映射TIM10的时候,无法输出PWM

我的函数如下,请专家指导,谢谢。

void?stepper_pwm_init(?void)
{
????GPIO_InitTypeDef????????GPIO_InitStructure={0};
????TIM_OCInitTypeDef???????TIM_OCInitStructure={0};
????TIM_TimeBaseInitTypeDef?TIM_TimeBaseInitStructure={0};
????RCC_APB2PeriphClockCmd(?RCC_APB2Periph_GPIOE?|?RCC_APB2Periph_TIM10?|?RCC_APB2Periph_AFIO,?ENABLE?);
????GPIO_PinRemapConfig(GPIO_FullRemap_TIM10?,?ENABLE);
????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOE,?&GPIO_InitStructure?);
????TIM_TimeBaseInitStructure.TIM_Period?=?65536;
????TIM_TimeBaseInitStructure.TIM_Prescaler?=?1439;
????TIM_TimeBaseInitStructure.TIM_ClockDivision?=?TIM_CKD_DIV1;
????TIM_TimeBaseInitStructure.TIM_CounterMode?=?TIM_CounterMode_Up;
????TIM_TimeBaseInit(?TIM10,?&TIM_TimeBaseInitStructure);
#if?(PWM_MODE?==?PWM_MODE1)
????TIM_OCInitStructure.TIM_OCMode?=?TIM_OCMode_PWM1;
#elif?(PWM_MODE?==?PWM_MODE2)
????TIM_OCInitStructure.TIM_OCMode?=?TIM_OCMode_PWM2;

#endif
????TIM_OCInitStructure.TIM_OutputState?=?TIM_OutputState_Enable;
????TIM_OCInitStructure.TIM_Pulse?=?32767;
????TIM_OCInitStructure.TIM_OCPolarity?=?TIM_OCPolarity_High;
????TIM_OC1Init(?TIM10,?&TIM_OCInitStructure?);
????TIM_OC2Init(?TIM10,?&TIM_OCInitStructure?);
????TIM_OC3Init(?TIM10,?&TIM_OCInitStructure?);
????TIM_CtrlPWMOutputs(TIM10,?ENABLE?);
????TIM_OC1PreloadConfig(?TIM10,?TIM_OCPreload_Disable?);
????TIM_OC2PreloadConfig(?TIM10,?TIM_OCPreload_Disable?);
????TIM_OC3PreloadConfig(?TIM10,?TIM_OCPreload_Disable?);
????TIM_ARRPreloadConfig(?TIM10,?ENABLE?);
????TIM_Cmd(?TIM10,?ENABLE?);
}


上面的程序不知道为什么输入进来带有很多问


上面程序不知道为什么输入很多问好,麻烦专家参考如下的程序

void stepper_pwm_init( void)
{
    GPIO_InitTypeDef        GPIO_InitStructure={0};
    TIM_OCInitTypeDef       TIM_OCInitStructure={0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE | RCC_APB2Periph_TIM10 | RCC_APB2Periph_AFIO, ENABLE );
    GPIO_PinRemapConfig(GPIO_FullRemap_TIM10 , ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOE, &GPIO_InitStructure );
    TIM_TimeBaseInitStructure.TIM_Period = 100;
    TIM_TimeBaseInitStructure.TIM_Prescaler = 14390;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM10, &TIM_TimeBaseInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 50;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init( TIM10, &TIM_OCInitStructure );
    TIM_OC2Init( TIM10, &TIM_OCInitStructure );
    TIM_OC3Init( TIM10, &TIM_OCInitStructure );
    TIM_CtrlPWMOutputs(TIM10, ENABLE );
    TIM_OC1PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_OC2PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_OC3PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_ARRPreloadConfig( TIM10, ENABLE );
    TIM_ClearFlag(TIM10, TIM_FLAG_Update);
    TIM10->CNT=0;
    TIM_Cmd( TIM10, ENABLE );
}



您好,PE3、4、5是作为互补通道使用的,若要PWM输出,配置使用独立的比较捕获通道即可,可以配置使用截图圈出的引脚。

image.png


老师您好,非常感谢,根据指导,有一些进展,现在 正向 PWM有输出PD1-PD3-PD5闪烁, 但是负向的PWM还是没变化,也就是PE3\PE4\PE5无变化,我的初始化程序如下,请您再指导下哈,谢谢。

void stepper_pwm_init( void)
{
    GPIO_InitTypeDef        GPIO_InitStructure={0};
    TIM_OCInitTypeDef       TIM_OCInitStructure={0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE | RCC_APB2Periph_TIM10 | RCC_APB2Periph_AFIO, ENABLE );
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;
    GPIO_Init( GPIOD, &GPIO_InitStructure );

    GPIO_PinRemapConfig(GPIO_FullRemap_TIM10 , ENABLE);
    TIM_TimeBaseInitStructure.TIM_Period = 65535;
    TIM_TimeBaseInitStructure.TIM_Prescaler = 1439;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM10, &TIM_TimeBaseInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 32767;
    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_Low;
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;
    TIM_OC1Init( TIM10, &TIM_OCInitStructure );
    TIM_OC2Init( TIM10, &TIM_OCInitStructure );
    TIM_OC3Init( TIM10, &TIM_OCInitStructure );
    TIM_CtrlPWMOutputs(TIM10, ENABLE );
    TIM_OC1PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_OC2PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_OC3PreloadConfig( TIM10, TIM_OCPreload_Disable );
    TIM_ARRPreloadConfig( TIM10, DISABLE );
    TIM10->CNT=0;
    TIM_Cmd( TIM10, ENABLE );
}



您好,PE3、4、5是互补通道,程序中要进行互补通道的配置,EVT有对应的例程,可以参考一下。


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