STM32 定时器单脉冲模式的使用记录

news2024/11/18 20:43:00

一、我要解决的问题

我的需求

需要单片机几乎同时在A,B,C 三个IO 分别输出T1,T2,T3 时长的高电平,时间结束后,恢复低电平。

初步思路

面对这个需求,我第一时间想到的是用三个定时器,分别设置T1,T2,T3 时间的定时,定时结束之后,在中断处理函数,将对应的IO 拉低,但是这个做法有几点不好:

  • 产生了很多中断。
  • 如果程序有更高级的中断在响应,当前中断会得不到及时响应,影响时间的精度。
  • 程序结构比较分散。

解决办法

重新研究了一次定时器的功能,发现定时器的pwm 单脉冲功能,能完美解决这个问题。

二、定时器 pwm

先来整理一下普通的 定时器 pwm 功能的相关知识点。下面默认以计数器向上计数为例说明

2.1 定时器是如何产生pwm的?

在这里插入图片描述
图1

介绍一个pwm信号产生的过程

  1. 计时器从0 开始计数,在达到CCRx 值之前,输出口维持初始电平。
  2. 在计数值达到CCRx 时,电平翻转。
  3. 在计数值到达ARR 值时,电平再翻转(恢复初始电平),计数值复位为0。重新回到第1步。

上面流程循环执行,产生连续的pwm 波形。

2.2 几个重要的参数

2.2.1 预分频器(PSC)

值的范围是0 - 65535。定时器计数频率 = 定时器时钟频率/ ( PSC + 1)。

假设定时器的时钟频率的64M,PSC 设置为63,那么定时器计数频率是1MHZ,也就是每1us,计数值加1。

2.2.2 周期(Counter Period)

pwm 周期 = (ARR + 1)/ 定时器计数频率。

2.2.3 有效电平(CH Polarity)

可以设置为 High 或 Low。有效电平的影响,参考下面的PWM1 和PWM2 模式。

2.2.4 PWM1 和 PWM2 的区别

CNT < CCRxCNT > CCRx
PWM模式1有效电平无效电平
pwm 模式2无效电平有效电平

三、pwm 输出的特例:单脉冲输出

3.1 简介

单脉冲输出,就是只有一个输出周期的pwm。当计数器向上计数时,计数值到ARR时,计数器自动停止。当计数器向下计数时,计数值到0时,计数器自动停止。

在这里插入图片描述

图2

3.2 如何配置单脉冲模式

配置 TIMx_CR1 的OPM bit 为1,进入one-pulse mode。使用Cubemx 配置定时器时,勾选One Pulse Mode 前面的勾。

在这里插入图片描述

图3

3.3 如何使用单脉冲模式

单脉冲模式,分成两个阶段:Delay 阶段脉冲输出阶段

uint16_t pulse_delay = 50;
uint16_t pulse_width = 1000;
__HAL_TIM_SET_AUTORELOAD( &htim16, pulse_delay + pulse_width - 2 );
__HAL_TIM_SET_COMPARE( &htim16, TIM_CHANNEL_1, pulse_delay - 1 );
HAL_TIM_PWM_Start( &htim16, TIM_CHANNEL_1);

调用 __HAL_TIM_SET_AUTORELOAD 设置ARR 寄存器值,设置整个周期的长度。

调用 __HAL_TIM_SET_COMPARE 设置CCR1值,设置Delay 阶段的时间

四、我遇到的问题

4.1 问题描述

输出单脉冲信号之后,切换状态输出pwm,无法正常输出。步骤如下:

  • 先在TIM_CHANNEL_1 输出 常规pwm 波形,pwm 输出正常。
  • 然后在TIM_CHANNEL_1 输出单脉冲信号,单脉冲输出正常。
  • 再在TIM_CHANNEL_1 输出常规pwm 波形,无法输出pwm 信号。

4.2 解决步骤

4.2.1 重新初始化定时器

每次输出pwm 和单脉冲信号时,都重新完整初始化一次定时器,问题依然存在。

4.2.2 清空单脉冲配置位

