STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯

文章目录

  • STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯
    • 1.PWM
      • 1.1 PWM定义
      • 1.2 PWM参数
      • 1.3 基本原理
    • 2.STM32上的PWM
      • 2.1 PWM产生
      • 2.2 PWM相关寄存器
        • 2.2.1 捕获/比较模式寄存器(TIMx_CCMRx)
        • 2.2.2 捕获/比较使能寄存器(TIMx_CCER)
        • 2.2.3 捕获/比较寄存器(TIMx_CCRx)
    • 3. STM32CubeMx创建工程
      • 3.1 配置RCC
      • 3.2 配置SYS
      • 3.3 配置定时器TIM3
      • 3.4 配置定时器TIM4
      • 3.5 配置时钟
      • 3.6 生成项目
    • 4.keil代码编写
      • 4.1 定义变量
      • 4.2 打开PWM通道
      • 4.3 在while循环中写入调用代码
      • 4.4 编译成HEX,烧录
    • 5. 运行效果
    • 6. 总结
    • 7. 参考文章

软件版本:

STM32CubeMX:6.6.0
KEIl:5.37.0.0
FlyMcu:0.188
硬件:
STM32F103c8t6

1.PWM

1.1 PWM定义

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

1.2 PWM参数

  • pwm的频率:是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);也就是说一秒钟PWM有多少个周期

    单位: Hz

    表示方式: 50Hz 100Hz

  • pwm的周期:T=1/f(周期=1/频率),例如50Hz = 20ms 一个周期,如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期

  • 占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例

    单位: % (0%-100%)

    表示方式:20%

    脉宽时间占总周期时间的比例,就是占空比

1.3 基本原理

  • PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
  • 也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
  • PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压;PWM频率越大,相应越快。

在PWM输出模式下,除了CNT(计数器当前值)、ARR(自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值);
当CNT小于CCRx时,TIMx_CHx通道输出低电平;
当CNT等于或大于CCRx时,TIMx_CHx通道输出高电平;
这个时候就可以对其下一个准确的定义了:所谓脉冲宽度调制模式(PWM模式),就是可以产生一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx寄存器确定占空比的信号。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术

2.STM32上的PWM

2.1 PWM产生

STM32的定时器除了TIM6和7,其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。通用定时器产生PWM 的定时器框图如下:(其他定时器框图类似)

2.2 PWM相关寄存器

包含三个寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。在TIMx_CCMRx寄存器中的OCxM位写入110(PWM模式1)或111(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。

2.2.1 捕获/比较模式寄存器(TIMx_CCMRx)

下图为TIMx_CCMR1寄存器的各位描述:

这里需要使用的是模式设置位OCxM,总共有两种PWM模式,这两种PWM 模式的区别就是输出电平的极性相反。

  • 110:PWM模式1。在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
  • 111:PWM模式2。 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

2.2.2 捕获/比较使能寄存器(TIMx_CCER)

下图为TIMx_CCER寄存器的各位描述:

该寄存器控制着各个输入输出通道的开关。这里只用到了CC2E位,该位是输入/捕获 2 输出使能位,要想PWM 从 I/O 口输出,这个位必须设置为 1。

2.2.3 捕获/比较寄存器(TIMx_CCRx)

下图为TIMx_CCR1寄存器的各位描述:

在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果在OC1端口上产生输出信号。利用这点,我们通过修改这个寄存器的值实现控制 PWM 的输出脉宽。

3. STM32CubeMx创建工程

3.1 配置RCC

3.2 配置SYS

3.3 配置定时器TIM3

  1. 勾选Internal Clock(内部时钟)
  2. 通道1选择:PWM Generation CH1(PWM输出通道1)
  3. Prtscaler (定时器分频系数) : 71
  4. Counter Mode(计数模式):Up(向上计数模式)
  5. Counter Period(自动重装载值) : 500
  6. CKD(时钟分频因子) :No Division (不分频 )

3.4 配置定时器TIM4

TIM4配置与TIM3相同

由右边的芯片显示可知TIM3_CH1由PA6输出,TIM4_CH2由PB6输出

3.5 配置时钟

3.6 生成项目

4.keil代码编写

4.1 定义变量

在main.c中定义一个全局变量

uint16_t pwm=0;   //占空比

4.2 打开PWM通道

在主函数中添加两行代码

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);

4.3 在while循环中写入调用代码

while (pwm< 500)
{pwm++;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);  __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);           HAL_Delay(1);
}
while (pwm)
{pwm--;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);       HAL_Delay(1);
}
HAL_Delay(200);

