ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale

背景:IDF版本V5.1.2 ,配置ESP32 通用定时器,实现100HZ,占空比50% 的PWM波形。

        根据乐鑫官方的IDF指导文档设置内部计数器的分辨率,计数器每滴答一次相当于 1 / resolution_hz 秒。

(ESP-IDF编程指导文档:通用定时器 - ESP32 - — ESP-IDF 编程指南 release-v5.1 文档)

那我们根据官方的指导编写初始化ESP32通用定时器的代码:

设置 分辨率 resolution_hz = 1000,重装载值 reload_count = 5,

那根据计算 PWM周期 =1/((resolution_hz *reload_count )*2)  = 1/(1000*5*2) = 0.1 ms = 100HZ

        但是实际上,按照上面的代码调用gpTimer_Init(1000,10)配置,ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale /IDF/components/hal/esp32s3/include/hal/timer_ll.h:86 (divider >= 2 && divider <= 65536)

通过上面的报错,我们找到timer_ll_set_clock_prescale 函数的源代码:

通过查看timer_ll_set_clock_prescale 源码,我们发现该函数设置的分频值divider 必须是2~65536 !
 

分析:乐鑫官方的IDF指导文档设置内部计数器的分辨率,计数器每滴答一次相当于 1 / resolution_hz 秒,其中的resolution_hz 实际上并不是真正设置的分频值!!!

查看源码我们发现:gptimer_new_timer();会调用gptimer_select_periph_clock();然后调用timer_ll_set_clock_prescale();去设置真正的分频值!

通过上面的分析,想必大家都已经明白了问题的所在了

        乐鑫官方文档写的定时器 分辨率 =1 / resolution_hz 秒。其中的resolution_hz 不是定时器的预分频值(divider),只是分辨率!是为了开发者更方便设置定时器,但是resolution_hz 的值并不能随意设置。

        由于ESP32的通用定时器的时钟源APB为80MHZ,且分频器是16位的。

        所以 2 =< divider <= 65536

        那么 80000000/65536 = 1221 <= resolution_hz <= 40000000 = 80000000/2 

综上所述:乐鑫官方的定时器分辨率中的 resolution_hz 最大设置为40000000,最小1221 !

所以我gpTimer_Init(1000,10)配置resolution_hz =1000,定时器初始化就会报错:assert failed: timer_ll_set_clock_prescale /IDF/components/hal/esp32s3/include/hal/timer_ll.h:86 (divider >= 2 && divider <= 65536)

正确应该 调用gpTimer_Init(10000,50)设置 分辨率 resolution_hz = 10000,重装载值 reload_count = 50,1/((1/10000)*50*2))=100HZ。

就可以实现100hz 50% 占空比的PWM。

要是想测试 resolution_hz 最大设置为40000000 可以调用 gpTimer_Init(40*1000*1000,200*1000);也可以实现100hz 50% 占空比的PWM。

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

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

相关文章

AIGC在游戏设计中的应用及影响

文章目录 一、AIGC的基本概念与背景AIGC的主要应用领域AIGC技术背景 二、AIGC在游戏设计中的应用1. 自动化游戏地图与关卡设计示例&#xff1a;自动生成2D平台游戏关卡 2. 角色与物品生成示例&#xff1a;使用GAN生成虚拟角色 3. 游戏剧情与任务文本生成示例&#xff1a;基于GP…

【NOIP普及组】统计单词数

【NOIP普及组】统计单词数 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#x…

Spring Security(5.x, 6.x ) RBAC访问控制

在 Spring Security 中&#xff0c;基于不同版本实现 RBAC&#xff08;基于角色的访问控制&#xff09;功能有一些不同的方式。RBAC 的基本原理是&#xff1a;定义用户、角色和权限的关系&#xff0c;并控制不同用户对资源的访问。 Spring Security 不同版本的实现主要在配置方…

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文&#xff0c;数字&#xff0c;英文进行识别&#xff0c;同样数量的汉字和同样数量的英文像素长度是不一样的&#xff0c;当我们限定固定长度后&#xff0c;在界面上的排版不够美观 痛点2…

多个服务器共享同一个Redis Cluster集群,并且可以使用Redisson分布式锁

Redisson 是一个高级的 Redis 客户端&#xff0c;它支持多种分布式 Java 对象和服务。其中之一就是分布式锁&#xff08;RLock&#xff09;&#xff0c;它可以跨多个应用实例在多个服务器上使用同一个 Redis 集群&#xff0c;为这些实例提供锁服务。 当你在不同服务器上运行的…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…

发现了NitroShare的一个bug

NitroShare 是一个跨平台的局域网开源网络文件传输应用程序&#xff0c;它利用广播发现机制在本地网络中找到其他安装了 NitroShare 的设备&#xff0c;从而实现这些设备之间的文件和文件夹发送。 NitroShare 支持 Windows、macOS 和 Linux 操作系统。 NitroShare允许我们为…

