查看: 6062|回复: 15
收起左侧

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

[复制链接]

40

主题

113

帖子

340

积分

资深技术员

 楼主| 发表于 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);                        //占空比调节

420

主题

1万

帖子

4万

积分

版主

发表于 2012-5-16 16:24 | 显示全部楼层 |返回版面
除非不断地进行软件干预,否则单个通用定时器不可以单独输出4路不同频率的PWM波形。
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:http://bbs.ednchina.com/BLOG_OWNER_199055.HTM

40

主题

113

帖子

340

积分

资深技术员

 楼主| 发表于 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);

40

主题

113

帖子

340

积分

资深技术员

 楼主| 发表于 2012-5-17 08:40 | 显示全部楼层 |返回版面
如楼上红色的文字,那这里每个通道设置一个常数,是想得到4个不同占空比的PWM信号吗?

40

主题

113

帖子

340

积分

资深技术员

 楼主| 发表于 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;

8

主题

70

帖子

212

积分

中级技术员

发表于 2012-5-17 09:21 | 显示全部楼层 |返回版面
4# cd4066
对的,频率应该都是一样的,但可以输出不同占空比的波形

0

主题

5

帖子

15

积分

实习生

发表于 2012-5-20 14:01 | 显示全部楼层 |返回版面
同意6楼。。。

0

主题

52

帖子

156

积分

中级技术员

发表于 2012-5-23 17:08 | 显示全部楼层 |返回版面
I AGREE

0

主题

48

帖子

144

积分

中级技术员

发表于 2012-5-23 21:28 | 显示全部楼层 |返回版面
恩,频率肯定是一个,占空比可调
骑车去远方

0

主题

7

帖子

21

积分

实习生

发表于 2012-6-6 15:03 | 显示全部楼层 |返回版面
请问这种情况下,怎么设置不同PWM的输出IO口,有没有这方面的参考文档

47

主题

431

帖子

1309

积分

助理工程师

发表于 2012-12-24 23:09 | 显示全部楼层 |返回版面
请问楼主实现了没:一个定时器输出四路不同频率的PWM????

33

主题

76

帖子

228

积分

中级技术员

发表于 2013-3-20 09:11 | 显示全部楼层 |返回版面
用比较输出模式 输出的好像也是PWM波吧?那样的话就可以输出4路PWM

0

主题

2

帖子

6

积分

实习生

发表于 2014-7-14 12:37 | 显示全部楼层 |返回版面
四路不同频率的PWM输出,各位解决了没有啊

1

主题

2

帖子

6

积分

实习生

发表于 2014-11-4 22:00 | 显示全部楼层 |返回版面
四路不同频率的PWM输出,各位解决了没有啊

4

主题

83

帖子

249

积分

中级技术员

发表于 2015-1-22 15:15 | 显示全部楼层 |返回版面
用PWM模式是没办法输出不同频率的PWM波的,有人说用比较模式可以,我没有实现过

0

主题

77

帖子

231

积分

中级技术员

发表于 2015-1-23 12:52 | 显示全部楼层 |返回版面
四路频率一样,占空比不同的PWM
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

热门推荐上一条 /1 下一条

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