[STM32F1] PWM 的频率如何改变

[复制链接]
1084|18
 楼主| chuxh 发表于 2021-2-9 23:03 | 显示全部楼层 |阅读模式
PWM, TI, IO, pi, ST
// PWM 初始化 包含通用定时器的初始化
// 使用TIM3 定时器 通道2 映射到PB5输出PWM
void PWM_Config(uint16_t arr,uint16_t psc)
{
  GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef   TIM_OCInitStructure;                        
        NVIC_InitTypeDef   NVIC_InitStructure;
        
         // 开启TIM3 时钟
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
   // 开启PB5时钟和时钟复用功能
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
         // 重映射 TIM3_CH2->PB5
         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
         
         // 初始化GPIO
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推完输出
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
         // 初始化定时器
         TIM_TimeBaseStructure.TIM_Period = arr;   //自动重装载周期值
   TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
         
         // 初始化TIM3 CH2 PWM模式
         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;  //PWM模式2
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
   TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化外设TIM3 OC2
         
         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
   TIM_Cmd(TIM3, DISABLE); //使能TIM3
}
 楼主| chuxh 发表于 2021-2-9 23:06 | 显示全部楼层

什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| chuxh 发表于 2021-2-9 23:08 | 显示全部楼层
这样: PWM_Config(7199,99);         // 72000/(7200*100)=100Hz   是100HZ吗?
 楼主| chuxh 发表于 2021-2-9 23:11 | 显示全部楼层
如果 arr = 7199+1=8000     那么调节占空比 就应该是  4000  就是占据一半
wangpe 发表于 2021-2-9 23:13 | 显示全部楼层
改分频系数;
ousj 发表于 2021-2-9 23:16 | 显示全部楼层
对于这个函数,你修改其中 void PWM_Config(uint16_t arr,uint16_t psc)的 arr 和psc都可以改变PWM频率。
dengdc 发表于 2021-2-9 23:20 | 显示全部楼层
具体修改哪个或都修改要结合你实际应用。
lizye 发表于 2021-2-9 23:23 | 显示全部楼层
至于占空比 可以修改相关通道的CCRx寄存器的值
liliang9554 发表于 2021-2-9 23:26 | 显示全部楼层
你好像是基于STM32标准库函数代码,你可以修改下面代码中的ChannelxPulse;的值。
午夜粪车 发表于 2021-2-9 23:29 | 显示全部楼层

TIM_OCInitStructure.TIM_Pulse = ChannelxPulse

你可以找个STM32例程参考下。
huangchui 发表于 2021-2-9 23:34 | 显示全部楼层
PWM的频率修改就是定时器溢出时间的修改 相通的
wyjie 发表于 2021-2-9 23:36 | 显示全部楼层
长知识了 呵呵
 楼主| chuxh 发表于 2021-2-9 23:39 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
晓伍 发表于 2021-3-2 23:29 | 显示全部楼层
在程序运行过程中改变吗
八层楼 发表于 2021-3-2 23:31 | 显示全部楼层
有时候需要改变时钟
观海 发表于 2021-3-2 23:34 | 显示全部楼层
涉及到时钟配置 定时器配置吧
guanjiaer 发表于 2021-3-2 23:38 | 显示全部楼层
没有用这种方式更改过
heimaojingzhang 发表于 2021-3-2 23:41 | 显示全部楼层
你这个缺少一部分代码
17883657069 发表于 2021-3-3 09:03 | 显示全部楼层
compare函数实现占空比可调,频率与arr和psc相关
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部