stm32f407之PWM(操作寄存器)
来源:互联网 发布:b站是网络社交平台吗 编辑:程序博客网 时间:2024/05/20 21:42
作者:w471176877
转自:http://blog.csdn.net/w471176877/article/details/7957332
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. 打开定时器。
程序:
- /************************************
- 标题:输出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)
- {
- };
- }
- stm32f407之PWM(操作寄存器)
- stm32f407之PWM(操作寄存器)
- stm32f407之高级定时器 死区互补PWM(操作寄存器)
- stm32f407之高级定时器 死区互补PWM(操作寄存器)
- stm32f407之GPIO(操作寄存器)
- stm32f407之EXTI(操作寄存器)
- stm32f407之USART(操作寄存器)
- stm32f407之DMA(操作寄存器)
- stm32f407之MyDebugger(操作寄存器)
- stm32f407之DAC(操作寄存器)
- stm32f407之ADC(操作寄存器)
- stm32f407之数字滤波(操作寄存器)
- stm32f407之CAN控制器(操作寄存器)
- stm32f407之ADC(操作寄存器)
- stm32f407之数字滤波(操作寄存器)
- stm32f407之CAN控制器(操作寄存器)
- stm32f407之DAC(操作寄存器)
- stm32f407之MyDebugger(操作寄存器)
- 简洁高效的LRU Map C++实现
- stm32f407之高级定时器 死区互补PWM(操作寄存器)
- QuickReport Delphi7完全解决方案
- codeforces 327 B. Hungry Sequence
- 对 JavaScript 下 namespace 功能的简单分析
- stm32f407之PWM(操作寄存器)
- 构造函数为什么不能是虚函数
- linux lsof详解
- stm32f407之基本定时器TIM6&TIM7(操作寄存器)
- Sed与AWK入门教程之Sed篇
- javascript中的对象
- 截获UIWebView的Request
- Android---在UI线程之外处理位图
- android一个用SimpleAdapter适配的ListView