其实对于一个电子工程师来讲 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_CNT<TIMx_CCR1 则为无效电平 反之为有效电平。在向下计数的时候当 TIMx_CNT>TIMx_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里面的值