配置输出pwm 信号之前,调用以下函数,复位单脉冲配置的状态

HAL_TIM_OnePulse_DeInit( &htim16 );
HAL_TIM_PWM_DeInit( &htim16 );

4.2.3 逐个寄存器比较定时器的配置

每次配置输出pwm 之前,打印一次当前定时器的配置(htim16. Instance 里面的各个成员函数),通过比较,发现 htim16.Instance->DMAR 这个参数被修改了。执行如下代码,问题解决:

HAL_TIM_OnePulse_DeInit( &htim16 );
HAL_TIM_PWM_DeInit( &htim16 );
htim16.Instance->DMAR = 0x00;

检查了一遍代码,无论是配置单脉冲输出模式,还是pwm 输出模式,都没配置dma 功能。但是在输出单脉冲信号之后,切换到pwm 模式,这个DMAR 寄存器的值就被改变了,暂时没找到原因

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

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

相关文章

Win10解决:系统管理员已阻止你运行此应用

前言 Win10安装msi软件包时出现错误提示如下&#xff1a; 解决 按【winR】快捷键打开运行&#xff0c;输入gpedit.msc回车依次进入”Windows设置“—”安全设置“—”本地策略“–”安全选项“—”用户账户控制&#xff1a;以管理员批准模式运行所有管理员“—双击&#xf…

JUC系列(六) 线程池

&#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️你好啊&#xff01;小伙伴&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;擅…

若依 数据权限图文详细理解及改造

数据权限 所谓数据权限&#xff0c;就是根据不同角色的登录用户&#xff0c;查看不同的列表数据 若依数据权限 若依的数据权限也是基于角色实现的&#xff0c;支持五种权限模式&#xff0c;按权限大小一次排列&#xff1a; 全部数据权限&#xff0c;表示拥有所有部门的数据…

远程办公:通过cpolar内网穿透,远程桌面控制家里公司内网电脑

疫情反反复复的当下&#xff0c;有时候会遇到需要居家办公的情况&#xff0c;但在办公室的电脑上仍有很多重要资料需要存取&#xff0c;且办公室所在的局域网中也有很多相关资源需要被访问&#xff08;如文件共享服务器、OA系统等&#xff09;。如何能在家通过远程处理好办公事…

Blend for Visual Studio 概述

https://learn.microsoft.com/zh-cn/visualstudio/xaml-tools/creating-a-ui-by-using-blend-for-visual-studio?viewvs-2022 Blend for Visual Studio 可用于设计基于 XAML 的 Windows 和 Web 应用程序。 它提供了与 Visual studio 相同的基本 XAML 设计体验&#xff0c;并添…

长安汽车董事长下场宣传原力技术 全擎引领电动化出行普及时代

11月30日&#xff0c;长安汽车董事长朱华荣在朋友圈发布了长安汽车擘画未来的全新能源及电动化解决方案&#xff1a;长安原力技术——原力智能增程、原力超集电驱。长安汽车成为业内首个通过微信朋友圈发布全新技术方案的车企。短短的3分钟视频&#xff0c;展露着长安汽车对技术…

Mand Mobile - 滴滴出品的适用于金融项目的 Vue 移动端 UI 组件库,免费开源、灵活快速、丰富实用

推荐一款可用性很强的移动 UI 组件库&#xff0c;交互细致&#xff0c;有不少直接就可以用的金融行业的组件。 关于 Mand Mobile Mand Mobile 是一款由滴滴前端团队出品、专为金融场景设计的移动端 Vue 2 组件库&#xff0c;可以帮助前端开发者快速构建项目&#xff0c;UI 风…

ShaderLab实现序列帧动画

序列帧动画介绍 序列帧动画的原理比较简单,依次播放一系列关键帧图像,当播放速度达到一定数值时,看起来就是一个连续的动画。 序列帧动画有很多实现方式,而通过Shader来实现是性能比较好的一种,是由GPU来进行计算。 效果如下 我们使用一张8x8的纹理图片来实现帧动画 步…

单相半波可控整流电路仿真设计(任务书+lunwen+MATLAB仿真源文件)

