OpenEdv-开源电子网

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

高级定时器 死区互补PWM(转载)

[复制链接]

4

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-5-31
在线时间
7 小时
发表于 2016-6-7 22:18:22 | 显示全部楼层 |阅读模式
原文地址:http://blog.csdn.net/w471176877/article/details/7957345  


高级定时器的功能有很多,这里只介绍死区互补PWM输出功能。其实死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR。对寄存器的具体描述请参考数据手册。

        

         配置步骤:

1.     使能相关时钟。

2.     配置相关的引脚模式、速度、以及复用功能。

3.     使能TIM时钟

4.     设置分频。

5.     设置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx时钟

6.     产生一次更新事件,更新影子寄存器的值。

7.     在CCMR中设置PWM模式。

8.     设置各通道占空比。占空比= CCRx / ARR。

9.     使能比较输出。

10.  启动预装载。

11.  死区时间设定,使能输出。

12.  打开定时器。




程序

[plain] view plain copy


  • /************************************  
  •     标题:死区互补PWM  
  •     软件平台:IAR for ARM6.21  
  •     硬件平台:stm32f4-discovery  
  •     主频:168M  
  •   
  •     描述:三对死区互补PWM、一路普通PWM  
  •           PE8 ----- TIM1_CH1N  
  •           PE9 ----- TIM1_CH1  
  •           PE10 ----- TIM1_CH2N  
  •           PE11 ----- TIM1_CH2  
  •           PE12 ----- TIM1_CH3N  
  •           PE13 ----- TIM1_CH3  
  •           PE14 ----- TIM1_CH4  
  •       
  •     author:小船  
  •     data:2012-02-09  
  • *************************************/  
  •   
  • #include <stm32f4xx.h>   
  •   
  • void main ()  
  • {     
  •   
  •   SCB->AIRCR = 0x05FA0000 | 0x400;  //中断优先级分组 抢占:响应=3:1  
  •    
  •   RCC->AHB1ENR |= (1<<4); //打开GPIOE时钟  
  •   GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能  
  •         //推挽输出  
  •   GPIOE->OSPEEDR |= 0x3fff0000;//速度100m  
  •   GPIOE->PUPDR |= 0x15550000;//上拉   
  •    
  •   //PE8、9、10、11、12、13、14第二功能AF1  
  •   GPIOE->AFR[1] |= 0x01111111;  
  •    
  •   RCC->APB2ENR |= (1<<0); //打开TIM1时钟  
  •   TIM1->PSC = 167; //对时钟168M进行168分频,使得计数频率为1M  
  •   TIM1->ARR = 10000;  //周期10ms  
  •   TIM1->EGR |= 1; //产生一次更新事件  
  •    
  •   TIM1->CCMR1 |= 0x6060;//PWM模式1  
  •   TIM1->CCMR2 |= 0x6060;//PWM模式1  
  •    
  •   TIM1->CCR1 = 8000;//设置占空比  
  •   TIM1->CCR2 = 6000;  
  •   TIM1->CCR3 = 4000;  
  •   TIM1->CCR4 = 2000;  
  •    
  •   TIM1->CCER |= 0x1ddd;//使能比较输出  
  •    
  •   TIM1->CCMR1 |= 0x0808;//启动预装载  
  •   TIM1->CCMR2 |= 0x0808;  
  •    
  •   TIM1->BDTR|=1<<15;    // 刹车使能位置1,开启所有输出通道  
  •   TIM1->BDTR|=0xCD;     // 死区时间设定  
  •   TIM1->CR1 |= 1; //开始计时  
  •   
  •   while(1)  
  •   {  
  •   };  
  • }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 01:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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