4.4 编译成HEX,烧录

5. 运行效果

LED灯的短脚与PA6相连,PB6与PA13(最小板上自带的LED)相连

6. 总结

这次实验,对PWM的部分知识有了初步了解,并用使用定时器的TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动的外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。

7. 参考文章

STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯的效果_多吃点蔬蔡的博客-CSDN博客

sc=%7B%22request%5Fid%22%3A%22166737606116782412520549%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=166737606116782412520549&biz_id=0&spm=1018.2226.3001.4187)

使用STM32输出PWM波形_不#曾&轻听的博客-CSDN博客_stm32输出pwm波形

在STM上用PWM波形实现2个 LED呼吸灯相关推荐

  1. STM32F103C8T6核心开发板下,通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果

    使用TIM3和TIM4,分别输出一个PWM波形,驱动一个外接的LED灯以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 文章目录 使用TIM3和TIM4 ...

  2. 使用STM32输出PWM波形实现2个 LED呼吸灯

    目录 一.PWM简介 二.STM32配置PWM输出 三.keil仿真 四.烧录运行 五.现象 六.总结 七.参考链接 一.PWM简介 含义 PWM(Pulse Width Modulation)即脉冲 ...

  3. STM32输出PWM波形以及实现LED呼吸灯

    目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...

  4. 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...

  5. 使用STM32输出PWM波形LED呼吸灯的效果

    文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...

  6. STM32输出PWM波形及LED呼吸灯

    目录 一.PWM的介绍 1.概述 2.优点 3.主要产生方法 SPWM法 1.等面积法 2.硬件调制法 3.软件生成法 4.PWM电路图 5.PWM基本原理 二.cubemx项目的建立 1.选择芯片S ...

  7. 嵌入式——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    一.实验要求: 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼 ...

  8. 使用STM32输出PWM波形并驱动LED呼吸灯

    目录 前言 一.PWM 二.工程代码 1.用STM32CubeMx创建工程 创建新项目 配置RCC和SYS 配置定时器TIME3 配置定时器TIM4 配置时钟 生成项目 2.用Keil编写代码 3.硬 ...

  9. 嵌入式学习--使用定时器输出PWM波形,实现LED呼吸灯的效果

    目录 1.任务要求 2.PWM介绍 关于PWM的定义 分频-计数时钟 计数器 定时器输出PWM的原理 定时器的初始化 3.配置STM32CubeMX 4.keil5的代码 5.运行结果 6.心得与体会 ...

最新文章

  1. mysql ERROR 1045
  2. 黄聪:第2章 并发操作的一致性问题 (2)
  3. mysql开启function,Mysql自定義函數(function)
  4. 车小米O2O保养平台搭建完毕
  5. python issubclass 和 isinstance函数
  6. java分治_【Java算法】什么是分治算法?
  7. linux修复u盘文件系统,linux下转换U盘文件系统
  8. Python3输入输出
  9. linux php oauth安装,Linux php 扩展安装 mongo ,redis ,soap,imap,pdo_mysql,oauth
  10. 使用Symantec Altiris 来监控 Dell 服务器 的 硬件
  11. PHP PDO连接PostgreSQL报错 SCRAM authentication requires libpq version 10 or above in解决
  12. 从零实现SpringBoot简易读写分离,也不难嘛!
  13. 你该怎么去学软件测试,过来人告诉你
  14. 带时间窗的车辆路径规划问题(VRPTW)
  15. 【CRC】CRC推导(二)模二除法
  16. 珍藏的Android开发必备网站和工具(开发工具总结)
  17. 8 个你不知道的 DOM 功能
  18. 模型转换:pth转onnx
  19. 如何落户北京?19年积分落户规模为6000人!
  20. 【Java实现】南京地铁导航系统的简单实现(一)—— 存储站点信息

热门文章

  1. 通信售前工程师的总结
  2. 外汇买卖信息管理系统介绍
  3. Matlab 入门简介
  4. 西安交大计算机考研软件工程编程题库(二十)
  5. 关于Jlkink SDK的探讨
  6. Tree Shaking概念详解
  7. 如何搭建HTTPS服务?申请免费的https的证书
  8. mongodb中带条件的文档--$gte、 $gt、$lte、$lt、 $eq、 $ne、distinct、与、或($or),$in、$exists
  9. 线上突然查询变慢怎么核查
  10. c语言返回值作用,c语言的返回值是什么意思啊?