打印

STM32每个通用定时器可以单独输出4路不同频率的PWM波形?

[复制链接]
15857|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cd4066|  楼主 | 2012-5-16 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32每个通用定时器可以单独输出4路不同频率的PWM波形?

如下代码。是不是说STM32每个通用定时器可以单独输出4路不同频率的PWM波形?我看以下代码还有每个通道的单独设置。

#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);                        //占空比调节
沙发
香水城| | 2012-5-16 16:24 | 只看该作者
除非不断地进行软件干预,否则单个通用定时器不可以单独输出4路不同频率的PWM波形。

使用特权

评论回复
板凳
cd4066|  楼主 | 2012-5-17 08:39 | 只看该作者
/*************************** 通道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);

使用特权

评论回复
地板
cd4066|  楼主 | 2012-5-17 08:40 | 只看该作者
如楼上红色的文字,那这里每个通道设置一个常数,是想得到4个不同占空比的PWM信号吗?

使用特权

评论回复
5
cd4066|  楼主 | 2012-5-17 08:42 | 只看该作者
前面的4个常数是这样设置的

uint16_t CCR1_Val = 250;
uint16_t CCR2_Val = 500;
uint16_t CCR3_Val = 750;
uint16_t CCR4_Val = 0;

使用特权

评论回复
6
weicz| | 2012-5-17 09:21 | 只看该作者
4# cd4066
对的,频率应该都是一样的,但可以输出不同占空比的波形

使用特权

评论回复
7
tianyuhui| | 2012-5-20 14:01 | 只看该作者
同意6楼。。。

使用特权

评论回复
8
google2012| | 2012-5-23 17:08 | 只看该作者
I AGREE

使用特权

评论回复
9
zhanxiage110| | 2012-5-23 21:28 | 只看该作者
恩,频率肯定是一个,占空比可调

使用特权

评论回复
10
INS101211| | 2012-6-6 15:03 | 只看该作者
请问这种情况下,怎么设置不同PWM的输出IO口,有没有这方面的参考文档

使用特权

评论回复
11
it_yrj| | 2012-12-24 23:09 | 只看该作者
请问楼主实现了没:一个定时器输出四路不同频率的PWM????

使用特权

评论回复
12
zengan007| | 2013-3-20 09:11 | 只看该作者
用比较输出模式 输出的好像也是PWM波吧?那样的话就可以输出4路PWM

使用特权

评论回复
13
Uyou| | 2014-7-14 12:37 | 只看该作者
四路不同频率的PWM输出,各位解决了没有啊

使用特权

评论回复
14
古月风语| | 2014-11-4 22:00 | 只看该作者
四路不同频率的PWM输出,各位解决了没有啊

使用特权

评论回复
15
81190865| | 2015-1-22 15:15 | 只看该作者
用PWM模式是没办法输出不同频率的PWM波的,有人说用比较模式可以,我没有实现过

使用特权

评论回复
16
Serge_Ding| | 2015-1-23 12:52 | 只看该作者
四路频率一样,占空比不同的PWM

使用特权

评论回复
17
zunaxia| | 2017-8-6 14:05 | 只看该作者
怎么设置不同PWM的输出IO口,有没有这方面的参考文档

使用特权

评论回复
18
戈卫东| | 2017-8-6 14:21 | 只看该作者
响应每次比较中断,大致可以做到。

使用特权

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

本版积分规则

40

主题

113

帖子

0

粉丝