2018-11-28 关于stm32F2XX系列的PWM问题

其实对于一个电子工程师来讲 PWM应该是很平常的基本知识 这里只是复习一下 因为项目中要用到 所以对于一些细节要再一次的重申一下 这里不讲PWM的原理知识 直接从寄存器和标准库入手。


首先要注意的是stm32f2 的定时器是在APB上面 下面是时钟树:


底下是官方文档的几段话:


由图和这几段话可以看出 定时器是挂在APB1上面 而APB1的最高时速是30Mhz 那么也就是说定时器最大的频率是30Mhz.

注意 TIMx_ARR 取决了 整个pwm的频率。

好了 开始看PWM: 首先stm32的PWM有两种模式 PWM1 和PWM2

PWM1 当TIMX_CCRX<= TIMX_CNT 的时候   OCxREF 为高。

PWM2 当TIMx_CNT <= TIMX_CCRX的时候  OCxREF 为低 。

我们来看一下这几个寄存器是作用: 首先是TIMX_CCRX : 这个是捕获或者是比较寄存器 在捕获功能中当捕获计时作用 在PWM中用作比较寄存器 这个数字会被在设置pwm的时候设置,这个寄存器会和TIMx_CNT进行比较 TIMx_CNT寄存器是定时器的计数器 也就说这个计数器会在程序运行的时候自动加减。  OCxREF寄存器是reference 为了区分pwm模式的


当使用PWM1 的时候: 当向上计数的时候 若 TIMx_CNT <= TIMX_CCRX 输出的通道为有效电平(有效电平可以设置成高电平或者低电平) 如果反之这为无效电平。 在向下计数的时候如果TIMX_CCRX<= TIMX_CNT 则为无效电平 反之则为有效电平。


PWM2: 模式当向上计数的时候如果 TIMx_CNTTIMx_CCR1的时候为有效电平 反之为无效电平。

配置过程: 

                1. 首先配置时钟: 打开相应的PWM所需要的定时器的时钟

                2. 配置基本定时器(为了配置频率arr的值)

               3. 配置PWM的变量: TIM_OCMode: 设置pwm的模式 PWM1 或者PWM2

                                                   TIM_OutputState:  是否输出PWM 

                                                   TIM_Pulse: 需要存储的比较值(就是存入到TIMx_CCR1)的值。

                                                 TIM_OCPolarity: 输出的有效极性是什么

                                                TIM_Output_Compare_Idle_State: 无效的极性是什么。



一些配置的函数: TIM_OCxInit: 配置通道

                          TIM_SelectOCxM 重新选择通道的输出模式

                         TIM_SetComparex: 比较定时器里面的值和新填装的CCRx里面的值

你可能感兴趣的:(2018-11-28 关于stm32F2XX系列的PWM问题)