OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14267|回复: 17

原子,你有用一个定时器产生4路PWM的例子吗?

[复制链接]

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-2-16
在线时间
10 小时
发表于 2011-7-30 12:36:51 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-30 15:26:06 | 显示全部楼层
我那个毕设就是用1个定时器产生三路
和你的四路差不多了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-2-16
在线时间
10 小时
 楼主| 发表于 2011-7-31 10:34:49 | 显示全部楼层
正点原子,我下的你毕业设计,你的一个定时器产生3路PWM的程序在那个文件下面


回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-31 10:40:28 | 显示全部楼层
就是那个控制彩灯的部分.
你打开工程就可以看到了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

21

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2011-6-30
在线时间
0 小时
发表于 2011-7-31 10:41:59 | 显示全部楼层
四路PWM输出
void RPWM_GPIO_Config(){//PA8,PA9作为TIM1通道1,2输出
RCC->APB2ENR|=1<<(2+0);
GPIOA->CRH&=0xFFFFFF00;
GPIOA->CRH|=0x000000BB;
GPIOA->ODR|=3<<8;
}

void RPWM_Init(u16 arr,u16 psc){
RCC->APB2ENR|=1<<11;
LPWM_GPIO_Config();

TIM1->ARR=arr;
TIM1->SC=psc;
TIM1->CCMR1|=7<<4;
TIM1->CCMR1|=1<<3;
TIM1->CCER|=1<<0;

TIM1->CCMR1|=7<<12;
TIM1->CCMR1|=1<<11;
TIM1->CCER|=1<<4;

TIM1->CR1|=1<<7;
TIM1->CR1|=1<<0;

TIM1->BDTR|=1<<15;
}

void LPWM_GPIO_Config(){
RCC->APB2ENR|=1<<(2+0);
GPIOA->CRL&=0xFFFFFF00;
GPIOA->CRL|=0x000000BB;
GPIOA->ODR|=3<<0;
}

void LPWM_Init(u16 arr,u16 psc){
RCC->APB1ENR|=1<<0;///定时器2时钟使能
RPWM_GPIO_Config();

TIM2->ARR=arr;
TIM2->SC=psc;
TIM2->CCMR1|=7<<4;
TIM2->CCMR1|=1<<3;
TIM2->CCER|=1<<0;

TIM2->CCMR1|=7<<12;
TIM2->CCMR1|=1<<11;
TIM2->CCER|=1<<4;

TIM2->CR1=1<<7;
TIM2->CR1|=1<<0;

TIM2->BDTR|=1<<15;
}
初始化:
LPWM_Init(900,0);
TIM2->CCR1=450;
TIM2->CCR2=450;
RPWM_Init(900,0);
TIM1->CCR1=450;
TIM1->CCR2=450;
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-31 10:43:52 | 显示全部楼层
楼主说是一个定时器产生丝路.
不过和你这个差不多了,无非就是增多两路罢了.楼主可以参考下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-2-16
在线时间
10 小时
 楼主| 发表于 2011-8-1 09:05:13 | 显示全部楼层
谢谢大家
回复 支持 反对

使用道具 举报

头像被屏蔽

95

主题

159

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
442
金钱
442
注册时间
2011-3-22
在线时间
6 小时
发表于 2011-8-1 20:32:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-8-2 01:39:21 | 显示全部楼层
其实和我们综合实验差不多.
如果综合实验+MP3模块,就和我毕设基本一样了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2011-8-26
在线时间
0 小时
发表于 2011-9-2 15:44:59 | 显示全部楼层
定时器3产生4路 WM程序(原子PWM实验代码稍微修改就可以了)
void WM_Init(u16 arr,u16 psc) 
{          
//此部分需手动修改 IO口设置 
RCC->APB1ENR|=1<<1;       //TIM3 时钟使能     
GPIOA->CRH&=0XFFFFFFF0;//PA8 输出 
GPIOA->CRH|=0X00000004;//浮空输入  

GPIOA->CRL&=0X0FFFFFFF;//PA7 输出 
GPIOA->CRL|=0XB0000000;//复用功能输出      
GPIOA->ODR|=1<<7;//PA7 上拉  

GPIOA->CRL&=0XF0FFFFFF;//PA6 输出 
GPIOA->CRL|=0X0B000000;//复用功能输出      
GPIOA->ODR|=1<<6;//PA6 上拉  

GPIOB->CRL&=0XFFFFFFF0;//PB0 输出 
GPIOB->CRL|=0X0000000B;//复用功能输出      
GPIOB->ODR|=1<<0;//PA6 上拉 

GPIOB->CRL&=0XFFFFFF0F;//PB1 输出 
GPIOB->CRL|=0X000000B0;//复用功能输出      
GPIOB->ODR|=1<<1;//PA1 上拉  
 
TIM3->ARR=arr;//设定计数器自动重装值  
TIM3->SC=psc;//预分频器不分频 

TIM3->CCMR1|=7<<4;  //CH1 WM2模式     
TIM3->CCMR1|=1<<3; //CH1 预装载使能      
TIM3->CCER|=1<<0;  //OC1  输出使能     
TIM3->CR1=0x8000;  //ARPE使能  

TIM3->CCMR1|=7<<12;  //CH2 WM2模式     
TIM3->CCMR1|=1<<11; //CH2 预装载使能      
TIM3->CCER|=1<<4;   //OC2  输出使能     
TIM3->CR1=0x8000;   //ARPE使能

TIM3->CCMR2|=7<<4;  //CH3 WM2模式     
TIM3->CCMR2|=1<<3; //CH3 预装载使能   
TIM3->CCER|=1<<8;  //OC3  输出使能     
TIM3->CR1=0x8000;   //ARPE使能

TIM3->CCMR2|=7<<12;  //CH4 WM2模式     
TIM3->CCMR2|=1<<11; //CH4 预装载使能      
TIM3->CCER|=1<<12;   //OC4  输出使能     
TIM3->CR1=0x8000;   //ARPE使能

TIM3->CR1|=0x01;    //使能定时器 3              
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-9-2 15:49:15 | 显示全部楼层
谢谢楼上的例子。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2012-8-1
在线时间
0 小时
发表于 2012-8-12 10:12:32 | 显示全部楼层
我用9楼的代码改的,TIM3输出四路PWM怎么PB0和PB1没有波形呢,一直是低电平。怎么回事呢?
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2012-8-1
在线时间
0 小时
发表于 2012-8-12 10:44:39 | 显示全部楼层
搞定了,忘记使能PB时钟了。真是的。
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2012-8-20
在线时间
1 小时
发表于 2012-9-12 09:29:04 | 显示全部楼层
回复【13楼】lianjiangdong:
搞定了,忘记使能PB时钟了。真是的。
---------------------------------
定时器3使能了,怎么还要使能PB时钟啊!
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-8-12 16:19:09 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥  如果两路输出的 arr 和 SC 不一样是不是只能用两个定时器来控制PWM了
STM32 学习中
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-12 21:21:41 | 显示全部楼层
是的.
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-5-8
在线时间
0 小时
发表于 2014-6-30 15:06:08 | 显示全部楼层
用库函数写很简单的
回复 支持 反对

使用道具 举报

352

主题

526

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1643
金钱
1643
注册时间
2014-7-11
在线时间
289 小时
发表于 2015-9-2 16:05:58 | 显示全部楼层
回复【17楼】baichixiaodaren:
---------------------------------
原子哥,一路定时器是不是只能产生一种频率不同占空比的PWM波形,要想用一个定时器产生4路不同频率的PWM波形,是不可能的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 00:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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