OpenEdv-开源电子网

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

STM32F103 TIM1 PWM输出问题

[复制链接]

3

主题

7

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-12-5
在线时间
3 小时
发表于 2017-9-27 09:14:50 | 显示全部楼层 |阅读模式
1金钱

求助:我的main函数中调用TIM_SetCompare1确定输出占空比。TIM3\TIM4均已正常工作,但TIM1始终不能正常工作。以下是我TIM1的初始化代码,请各位大神看看有啥问题没有。谢谢!!



void TIM1_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        //使能定时器1时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设
       
    //GPIOA.10、11
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

       
   //初始化TIM1
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        //初始化TIM1 Channel2 PWM模式         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 OC1
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 OC2
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 OC3
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 OC4

        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Disable;
        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSRState_Disable;
        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime=0x0;
        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;
        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;
        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

       
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM1在CCR2上的预装载寄存器
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM1在CCR2上的预装载寄存器
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM1在CCR2上的预装载寄存器
        TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM1在CCR2上的预装载寄存器
        TIM_ARRPreloadConfig(TIM1, ENABLE);
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1
        TIM_CtrlPWMOutputs(TIM1 , ENABLE);

}

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

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2017-9-26
在线时间
25 小时
发表于 2017-9-27 09:17:07 | 显示全部楼层
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2017-9-27 10:21:01 | 显示全部楼层
你设置占空比了吗
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-12-5
在线时间
3 小时
 楼主| 发表于 2017-9-27 10:45:26 | 显示全部楼层
哆啦A萌 发表于 2017-9-27 10:21
你设置占空比了吗

没有,因为我在主函数里有用TIM_SetCompare1来调节占空比
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-9-27 13:49:56 | 显示全部楼层
TIM1为高级定时器,与其余的不同,自己多看看手册找问题吧!
回复

使用道具 举报

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-8-27
在线时间
8 小时
发表于 2017-9-27 14:07:49 | 显示全部楼层
请问你用TIM4 做PWM 输出 是怎么验证的    用杜邦线连接到LED灯吗
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-9-4
在线时间
17 小时
发表于 2017-10-12 10:40:15 | 显示全部楼层
pwm互补波形 带死区的吗  我有好的 你要吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 22:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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