【 ElementUI 组件Steps 步骤条使用新手详细教程】

本文介绍如何使用 ElementUI 组件库中的步骤条组件完成分步表单设计。 效果图&#xff1a; 基础用法​ 简单的步骤条。 设置 active 属性&#xff0c;接受一个 Number&#xff0c;表明步骤的 index&#xff0c;从 0 开始。 需要定宽的步骤条时&#xff0c;设置 space 属性即…

互联网技术净土?原生鸿蒙开启全新技术征程

鸿蒙生态与开发者的崭新机会 HarmonyOS NEXT承载着华为对未来操作系统的深刻理解&#xff0c;如今已发展为坚实的数字底座。它不仅在技术层面取得了全面突破&#xff0c;还在中国操作系统市场中站稳了脚跟。 当前&#xff0c;HarmonyOS NEXT的代码行数已超过1.1亿&#xff0c…

[linux驱动开发--API框架]--platform、gpio、pinctrl

1. 结构体定义和实例化 // 这个结构体样式并不固定&#xff0c;按需增减成员&#xff0c;可以参考内核的其他驱动代码 struct leddev_dev{dev_t devid; /* 设备号*/struct cdev cdev; /* cdev*/struct class *class; /* 类*/struct device *d…

从书本到代码:人工智能如何改变教育游戏规则?

内容概要 随着时代的发展&#xff0c;人工智能在教育领域展现出前所未有的潜力&#xff0c;成为推动教育改革的重要力量。它不仅仅是一种技术工具&#xff0c;更是一种变革的催化剂&#xff0c;促使传统教育模式必须进行自我反思和更新。通过利用智能算法&#xff0c;教育者可…

发布一个npm组件库包

Webpack 配置 (webpack.config.js) const path require(path); const MiniCssExtractPlugin require(mini-css-extract-plugin); const CssMinimizerPlugin require(css-minimizer-webpack-plugin); const TerserPlugin require(terser-webpack-plugin);module.exports {…

C#语言:现代软件开发的核心工具

在当今快速发展的软件行业&#xff0c;C#&#xff08;发音为“C sharp”&#xff09;已成为开发人员广泛采用的一种编程语言。它由微软公司开发&#xff0c;旨在提供强大的功能、简洁的语法和广泛的适用性。自2000年首次发布以来&#xff0c;C#已成为构建各种类型应用程序的理想…

若Git子模块的远端地址发生了变化本地应该怎么调整

文章目录 前言git submodule 相关命令解决方案怎么保存子模块的版本呢总结 前言 这个问题复杂在既有Git又有子模块&#xff0c;本身Git的门槛就稍微高一点&#xff0c;再加上子模块的运用&#xff0c;一旦出现这种远端地址发生修改的情况会让人有些懵&#xff0c;不知道怎么处…

长视频为什么在广告市场上节节败退?

作者&#xff1a;刀客doc 在广告市场&#xff0c;长视频网站的吸引力在减小&#xff0c;这是不争的事实。不过最近我发现&#xff0c;这一趋势还在加剧。 近期&#xff0c;一份QuestMobile的数据预测了互联网各类媒介的市场份额。其中5年来&#xff0c;在线视频广告的份额年年…

Kubernetes-编排工具篇-01-Kustomize与Helm对比

Kustomize与Helm对比 0、前言 K8s 是一个开源容器编排平台&#xff0c;可自动执行容器化应用程序的部署、扩展和管理。近年来&#xff0c;K8s 已成为采用云原生架构和容器化技术的组织的标准。 但是由于K8s的复杂性&#xff0c;所以很多公司以及开源组织都在开发相关的工具来…

量子电路的实现 基于ibm的qiskit

量子计算的物理实现 量子计算的实现有几种方式&#xff0c;最常用的就是超导量子计算机&#xff0c;它的量子处理器是用超导传输量子比特构建的&#xff0c;它是由一个约瑟夫森结和一个并联的电容器组成的电路。约瑟夫森结是一种非线性电感&#xff0c;由两层重叠的超导…

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤&#xff1a; ###1.确定应用目标和用户群体 在开始之前&#xff0c;你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如&#xff0c;如果你的应用是为了…

cmake中execute_process详解

execute_process 是 CMake 中一个非常强大的命令&#xff0c;用于在构建过程中执行外部程序或脚本。它提供了丰富的选项来控制执行过程&#xff0c;并可以捕获输出、错误和返回码。以下是 execute_process 的详细解析&#xff1a; 基本语法 execute_process(COMMAND <comm…

141/142题环形链表

本题返回环入口的位置。使用快慢指针&#xff0c;快指针每次移动两个&#xff0c;慢指针每次移动一个。设前一段距离是a,进入环内到slow和fast相遇的地点距离是b&#xff0c;环内剩下的距离是c&#xff0c;如图所示。 环的长度是bc 慢指针移动距离是ab 快指针移动距离是abk(bc…