STM8 学习笔记13:PWM

PWM

Gitee 空间跳转:https://gitee.com/galoc/stm8.git

1 概述

PWM也叫脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。频率、周期、占空比。

1.1 PWM 频率

是指在 1 秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说 1 秒钟 PWM 有多少个周期,单位 Hz。PWM信号的频率决定PWM完成一个周期的速度。

1.2 PWM 周期

T = 1/f,T是周期,f是频率。
如果频率为 50 Hz,也就是说一周期是 20 ms,那么 1s 钟就有 50 次 PWM 周期。

1.3 占空比

是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是 %(0% - 100%)一个周期的长度,如下图所示:
请添加图片描述

2 PWM 是如何让工作的?

在这里插入图片描述
ARR:自动重装载寄存器的值
CRRx:捕获/比较寄存器 x 的值
由上图可知,PWM 的周期或频率由 ARR 决定,PWM 占空比由 CCRx 决定

3 通用定时器输出比较部分框图介绍

在这里插入图片描述

3.1 捕获/比较通道1的主电路—输出部分

在这里插入图片描述
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。

3.2 捕获/比较通道的输出部分(通道1)

在这里插入图片描述

4 相关寄存器

  1. TIMx_CR1.CEN 计数器使能(Counter enable)
    0:关闭计数器
    1:使能计数器
  2. TIMx_CCMR1.CCIS[1:0] 捕获/比较 1 选择(Capture/Compare 1 selection)
    00:CC1 通道被配置为输出;
    01:CC1 通道被配置为输入,IC1 映射在 TI1 上;
    10:CC1 通道被配置为输入,IC1 映射在 TI2 上;
    11:CC1 通道被配置为输入,IC1 映射在 TRC 上。(此模式仅工作在内部触发器输入被选中时,由 TIMx_SMCR 寄存器的 TS 位选择)
    作用:用于定义通道的方向(输入/输出),及输入脚的选择。
  3. TIMx_CCMR1.OC1M 输出比较 1 模式(Output compare 1 mode)
    110:PWM 模式 1,在向上计数时,一旦 TIMx_CNT < TIMx_CCR1 时通道 1 为有效电平,否则为无效电平。在向下计数时,一旦 TIMx_CNT > TIMx_CCR1 时 通道 1 为无效电平,否则为有效电平。
    111:PWM 模式 2,在向上计数时,一旦 TIMx_CNT < TIMx_CCR1 时通道 1 为无效电平,否则为有效电平。在向下计数时,一旦 TIMx_CNT > TIMx_CCR1 时 通道 1 为有效电平,否则为无效电平。
    :有/无效状态由 TIMx_CCER.CCxP 决定
    作用:用于确定 PWM 输出模式
  4. TIMx_CCER.CC1P 捕获/比较 1 输出极性(Capture/Compare 1 output polarity)
    CC1 通道配置为输出:
    0:OC1 高电平有效
    1:OC1 低电平有效
    作用:用于配置输出极性
  5. TIMx_CCER.CC1E 捕获/比较 1 输出使能
    CC1 通道配置为输出:
    0:关闭 — OC1 禁止输出
    1:开启 — OC1 信号输出到对应的输出引脚。
  6. TIMx_BKR.MOE OC 输出使能(Main output enable)
    作用:CCxE 使能位被设置,OC输出被启用
  7. TIMx_ARR 自动重装载值 (Auto-reload value)
    作用:用于设置自动重装载值,范围:0-65535
  8. TIMx_CCR 捕获/比较寄存器值(Capture/compare register value)
    作用:用于设置捕获/比较寄存器值,范围:0-65535

5 通用定时器 TIM3_PWM 输出实验配置步骤

需求:PWM输出频率为 1KHz,占空比为 50%
配置:选择内部高速时钟 16MHz,不分频,定时器3向上计数模式、分频系数为 128,ARR 为 124。

  1. 配置 CLOCK、GPIO
  2. 配置定时器基础工作参数
  3. 配置 PWM 模式/比较值
  4. 使能输出并启动计数器

相关函数介绍如下表:

函数主要寄存器主要功能
Pwm_Clock_ConfigCLK_SWR.SWI、CLK_CKDIVR.CKM、CLK_PCKENR1.PCKEN11配置时钟源并使能相关外设时钟
Pwm_GPIO_ConfigPx_DDR.DDR[7:0]、Px_ODR.ODR[7:0]、Px_CR1.C1[7:0],Px_CR2.C2[7:0] 、SYSCFG_RMPCR3配置 GPIO 并复用为 TIM3_Chn
Pwm_TimBase_InitTIMx_PSCR.PSC[2:0]、TIMx_CR1.DIR、TIMx_ARRH、TIMx_ARRL、TIMx_CCER.CC1E配置定时器基础工作参数
Pwm_Cfg_InitTIMx_CCMR1.OC1M、TIMx_CCR1H、TIMx_CCR1L 、TIMx_CCER.CC1P配置 PWM 模式/比较值
Pwm_EnableTIMx_BKR.MOE、TIMx_CR1.CEN、asm(“rim\n”)使能输出并启动计数器

7 结果

gPwmDuty = 62; gPwmFreq = 124;
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于学习STM32的笔记,我可以给你一些基本的指导。首先,你需要了解STM32是一系列由STMicroelectronics公司开发的32位微控制器。它们具有广泛的应用领域,包括嵌入式系统、物联网和工业自动化等。 在学习STM32时,你可以按照以下步骤进行: 1. 硬件准备:获取一块STM32开发板,例如STM32F4 Discovery或NUCLEO系列。这些开发板通常带有一些外设和接口,便于学习和实验。 2. 开发环境搭建:下载并安装Keil MDK或者IAR Embedded Workbench等集成开发环境(IDE)。这些IDE提供了编译器、调试器和其他工具,方便你编写和调试STM32的代码。 3. 学习基本知识:了解STM32的体系结构、寄存器和外设等基本知识。可以通过阅读相关的参考手册、数据手册和应用笔记来深入了解。 4. 编写代码:使用C/C++语言编写STM32的应用程序。你可以使用相关的库函数来简化开发过程,如标准外设库(StdPeriph Library)或者新的STM32Cube库。 5. 调试和测试:使用调试器和仿真器来调试和测试你的代码。这些工具能够帮助你单步执行代码、观察寄存器和内存的状态,以及检查外设的操作。 6. 实践项目:尝试一些小型的项目,如LED闪烁、按键输入和PWM输出等,以巩固你的学习成果。随着经验的积累,你可以尝试更复杂的项目,如通信接口、传感器应用和无线通信等。 记得在学习过程中多查阅官方文档、参考资料和在线论坛,以便解决遇到的问题。祝你学习STM32的旅程愉快!如果你有具体的问题,欢迎随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值