高级定时器的功能有很多,这里只介绍死区互补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)
- {
- };
- }
|