|
stm32上的程序,实际验证可行:
void PWMTimer(uint32 fhz)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = (24000000/2) / fhz; //重装载寄存器周期的值 20K
TIM_TimeBaseStructure.TIM_Prescaler = 0; //TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //TIM中央对齐模式1计数模式
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OCInitStructure.TIM_Pulse = ((24000000/2 / fhz) * 43) / 100;
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_Pulse = ((24000000/2 / fhz) * (100-43)) / 100;
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_Cmd(TIM2,ENABLE);
}
移植到gd32上的,就是没有输出:
void PWMTimer(uint32 fhz) //20k
{
TIMER_BaseInitPara TIM_TimeBaseStructure;
TIMER_OCInitPara TIM_OCInitStructure;
GPIO_InitPara GPIO_InitStructure;
RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_TIMER1,ENABLE);
RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; /* 复用推挽输出模式 */
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_10MHZ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIMER_DeInit(TIMER1);
TIM_TimeBaseStructure.TIMER_Period = (72000000/2) / fhz; //重装载寄存器周期的值 20K
TIM_TimeBaseStructure.TIMER_Prescaler = 0; //TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_CENTER_ALIGNED1; //TIM中央对齐模式1计数模式
TIM_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; //时钟分割
TIM_TimeBaseStructure.TIMER_RepetitionCounter = 0; //
TIMER_BaseInit(TIMER1,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM1;
TIM_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.TIMER_OutputNState = TIMER_OUTPUTN_STATE_DISABLE;
TIM_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH;
TIM_OCInitStructure.TIMER_OCNPolarity = TIMER_OCN_POLARITY_LOW;
TIM_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_RESET;
TIM_OCInitStructure.TIMER_OCNIdleState = TIMER_OCN_IDLE_STATE_RESET;
TIM_OCInitStructure.TIMER_Pulse = ((72000000/2 / fhz) * 43) / 100;
TIMER_OC1_Init(TIMER1,&TIM_OCInitStructure);
TIM_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM2;
TIM_OCInitStructure.TIMER_Pulse = ((72000000/2 / fhz) * (100-43)) / 100;
TIMER_OC2_Init(TIMER1,&TIM_OCInitStructure);
TIMER_Enable(TIMER1,ENABLE);
}
gd32f130f6的TIM能像stm32f103c8那样做推挽输出吗?移植过来的咋就是不行呢?
谁懂这个的帮我看看问题出在哪,谢谢啦。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|