OpenEdv-开源电子网

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

想用 STM32F407的TIM14输出固定占空比的PWM,来给电调

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-4-14
在线时间
0 小时
发表于 2016-4-14 21:04:21 | 显示全部楼层 |阅读模式
1金钱
想用 STM32F407的TIM14输出固定占空比的PWM,来给电调,想知道频率和占空比是在哪里设置的,下面是原子哥的用STM32F407输出占空比在变化的pwm,我不需要占空比变化,是只要使能tim14之后就可以了吗,后面的主程序就不需要了?
pwm.c源文件代码如下:
//TIM14 PWM部分初始化
//PWM输出初始化
//arr:自动重装值  psc:时钟预分频数
void TIM14_PWM_Init(u32 arr,u32 psc)
{                                             
       GPIO_InitTypeDef GPIO_InitStructure;
       TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
       TIM_OCInitTypeDef  TIM_OCInitStructure;
      
       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //TIM14时钟使能   
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能PORTF时钟
      
       GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GF9复用为TIM14
      
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             //GPIOF9
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;      //速度50MHz
       GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
       GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
       GPIO_Init(GPIOF,&GPIO_InitStructure);              //初始化PF9
        
       TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
       TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
       TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
       TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
      
       TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
      
       //初始化TIM14 Channel1 PWM模式
       TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM调制模式1
      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
       TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性低
       TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //初始化外设TIM1 4OC1
       TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能预装载寄存器
    TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE使能
       TIM_Cmd(TIM14, ENABLE);  //使能TIM14                                                      
}   
此部分代码包含了上面介绍的PWM输出设置的前5个步骤。这里我们关于TIM14的设置就不再说了。
接下来,我们看看主程序里面的main函数如下:
int main(void)
{
       u16 led0pwmval=0;   
       u8 dir=1;
       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
       delay_init(168);  //初始化延时函数
       uart_init(115200);//初始化串口波特率为115200
      TIM14_PWM_Init(500-1,84-1);   //定时器时钟为84M,分频系数为84,所以计数频率
//为84M/84=1Mhz,重装载值500,所以PWM频率为 1M/500=2Khz.   
    while(1)
       {
             delay_ms(10);
              if(dir)led0pwmval++;//dir==1 led0pwmval递增
              else led0pwmval--; //dir==0 led0pwmval递减
             if(led0pwmval>300)dir=0;//led0pwmval到达300后,方向为递减
              if(led0pwmval==0)dir=1;      //led0pwmval递减到0后,方向改为递增
              TIM_SetCompare1(TIM14,led0pwmval);     //修改比较值,修改占空比
       }
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2016-4-15 23:43:11 | 显示全部楼层
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2016-3-25
在线时间
16 小时
发表于 2016-4-16 16:06:02 | 显示全部楼层
怎么不重要,你妹看见循环里一直调用TIM_SetCompare1(TIM14,led0pwmval);     只有不断改变,led0pwmval的值,才能实现调节占空比的目的
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
发表于 2016-4-16 17:04:11 | 显示全部楼层
如是你的占空比是一定while里面就不写啥子也行啊!
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2015-7-2
在线时间
16 小时
发表于 2016-8-21 14:18:22 | 显示全部楼层
你得把”TIM_SetCompare1(TIM14,250);        “放在while之前,这样输出就是占空比50%的了,while里面的删掉
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-6-12
在线时间
28 小时
发表于 2019-7-10 23:46:34 | 显示全部楼层
在这个函数里arr是500,led0pwmval和500的比值就是占空比,led0pwmval不去改动,占空比就是恒定的了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 16:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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