搜索
bottom↓
回复: 1

gd32f130f6的TIM能像stm32f103c8那样做推挽输出吗?

[复制链接]

出200入0汤圆

发表于 2022-5-17 13:28:26 | 显示全部楼层 |阅读模式
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周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出200入0汤圆

 楼主| 发表于 2022-5-17 15:42:55 | 显示全部楼层
由于文件和程序计数顺序的不同,改成下面即可:
void  PWMTimer(uint32 fhz)        //20k
{
        TIMER_BaseInitPara  TIM_TimeBaseStructure;
        TIMER_OCInitPara  TIM_OCInitStructure;
        GPIO_InitPara GPIO_InitStructure;

        RCC_APB1PeriphClock_Enable(  RCC_APB1PERIPH_TIMER2,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);
        GPIO_PinAFConfig(GPIOA,GPIO_PINSOURCE2,GPIO_AF_2);
        GPIO_PinAFConfig(GPIOA,GPIO_PINSOURCE3,GPIO_AF_2);
       
        TIMER_DeInit(TIMER2);
        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(TIMER2,&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_OC3_Init(TIMER2,&TIM_OCInitStructure);

        TIM_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM2;
        TIM_OCInitStructure.TIMER_Pulse = ((72000000/2 / fhz) * (100-43)) / 100;
        TIMER_OC4_Init(TIMER2,&TIM_OCInitStructure);

        TIMER_Enable(TIMER2,ENABLE);
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 19:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表