文章目录
一、PWM
(一)概念
PWM:脉冲宽度调制(Pulse-Width Modulation)
脉冲:高低电平变化的方波信号
周期(T):一个方波信号(高电平加上低电平)的时间
频率(F):1s产生方波信号的个数
周期和频率成反比:T=1/F F=1/T
占空比:一个方波信号中,高电平时间占整个方波信号周期的百分比
(二)蜂鸣器电路图
1. 蜂鸣器分类:有源和无源蜂鸣器
有源蜂鸣器:内部有一个RC振荡器,当给有源蜂鸣器供电时,内部的RC振荡器就会输出一个一定频率的方波信号,因此有源蜂鸣器一般采用高低电平信号进行驱动
无源蜂鸣器:内部没有RC振荡器,因此想要控制无源蜂鸣器发声,必须给无源蜂鸣器提供一个具有一定频率变化的方波信号,因此无源蜂鸣器一般采用PWM信号进行驱动
本次实验以有源蜂鸣器为例
2. 电路图
3. 引脚
二、芯片手册
(一)所属总线以及外设控制器寄存器的基地址
1. GPIOB
2. TIM4
(二)分析RCC章节,GPIOB和TIM4的时钟源使能
1. GPIOB
2. TIM4
(三)GPIO章节,设置PB6引脚的复用功能
1. 框图
3. 复用
AFRL寄存器的第[27:24]位
PB6的AF2复用功能为TIM4_CH1
AF2的值为0010
(四)TIM章节
1. 计数器
2. 频率和占空比
3. 分频器
4. 递增计数模式
5. 递减计数模式
6. 递增递减计数模式
三、TIM相关寄存器
(一)TIMx_CR1寄存器
1. Bit[7] ARR寄存器缓冲区使能
写0,缓冲区没有使能,向ARR中写入新值会立刻生效
写1,缓冲区使能,向ARR中写入新值,会在下次自动重载时生效
2. Bit[6:5] 对齐模式选择
00:边沿对齐模式,计数器根据方向位(DIR)的设置进行向上或向下计数。这是计数器的基本工作模式,其中中断或事件在计数器的每个计数边缘(通常是时钟信号的上升沿或下降沿)被触发
01:中央对齐模式1,计数器交替地进行向上和向下计数。但是,只有当计数器处于向下计数状态时,配置为输出模式的通道(在TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志才会被设置。这意味着,如果您希望在某些输出比较事件上触发中断,而这些事件仅与向下计数相关,则应选择此模式
10:中央对齐模式2,计数器也是交替进行向上和向下计数。但这次,只有当计数器处于向上计数状态时,配置为输出模式的通道的输出比较中断标志才会被设置。这适用于那些需要基于向上计数来触发中断的场景。
11:中央对齐模式3,计数器同样交替进行向上和向下计数。但是,与模式1和模式2不同,无论计数器是向上还是向下计数,配置为输出模式的通道的输出比较中断标志都会被设置。这提供了最大的灵活性,允许在任何计数方向上触发中断。
3. Bit[4] DIR计数方向
0:向上计数
1:向下计数
4. Bit[0] CEN 计数器使能位
0:计数器失能
1:计数器使能
(二) TIMx_CCMR1寄存器
1. Bit[16] Bit[6:4]
0110: PWM模式1
在向上计数时,只要TIMx_CNT < TIMx_CCR1,通道1就处于激活状态;否则处于非激活状态。(向上计数时,先高电平,当增加至捕获比较寄存器的值,就翻转为低电平)
在向下计数时,只要TIMx_CNT > TIMx_CCR1,通道1就处于非激活状态,否则处于激活状态。(向下计数时,先低电平,当减到捕获比较寄存器的值,就翻转为高电平)
0111: PWM模式2
在向上计数时,只要TIMx_CNT < TIMx_CCR1,通道1就处于非激活状态,否则处于激活状态。(向上计数时,先低电平,当增加至捕获比较寄存器的值,就翻转为高电平)
在向下计数时,只要TIMx_CNT > TIMx_CCR1,通道1就处于激活状态;否则处于非激活状态。(向下计数时,先高电平,当减到捕获比较寄存器的值,就翻转为低电平)
2. Bit[3]
0:TIMx_CCR1上的预装载寄存器被禁用。可以随时写入TIMx_CCR1,新值会立即生效
1: TIMx_CCR1上的预装载寄存器被启用。读写操作访问的是预装载寄存器。在每个更新事件发生时,TIMx_CCR1的预装载值会被加载到寄存器中。
3. Bit[1:0]
0: CC1通道被配置为输出。
01: CC1通道被配置为输入,IC1映射到TI1。
10: CC1通道被配置为输入,IC1映射到TI2。
11: CC1通道被配置为输入,IC1映射到TRC(定时器控制寄存器)。但此模式仅当通过TS位(TIMx_SMCR寄存器)选择了内部触发输入时才有效。
注意:仅当通道关闭时(即TIMx_CCER寄存器中的CC1E = 0),CC1S位才可写。这意味着在修改CC1S位之前,需要确保相关的捕获/比较通道已经被禁用。
(三)TIMx_CCER寄存器
1. Bit[1]
0:OC1高电平
1:OC1低电平
2. Bit[0]
0:OC1未使能
1:捕获比较1通道输出使能
(四)TIMx_PSC寄存器
(五)TIMx_ARR寄存器
(六)TIMx_CCR1寄存器
(七)BDTR寄存器(TIM1和TIM16)
1. TIM1
这个位(bit)在任何一个中断输入(BRK或BRK2)激活时,会被硬件异步清零。它的设置可以通过软件或根据AOE位自动设置。它仅作用于配置为输出模式的通道。
0:响应于第二个中断事件(break 2 event),OC和OCN输出被禁用。
响应于中断事件或如果MOE被写入0:OC和OCN输出被禁用,或者根据OSSI位被强制置于空闲状态。
1:如果它们各自的使能位(在TIMx_CCER寄存器中的CCxE、CCxNE)被设置,则OC和OCN输出被启用。
2. TIM16
0:根据OSSI位的状态,OC和OCN输出被禁用或被强制置于空闲状态。
1:如果它们各自的使能位(在TIMx_CCER寄存器中的CCxE、CCxNE)被设置,则OC和OCN输出被启用。