STM32CubeIDE基础学习-定时器PWM实验

STM32CubeIDE基础学习-定时器PWM实验


文章目录

  • STM32CubeIDE基础学习-定时器PWM实验
  • 前言
  • 第1章 硬件介绍
  • 第2章 工程配置
    • 2.1 基础工程配置部分
    • 2.2 生成工程代码部分
  • 第3章 代码编写
    • 3.1 查看PWM波
    • 3.2 设置单个比较值
    • 3.3 呼吸灯
  • 第4章 实验现象
  • 总结


前言

在平时单片机开发时,需要用到单片机输出一个固定占空比,那么就可以采取PWM脉冲调制技术了。

PWM在STM32的应用中还是比较常用的,比较多的设备是需要用PWM来驱动的,比如舵机、步进电机等。

STM32CubeIDE基础知识学习回顾

实验目的:
学习使用定时器输出PWM功能,实现定时器输出占空比从而可以在开发板的LED灯看效果功能。

注意:查看本实验现象要要用到示波器工具,这个要懂得示波器基础使用才行。


第1章 硬件介绍

LED灯的连接原理图如下:

在这里插入图片描述
由上图硬件连接原理图可知,LED接到主控芯片的PA8引脚上,想要看输出的PWM波,可以直接选择LED所在的引脚作为定时器输出通道就可以看到具体现象了。

实验过程中,用肉眼单纯看PWM的占空比是看不出来的,那么需要借助工具才行,我查看波形采用正点原子的DS100示波器,这个示波器的性能用在本实验是足够了,可以查看占空比、周期、时间宽度和占空比对应的电压等。

接着打开芯片数据手册,下拉找到PA8引脚所在的位置,如下图所示:

在这里插入图片描述

该PA8引脚所在定时器1的通道1上,所以后面配置这个定时器通道输出PWM即可。

当然,如果手上有示波器,就不一定要选LED所在的输出通道了,直接选一个定时器输出通道即可,直接用示波器来看输出的波形或占空比也是很方便的。

第2章 工程配置

2.1 基础工程配置部分

本实验采用LED实验的工程作为模板,直接在上面添加定时器PWM的功能配置即可。

第一步:配置定时器时钟源。

在这里插入图片描述
按照标号步骤依次选择即可,定时器1使用的是内部时钟源,通道1输出。

第二步:配置定时器相关参数。

在这里插入图片描述
根据定时器公式,PSC取7199,ARR取99,向上计数模式。

第三步:配置PWM参数。

在这里插入图片描述

采用PWM1模式,极性为高电平有效,这里参数Pulse的值就是CCRx的值,用来设置初始占空比的值,在初始化时,可以设置也可以不设置,让其默认为0,这里问题不大,后面在实际使用时还是会改变该值的。那么为了查看初始PWM的情况这里就初始化设置为ARR值的一半,即初始为50%的占空比。输出比较默认为使能即可。

到此,定时器及PWM功能配置完成之后,可以看到芯片的PA8引脚被配置为了TIM1_CH1了,如下图所示:

在这里插入图片描述

2.2 生成工程代码部分

配置完功能之后就可以点击生成工程代码了。

可以看到main文件多了一个定时器的初始化函数和tim.c文件,如下图所示:

在这里插入图片描述
进入定时器初始化函数后如下图所示:

在这里插入图片描述

里面主要是设置定时器相关参数等。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
到此,检查生成初始化代码部分没有问题后就可以编写完成后面的控制功能代码就可以了。

第3章 代码编写

3.1 查看PWM波

在输出PWM之前,需要使能输出通道才可以,即使能CC1E位,使能之后就可以输出PWM了,不然是无法正常输出的。main函数调用使能函数如下图所示:

在这里插入图片描述

到此,前面设置PWM参数时,已经设置了Pulse的值为50了,那么使能输出通道之后不用写其它代码就可以正常输出一个50%占空比的PWM波了。

下面就用示波器来查看该波形情况,效果如下图所示:

在这里插入图片描述

根据公式计算和结合示波器输出参数,可以看到占空比是50%,周期是10ms,频率100Hz。经过示波器的参数显示分析,它们参数一致则说明代码的设置是正确的。

3.2 设置单个比较值

使能初始化正常之后,就可以调用函数来设置CCRx的值来设置指定PWM占空比了。

