OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4770|回复: 1

407使用tim2_ch2输出PWM波形不对

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2020-5-15
在线时间
39 小时
发表于 2021-10-28 13:51:57 | 显示全部楼层 |阅读模式
10金钱


使用407开发板,想用tim2_ch2(对应于PA1)输出100hz,占空比为75的波形,结果不对,换成tim14_ch1,就能正常输出波形,谁能解答一下,万分感激。


pwm.h文件
/*******timer2 ch2********/
#define GENERAL_OCPWM_PIN             GPIO_Pin_1              
#define GENERAL_OCPWM_GPIO_PORT       GPIOA                    
#define GENERAL_OCPWM_GPIO_CLK        RCC_AHB1Periph_GPIOA

#define GENERAL_OCPWM_PINSOURCE                  GPIO_PinSource1
#define GENERAL_OCPWM_AF                          GPIO_AF_TIM2

#define GENERAL_TIM                             TIM2
#define GENERAL_TIM_CLK                         RCC_APB1Periph_TIM2



pwm.c文件:
/**
  * @brief  配置TIM复用输出PWM时用到的I/O
  * @param  无
  * @retval 无
  */
static void TIMx_GPIO_Config(void)
{
        /*定义一个GPIO_InitTypeDef类型的结构体*/
        GPIO_InitTypeDef GPIO_InitStructure;

        /*开启相关的GPIO外设时钟*/
        RCC_AHB1PeriphClockCmd (GENERAL_OCPWM_GPIO_CLK, ENABLE);
       
        /*定时器通道引脚复用 */
        GPIO_PinAFConfig(GENERAL_OCPWM_GPIO_PORT,GENERAL_OCPWM_PINSOURCE,GENERAL_OCPWM_AF);

        /* 定时器通道引脚配置 */                                                                                                                          
        GPIO_InitStructure.GPIO_Pin = GENERAL_OCPWM_PIN;       
        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_100MHz;
        GPIO_Init(GENERAL_OCPWM_GPIO_PORT, &GPIO_InitStructure);
}

static void TIM_PWMOUTPUT_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        // 开启TIMx_CLK,x[2,3,4,5,12,13,14]
        RCC_APB1PeriphClockCmd(GENERAL_TIM_CLK, ENABLE);        
       
        /*** 通用控制定时器时钟CK_INT = 84MHz ***/
        /***CK_CNT=CK_INT/(TIM_Prescaler+1)=10kHz***/
        TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;       
       
        /* 累计TIM_Period个后产生一个更新或者中断*/               
        TIM_TimeBaseStructure.TIM_Period = 100-1;  
       
        // 采样时钟分频
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        // 计数方式
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
       
        // 初始化定时器TIMx, x[2,3,4,5,12,13,14]
        TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//配置为PWM模式1,当定时器计数值小于CCR1_Val时为高电平
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能       
        TIM_OCInitStructure.TIM_Pulse = 75;//占空比75:25
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//选择OCx高电平有效还是低电平有效
        TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure);         //初始化输出比较通道


        TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);//chanel2
        TIM_Cmd(GENERAL_TIM, ENABLE);        // 使能定时器

        //TIM_CtrlPWMOutputs(GENERAL_TIM,ENABLE);//高级定时器要想输出PWM,必须加这个函数
       
       
       
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2021-10-28 16:46:26 | 显示全部楼层
ARPE使能 使能下看看,直接主函数调用TIM_SetCompare1()函数给下占空比看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 20:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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