ARM体系结构和接口技术(八)PWM实验

一、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输出被启用。

四、代码实现

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值