打印

同一个定时器可以在不同的通道输出不同频率的PWM吗

[复制链接]
4408|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Thefantasy|  楼主 | 2015-9-24 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
葫芦娃75| | 2015-9-24 23:13 | 只看该作者
是可以的,给你个代码看看
#include "stm32f10x.h"
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint16_t CCR1_Val = 250;
uint16_t CCR2_Val = 500;
uint16_t CCR3_Val = 750;
uint16_t CCR4_Val = 0;
uint16_t PrescalerValue = 0;

voidRCC_Configuration(void);                //时钟配置
voidGPIO_Configuration(void);            //管脚配置
void Delay (__IO uint32_tnCount);         //延时函数

int main(void)
{

RCC_Configuration();
GPIO_Configuration();
PrescalerValue = (uint16_t) (SystemCoreClock /24000000) - 1;
TIM_TimeBaseStructure.TIM_Period =1000;                                 //周期
TIM_TimeBaseStructure.TIM_Prescaler =PrescalerValue;             //分频
TIM_TimeBaseStructure.TIM_ClockDivision =0;                            //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
               //计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);                  //初始TIM3

/*************************** 通道1 ********************************/
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2;    //PWM2
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;   //PWM功能使能
TIM_OCInitStructure.TIM_Pulse =CCR1_Val;                           //写比较值(占空比
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low;   //置高
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

/****************************** 通道2 ******************************/
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

/******************************* 通道3 *********************************/
/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

/****************************** 通道4 *********************************/
/* PWM1 Mode configuration: Channel4 */
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);                       //
TIM_Cmd(TIM3,ENABLE);                                         //使能计数
while (1)
{
CCR4_Val++;
if(CCR4_Val==1000)CCR4_Val=0;
TIM_SetCompare4(TIM3,CCR4_Val);                        //占空比调节

使用特权

评论回复
板凳
风中的雨down| | 2015-9-25 09:37 | 只看该作者
除非不断地进行软件干预,否则单个通用定时器不可以单独输出几路不同频率的PWM波形。

使用特权

评论回复
地板
低八度的声线| | 2015-9-26 08:27 | 只看该作者
可以设置输出 几路频率一样,占空比不同的PWM

使用特权

评论回复
5
北方小榕树| | 2015-9-26 23:13 | 只看该作者
用比较模式时可以的

使用特权

评论回复
6
柠檬酸| | 2015-9-27 19:06 | 只看该作者
利用改变定时器输出比较通道的捕获值,当输出通道捕获值产生中断时,在中断中将捕获值改变,这时, 输出的I/O会产生一个电平翻转,利用这种办法,实现不同频率的PWM输出。

使用特权

评论回复
7
风吹小浪| | 2015-9-28 08:40 | 只看该作者
可以使用定时器的比较输出模式,然后在中断中调节各个通道的比较值

使用特权

评论回复
8
我的期待| | 2015-9-28 17:31 | 只看该作者

使用特权

评论回复
9
Thefantasy|  楼主 | 2015-10-24 09:49 | 只看该作者
我的期待 发表于 2015-9-28 17:31
可以看看这个文档
http://wenku.baidu.com/link?url=9yI65ExQVUOY4HCaBT-89YRLO6KkInr2R-DCxc5Fua7ioumlEcJ ...

谢谢,我看看去。

使用特权

评论回复
10
Thefantasy|  楼主 | 2015-10-24 09:49 | 只看该作者
柠檬酸 发表于 2015-9-27 19:06
利用改变定时器输出比较通道的捕获值,当输出通道捕获值产生中断时,在中断中将捕获值改变,这时, 输出的I ...

这也是一个很好的办法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

298

帖子

0

粉丝