HAL库提供了一个设置比较值函数,__HAL_TIM_SET_COMPARE(HANDLE, CHANNEL, COMPARE);
该函数的第一个参数是定时器句柄、第二个是定时器输出通道、第三是比较值。

函数具体定义如下所示:

在这里插入图片描述

在while循环里面调用该函数,然后传入相关参数,如下图所示:

在这里插入图片描述
这里传入100则是占空比为100%了。下面以传入30为例演示:

代码片示例如下:

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 30);/* USER CODE END WHILE */}

下载代码后,示波器检测波形如下图所示:

在这里插入图片描述
函数比较值传入30,即占空比为30%,高电平电压为1.07接近1.1了。说明这个函数设置的比较值是没有问题的。

3.3 呼吸灯

能正常独立设置单个比较值之后,就可以把该变量设置为实时动态变化的数值,按规律递增或递减改变,这样就可以实现一个类似呼吸灯的效果了。

代码片示例如下:

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_Delay(30);       /* 控制速度 */if(dir){pwm_val++;if(pwm_val >= 99){dir = 0;}}else{pwm_val--;if(pwm_val == 0){dir = 1;}}__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val);/* USER CODE END WHILE */}

定义局部变量如下图所示:

在这里插入图片描述

在这里插入图片描述

下载代码后,就可以看到开发板的LED逐渐变亮,再由最亮逐渐变暗了,类似呼吸灯效果。要是想要显示呼吸的快慢不一样,设置延时参数即可,时间越短,速度越快。

注意:这个比较值最大是100,实际测试时发现到80时LED基本可以达到最亮了,所以会看到亮的时间会比较长些,如果要亮的时间和灭的时间差不多,可以设置最大的值限制为80,而不用到99了,根据实际情况设置即可。

第4章 实验现象

看上面具体内容介绍即可。


总结

定时器输出PWM功能还是比较好玩的,能弄懂这个功能的使用,可以应用到很多的场景了,可以控制输出固定的电压,STM32的IO最大输出是3.3v的,按照前面的例子来等分就可以得到相应的电压值了。呼吸灯的效果也很有意思,类似手机的消息提示了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JQuery(一)---【JQuery简介、安装、初步使用、各种事件】

零.前言 在学习JQuery前,您需要具备以下知识: HTML相关知识(DOM)CSS相关知识JavaScript相关知识 一.JQuery 1.1JQuery简介 JQuery是一个JavaScript的“函数库”,不是JavaScript的一个框架,与“VUE、REACT”有本质区别&#x…

字符串匹配问题(strs)(栈)

字符串匹配问题(strs) 【题目描述】 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式&#xff0c;从内到外必须是<>,(),[],{}&#xff0c;例如。输入: [()] 输出:YES&#xff0c;而输入([])&#xff0c;([)]都应该输出…

IPSEC VPN双机热备份的配置讲解一

IPSEC VPN双机热备份的配置讲解一 VPN 是一种专用网络&#xff0c;可使用公共网络连接两个或两个以上的远程站点。VPN 可使用通过公共网络路由&#xff08;以隧道方式发送&#xff09;的虚拟连接&#xff0c;而非网络之间的专用连接。IPsec VPN 是一项协议&#xff0c;由建立 …

HTML如何设置字体样式?

HTML如何设置字体样式&#xff1f; 我们开发一个页面时&#xff0c;会经常涉及到文字部分。HTML 默认的字体样式为宋体&#xff0c;12px。如果我们不想设置字体为宋体的话&#xff0c;需要为它更改样式。HTML 字体样式的更改需要用到 CSS。 CSS 常用的字体属性有五种&#xf…

DHCP-PXE

Dynamic Host Configuration Protocol 动态主机配置协议 1.Selinux 调试为Permission 防火墙配置 搭建DHCP的主机必须有一个静态地址&#xff0c;提前配置好 安装DHCP软件 服务名为dhcpd DHCP地址分配四次会话&#xff0c; DISCOVERY发现 OFFER 提供 REQUEST 回应 A…

【C++】每日一题 380 O(1)时间插入,删除和获取随机元素

实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。 bool remove(int val) 当元素 val 存在时&#xf…

代码随想录算法训练营第42天| 背包问题、416. 分割等和子集

01 背包 题目描述&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包&#xff1a; 确定dp数组以及下标的含义 …

实景三维技术也是一种新质生产力

