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。
相关文章:
ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale
背景:IDF版本V5.1.2 ,配置ESP32 通用定时器,实现100HZ,占空比50% 的PWM波形。 根据乐鑫官方的IDF指导文档设置内部计数器的分辨率,计数器每滴答一次相当于 1 / resolution_hz 秒。 (ESP-IDF编程指导文档&a…...
基于Python的旅游景点推荐系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【开源社区】ELK 磁盘异常占用解决及优化实践
1、问题及场景描述 本文主要讨论在 CentOS环境下基于 rpm 包部署 ELK 系统磁盘异常占用的问题解析和解决方案。 生产问题描述:以下问题现实场景基于ELK体系下,ES服务的磁盘占用问题解析。默认情况下,基于 RPM 安装的 Elasticsearch 服务的安…...
达梦数据守护集群_动态增加实时备库
目录 1、概述 2、实验环境 2.1环境信息 2.2配置信息 2.3 查看初始化参数 3、动态增加实时备库 3.1数据准备 3.2配置新备库 3.3动态增加MAL配置 3.4 关闭守护进程及监视器 3.5修改归档(方法1:动态添加归档配置) 3.6 修改归档&…...
计算机基础:Ping、Telnet和SSH
文章目录 PingTelnetSSLSSH隧道 Ping Ping和Telnet是两种常见的网络工具,它们分别用于测试网络连接和检查服务端口的连通性。 Ping是一种网络工具,用于测试主机之间的连通性。它通过发送ICMP(Internet Control Message Protocol)…...
Java教学新动力:SpringBoot辅助平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理教学辅助平台的相关信息成为必然。开发合适…...
24/11/3 算法笔记 Adam优化器拆解
Adam 优化器是一种用于深度学习中的自适应学习率优化算法,它结合了两种其他流行的优化方法的优点:RMSprop 和 Momentum。简单来说,Adam 优化器使用了以下方法: 1. **指数加权移动平均(Exponentially Weighted Moving …...
浅谈语言模型推理框架 vLLM 0.6.0性能优化
在此前的大模型技术实践中,我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力,大模型的分布式训练得以化繁为简。 然而,企业又该如何将训练完成的模型实际应用部署,持续优化服务吞吐性能…...
【大数据学习 | kafka高级部分】kafka中的选举机制
controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举,这个选举是借助于zookeeper的独享锁实现的,先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息,谁创建成功了谁就是主…...
MySQL limit offset分页查询可能存在的问题
MySQL limit offset分页查询语句 有 3 种形式: limit 10:不指定 offset,即 offset 0 ,表示读取第 1 ~ 10 条记录。limit 20, 10:offset 20,因为 offset 从 0 开始,20 表示从第 21 条记录开始…...
CODESYS可视化桌面屏保-动态气泡制作详细案例
#一个用于可视化(HMI)界面的动态屏保的详细制作案例程序# 前言: 在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows…...
华为 Atlas500 Euler 欧拉系统操作指南
华为 Atlas500 Euler 欧拉系统操作指南 ssh root连接 找到Atlas500的IP地址,如:192.168.1.166 账号/密码:admin/Huawei123 root/密码:Huawei123456 #直接使用root ssh连接 这里受限不让直接用root连接 ssh root192.168.1.116 #…...
Chromium127编译指南 Mac篇(六)- 编译优化技巧
1. 前言 在Chromium127的开发过程中,优化编译速度是提升开发效率的关键因素。本文将重点介绍如何使用ccache工具来加速C/C代码的编译过程,特别是在频繁切换分支和修改代码时。通过合理配置和使用这些工具,您将能够显著减少编译时间ÿ…...
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列 《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列分配给套接字的IP地址和端口号网络地址网络地址分类和主机地址边界用于区分套接字的端口号数据传输过程示例 地址信息的表示表示IPv4…...
C++ | Leetcode C++题解之第546题移除盒子
题目: 题解: class Solution { public:int dp[100][100][100];int removeBoxes(vector<int>& boxes) {memset(dp, 0, sizeof dp);return calculatePoints(boxes, 0, boxes.size() - 1, 0);}int calculatePoints(vector<int>& boxes…...
day05(单片机)SPI+数码管
目录 SPI数码管 SPI通信 SPI总线介绍 字节交换原理 时序单元 SPI模式 模式0 模式1 模式2 模式3 数码管 介绍 74HC595芯片分析 原理图分析 cubeMX配置 程序编写 硬件SPI 软件SPI 作业: SPI数…...
Android Framework AMS(13)广播组件分析-4(LocalBroadcastManager注册/注销/广播发送处理流程解读)
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读广播组件的广播发送过程。关注思维导图中左上侧部分即可。 有了前面普通广播组件 注册/注销程/广播组件的发送广播流程分析的基础&…...
模糊理论与模糊集概述
1. 模糊集 1️⃣ μ A : U → [ 0 , 1 ] \mu_A:U\to{[0,1]} μA:U→[0,1],将任意 u ∈ U u\in{}U u∈U映射到 [ 0 , 1 ] [0,1] [0,1]上的某个函数 模糊集: A { μ A ( u ) , u ∈ U } A\{\mu_A(u),u\in{}U\} A{μA(u),u∈U}称为 U U U上的一个模糊集…...
基于STM32的实时时钟(RTC)教学
引言 实时时钟(RTC)是微控制器中的一种重要功能,能够持续跟踪当前时间和日期。在许多应用中,RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能,通过示例代码实现当前时间的读取和显示。 环…...
Caffeine Cache解析(三):BoundedBuffer 与 MpscGrowableArrayQueue 源码浅析
接续 Caffeine Cache解析(一):接口设计与TinyLFU 接续 Caffeine Cache解析(二):drainStatus多线程状态流转 BoundedBuffer 与 MpscGrowableArrayQueue multiple-producer / single-consumer 这里multiple和single指的是并发数量 BoundedBuffer: Caf…...
DuinoMemory:面向Arduino的轻量级嵌入式智能指针库
1. 项目概述DuinoMemory 是一款专为 Arduino 及资源受限嵌入式系统设计的轻量级智能指针库。它不依赖 STL、不使用异常(exceptions)、不启用 RTTI,完全以头文件形式提供(header-only),所有实现均通过 C 模板…...
2025届毕业生推荐的六大AI科研神器横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理,和深度学习技术的智能辅助工具,AI 写作类软件&…...
程序员必看:代码注释规范与重构实战指南
1. 程序员入职第一天的震撼教育那天早上九点整,我刷完门禁卡走进新公司的办公区,工位上已经摆好了全新的MacBook Pro和一台4K显示器。行政小姐姐热情地带着我走完入职流程后,我迫不及待地打开代码仓库,准备熟悉项目。就在我点开核…...
好写作AI“期刊论文智造局”:解锁学术发表的通关秘籍
在学术的江湖里,期刊论文就像是一把把锋利的宝剑,是学者们披荆斩棘、开疆拓土的得力武器。然而,想要打造出一把称手的“宝剑”,从选题到撰写,再到格式调整,每一步都充满挑战。别愁啦!好写作AI化…...
GitHub被封杀后:开源难民在区块链的逃亡
对于全球软件开发者而言,GitHub不仅是代码仓库,更是数字时代的公共广场与精神家园。然而,近年来一系列地缘政治风波与技术壁垒,使得这片曾经自由的土地不断竖起高墙。从伊朗、俄罗斯开发者账号的全面封禁,到针对特定IP…...
MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践
MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践 1. 引言:当AI走进放射科,我们如何相信它? 想象一下,一位放射科医生每天要面对上百张X光片,每一张都需要仔细查看、分析、撰写报告。长时间高…...
收藏备用!Workflow与Agent详解:小白也能看懂的AI自动化核心(附上手工具)
对于刚接触大模型的小白和程序员来说,Workflow和Agent是AI自动化领域最易混淆、也最核心的两个概念。本文将用通俗的语言拆解二者的核心作用、本质区别,补充实用落地细节,同时推荐新手友好型工具,帮你快速建立体系化认知ÿ…...
终极指南:如何快速构建企业级Vue3后台管理系统
终极指南:如何快速构建企业级Vue3后台管理系统 【免费下载链接】vue3-element-admin 🔥基于 Vue 3 Vite 7 TypeScript element-plus 构建的后台管理前端模板(配套后端源码),vue-element-admin 的 vue3 版本。 项目…...
考研408计算机学科专业基础综合——操作系统复习
考研408计算机学科专业基础综合 操作系统复习 核心说明:本笔记聚焦考研408操作系统高频考点、必背知识点,贴合命题规律(选择题大题并重),剔除冗余内容,突出重难点,适配冲刺复习与基础巩固&#…...
终极跨平台Iwara视频社区客户端:5个核心功能完全指南
终极跨平台Iwara视频社区客户端:5个核心功能完全指南 【免费下载链接】iwrqk Unofficial Iwara Flutter Client 项目地址: https://gitcode.com/gh_mirrors/iw/iwrqk IwrQk是一款基于Flutter框架开发的跨平台Iwara视频社区客户端应用,为你提供在i…...
