21IC电子工程师论坛

查看: 2560|回复: 11

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

积分
250
帖子
83
本月在线
0小时0分
cd4066 发表于 2012-5-16 15:42:05 |显示全部楼层 |返回版面
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);                        //占空比调节
积分
46089
帖子
14572
本月在线
22小时0分
香水城 发表于 2012-5-16 16:24:03 |显示全部楼层 |返回版面
除非不断地进行软件干预,否则单个通用定时器不可以单独输出4路不同频率的PWM波形。
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:http://bbs.ednchina.com/BLOG_OWNER_199055.HTM
积分
250
帖子
83
本月在线
0小时0分
cd4066 发表于 2012-5-17 08:39:29 |显示全部楼层 |返回版面
/*************************** 通道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);
积分
250
帖子
83
本月在线
0小时0分
cd4066 发表于 2012-5-17 08:40:11 |显示全部楼层 |返回版面
如楼上红色的文字,那这里每个通道设置一个常数,是想得到4个不同占空比的PWM信号吗?
积分
250
帖子
83
本月在线
0小时0分
cd4066 发表于 2012-5-17 08:42:23 |显示全部楼层 |返回版面
前面的4个常数是这样设置的

uint16_t CCR1_Val = 250;
uint16_t CCR2_Val = 500;
uint16_t CCR3_Val = 750;
uint16_t CCR4_Val = 0;
积分
209
帖子
69
本月在线
0小时0分
weicz 发表于 2012-5-17 09:21:40 |显示全部楼层 |返回版面
4# cd4066
对的,频率应该都是一样的,但可以输出不同占空比的波形
积分
15
帖子
5
本月在线
0小时0分
tianyuhui 发表于 2012-5-20 14:01:14 |显示全部楼层 |返回版面
同意6楼。。。
积分
156
帖子
52
本月在线
0小时0分
google2012 发表于 2012-5-23 17:08:06 |显示全部楼层 |返回版面
I AGREE
积分
144
帖子
48
本月在线
0小时0分
zhanxiage110 发表于 2012-5-23 21:28:06 |显示全部楼层 |返回版面
恩,频率肯定是一个,占空比可调
骑车去远方
积分
21
帖子
7
本月在线
0小时0分
INS101211 发表于 2012-6-6 15:03:27 |显示全部楼层 |返回版面
请问这种情况下,怎么设置不同PWM的输出IO口,有没有这方面的参考文档
积分
988
帖子
324
本月在线
10小时15分
it_yrj 发表于 2012-12-24 23:09:23 |显示全部楼层 |返回版面
请问楼主实现了没:一个定时器输出四路不同频率的PWM????
积分
219
帖子
73
本月在线
0小时30分
zengan007 发表于 2013-3-20 09:11:03 |显示全部楼层 |返回版面
用比较输出模式 输出的好像也是PWM波吧?那样的话就可以输出4路PWM
您需要登录后才可以回帖 登录 | 注册