实景三维技术作为一种新兴的技术手段&#xff0c;正在逐渐被认为是一种新质生产力。它通过高精度的数据采集、处理和可视化&#xff0c;为多个行业领域提供了全新的工作方式和解决方案&#xff0c;从而推动了生产力的发展和创新。以下是实景三维技术作为新质生产力在不同方面的…

2024年华为OD机试真题-最长的指定瑕疵度的元音子串-Java-OD统一考试(C卷)

题目描述: 开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如: “a” 、 “aa”是元音字符串,其瑕疵度都为0 “aiur”不是元音字符串(结尾不是元音字符) “abira”是元音字符串,其瑕疵…

Mac 配置 Aria2

文章目录 1. Aria2 安装1.1 安装 brew1.2 安装 Aria2 2. 配置 Aria22.1 创建配置文件 aria2.conf 和空对话文件 aria2.session2.2 编辑配置文件 aria2.conf 3. 开机启动设置3.1 创建用户启动文件3.2 管理自启动项 4. 配置 BT tracker 自动更新4.1 XIU2/TrackersListCollection …

通义灵码-ai编码

https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordIdb1ef3ba27250a5818b1b6ffe418af658#/?utm_contentm_fission_1 「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」

Python笔记|列表推导式

用列表推导式创建列表的方式更简洁。常见的用法为&#xff0c;对序列或可迭代对象中的每个元素应用某种操作&#xff0c;用生成的结果创建新的列表&#xff1b;或用满足特定条件的元素创建子序列。 例如&#xff0c;创建平方值的列表&#xff1a; >>> squares [] &…

【Kafka】Kafka安装、配置、使用

【Kafka】安装Kafka 1. 安装Kafka2. Kafka使用2.0 集群分发脚本xsync(重要)2.0.1 scp命令2.0.2 rsync远程同步工具2.0.3 写一个集群分发脚本xsync (Shell 脚本) 2.1 Zookeeper安装2.2 对Kafka进行分发2.2.1 执行同步脚本2.2.2 三台云主机配置Kafka环境变量 1. 安装Kafka Kafka…

《QT实用小工具·十五》多种样式的开关控件

1、概述 源码放在文章末尾 目前实现了三种样式的开关控件按钮&#xff0c;如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef IMAGESWITCH_H #define IMAGESWITCH_H/*** 图片开关控件 * 1. 自带三种开关按钮样式。* 2. 可自定义开关图片。*/#include <QWid…

多層解壓p

import os import subprocess from tqdm import tqdm def extract_compressed_file(file_path, passwordNone, extract_path"."):"""解压单个压缩文件到指定目录&#xff0c;并实时显示解压进度Parameters:- file_path (str): 压缩文件的完整路径- pa…

FreeRtos入门-7 中断管理

中断管理 中断管理相比非中断的优势 1&#xff0c;简洁和效率。 2&#xff0c;同步和安全。提供了中断安全的操作&#xff0c;确保在中断上下文中执行时不会引发竞态条件或破坏系统状态。 3&#xff0c;通过配置中断的优先级&#xff0c;可以确保高优先级的中断能够立即响应…

配置Mysql集群主从复制报错

配置Mysql集群主从复制报错: 我在master创建了一个数据库&#xff08;demo_ds_0&#xff09;,然后又快速删除了。然后又再次创建了 demo_ds_0, 发现 slave 数据库没有将 demo_ds_0 库同步过来。 后面在 slave 数据库中执行 show slave status 发现 SLave_IO_Running 字段是 …

浏览器控制台(console)中JS的常用方法:获取元素、鼠标点击、键盘输入等

文章目录 1.获取元素的常用方法(1)获取tabs列表(国内版/国际版)2.模拟输入框input的输入3.模拟点击click()1.获取元素的常用方法 // 1 根据元素IDlet img = document.getElementById("m1");// 2 根据元素标签--元素列表let div

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手&#xff0c;详细说明了如何配置开发环境、构建系统镜像等过程&#xff0c;详细描述了烧录过程中的关键步骤&#xff0c;以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

蓝桥杯每日一题:公约数(gcd)

题目描述&#xff1a; 给定两个正整数 a 和 b。 你需要回答 q 个询问。 每个询问给定两个整数 l,r&#xff0c;你需要找到最大的整数 x&#xff0c;满足&#xff1a; x 是 a和 b 的公约数。l≤x≤r。 输入格式 第一行包含两个整数 a,b。 第二行包含一个整数 q。 接下来…