打印
[STM32F4]

stm32f407之PWM(操作寄存器)

[复制链接]
1164|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energy1|  楼主 | 2015-3-30 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM
         脉宽调制模式可以生成一个由TIMx_ARR寄存器的值确定频率和TIMx_CCRx寄存器的值确定占空比的信号。
         可以对每个通道独立选择PWM模式,( OCx输出一个PWM信号)在TIMx_CCMRx寄存器的OCxM位写110(PWM模式1)或111(PWM模式2)。必须通过设置TIMx_CCMRx寄存器的OCxPE位,启用相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。
       仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。
        OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。TIMx_CCER寄存器中的CCxE位控制OCx输出使能。详见TIMx_CCERx寄存器的描述。
配置步骤:
1.     使能相关时钟。
2.     配置相关的引脚模式、速度、以及复用功能。
3.     使能TIM时钟
4.     设置分频。
5.     设置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx时钟
6.     产生一次更新事件,更新影子寄存器的值。
7.     在CCMR中设置PWM模式。
8.     设置各通道占空比。占空比= CCRx / ARR。
9.     使能比较输出。
10.  启动预装载。
11.  打开定时器。

沙发
energy1|  楼主 | 2015-3-30 20:47 | 只看该作者
程序:
[plain] view plaincopy


  • /************************************  
  •     标题:输出4路PWM  
  •     软件平台:IAR for ARM6.21  
  •     硬件平台:stm32f4-discovery  
  •     主频:168M  
  •       
  •     author:小船  
  •     data:2012-02-08  
  • *************************************/  
  •   
  • #include <stm32f4xx.h>   
  •   
  • void main ()  
  • {     
  •   
  •   SCB->AIRCR = 0x05FA0000 | 0x400;  //中断优先级分组 抢占:响应=3:1  
  •    
  •   RCC->AHB1ENR |= (1<<2); //打开GPIOC时钟  
  •   GPIOC->MODER |= 0X000AA000;//pc6789第二功能  
  •         //推挽输出  
  •   GPIOC->OSPEEDR |= 0x000ff000;//速度100m  
  •   GPIOC->PUPDR |= 0x00055000;//上拉   
  •    
  •   GPIOC->AFR[0] |= 0x22000000;//pc6789第二功能AF2  
  •   GPIOC->AFR[1] |= 0x00000022;  
  •    
  •   RCC->APB1ENR |= (1<<1); //打开TIM3时钟  
  •   TIM3->PSC = 83; //对时钟84M进行84分频,使得计数频率为1M  
  •   TIM3->ARR = 10000;  //周期10ms  
  •   TIM3->EGR |= 1; //产生一次更新事件  
  •    
  •   TIM3->CCMR1 |= 0x6060;//PWM模式1  
  •   TIM3->CCMR2 |= 0x6060;//PWM模式1  
  •    
  •   TIM3->CCR1 = 8000;//设置第一通道占空比80%  
  •   TIM3->CCR2 = 6000;//设置第二通道占空比60%  
  •   TIM3->CCR3 = 4000; //设置第三通道占空比40%  
  •   TIM3->CCR4 = 2000; //设置第四通道占空比20%  
  •    
  •   TIM3->CCER |= 0x1111;//使能比较输出  
  •    
  •   TIM3->CCMR1 |= 0x0808;//启动预装载  
  •   TIM3->CCMR2 |= 0x0808;  
  •    
  •   TIM3->CR1 |= 1; //开始计时  
  •   
  •   while(1)  
  •   {  
  •   };  
  • }  


使用特权

评论回复
板凳
powerful1| | 2015-3-30 21:01 | 只看该作者
可以对每个通道独立选择PWM模式

使用特权

评论回复
地板
vigous1| | 2015-3-30 21:30 | 只看该作者
脉宽调制模式可以生成一个由TIMx_ARR寄存器的值确定频率和TIMx_CCRx寄存器的值确定占空比的信号

使用特权

评论回复
5
Vitality1| | 2015-3-30 21:34 | 只看该作者
在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。

使用特权

评论回复
6
Vitality1| | 2015-3-30 21:44 | 只看该作者
可以对每个通道独立选择PWM模式

使用特权

评论回复
7
powerful1| | 2015-3-30 21:54 | 只看该作者

脉宽调制模式可以生成一个由TIMx_ARR寄存器的值确定频率和TIMx_CCRx寄存器的值确定占空比的信号

使用特权

评论回复
8
zh113214| | 2015-3-30 21:57 | 只看该作者
可以对每个通道独立选择PWM模式,确实是这样。。

使用特权

评论回复
9
vigous1| | 2015-3-30 22:06 | 只看该作者
OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。TIMx_CCER寄存器中的CCxE位控制OCx输出使能。详见TIMx_CCERx寄存器的描述。

使用特权

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

本版积分规则

94

主题

422

帖子

10

粉丝