目 录 摘 要 4 关键字 4 ABSTACT 5 Key words 5 1 绪论 7 1.1半波整流简介 7 1.2 本文研究的内容 7 1.3 单相半波可控整流电路建模与基本参数 7 2 单相半波可控整流电路&#xff08;电阻性负载&#xff09; 10 2.1 电路的结构与工作原理 10 2.2 Matlab下的模型建立 10 2.3 仿真…

使用字典映射关系格式化输出字符串format_map()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 使用字典实现格式化输出 format_map()方法 [太阳]选择题 以下python代码输出正确的一项是? s1姓名&#xff1a;{name}&#xff0c;职业&#xff1a;{job} dict1{name:张三,job:学生} print(…

MP5705 底板 用户手册

一、开发板简介1.1 产品简介 MP5705开发板底板适配本公司相关核心板&#xff0c;型号为MP5650&#xff08;详见MP5650用户手册&#xff09;。通过核心板底板的模式来设计组成完整的开发。底板与核心板采用4个120pin高速板间连接器对插&#xff0c;型号为PANASONIC公司的AXK5A2…

PCL 曲率计算

一、曲率 点云的曲率及计算_点云侠的博客-CSDN博客_点云曲率计算 曲率是曲线弯曲程度的一个度量。 曲率的分类&#xff1a; 1、主曲率、平均曲率、高斯曲率 主曲率&#xff1a; 主曲率计算源码&#xff1a; // template <typename PointInT, typename PointNT, typen…

在低容错业务场景下落地微服务的实践经验

作者&#xff1a;禾连健康 “健康体检是一个低容错的场景&#xff0c;用户到医院体检&#xff0c;由于 IT 原因导致无法完成预约的项目&#xff0c;会对用户体验造成极大的影响。”* ——禾连健康 CTO 邓志豪 禾连健康成立于 2014 年&#xff0c;是一家从体检场景切入的健康管…

Proxmox虚拟环境搭建

一、Proxmox VE简介 ProxmoxVE 是一个完整的、开源的企业虚拟化服务器管理平台。它在单个平台上紧密集成了 KVM 管理程序和 Linux 容器(LXC)、软件定义的存储和网络功能。通过集成的基于 web 的用户界面&#xff0c;您可以轻松地管理虚拟机和容器、集群高可用性或集成的灾难恢…

界面控件DevExtreme——轻松将TreeList数据导出为PDF格式

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

DevOps的流程与规范介绍

在DevOps中想要实现快速、高质量的业务交付&#xff0c;流程和规范是至关重要的。流程包含软件从需求提出到产品上线投产全套生命周期的所有环节&#xff0c;如需求提出、代码提交、上线流程等。规范包含敏捷需求分解规范、用户故事编写规范、需求输出表等。 一、流程 流程用…

[附源码]计算机毕业设计游戏交易平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

链表高频笔试的OJ题

文章目录 一、合并两个有序链表 解题代码 二、反转链表 解题代码 三、分割链表 解题代码 四、链表的回文结构 解题代码 五、链表相交 解题代码 六、环形链表 解题代码 七、复制带有随机指针的复制链表 解题代码 一、合并两个有序链表 题目来源&#xff1a;牛客网。 题目难度&a…

公共用房管理系统有哪些功能和范围?

数图互通房产管理 数图互通公共用房管理系统的管理功能和范围包括: 1、对全部公房进行图形化、电子化、规范、动态化管理。 2、房屋数据定义:可对校区、片区、建筑物、楼层、房间数据进行增删改查&#xff0c;对房间属性数据进行批量修改。 3、档案及多类型附件管理:可对房…

自适应滤波器更新算法-EP1

自适应滤波器更新算法-EP1 自适应滤波器是回声消除系统中非常重要的一个功能模块&#xff0c;而对于自适应滤波器来说&#xff0c;如果更新滤波器系数则是关键所在。本文将介绍几种现有的滤波器更新算法&#xff0c;并附上Matlab测试代码。 1、LMS算法 1.1算法原理 LMS算法即…