3.3 触摸中断
发表于|更新于|ESP32-IDF开发笔记
![[Pasted image 20250519205057.png]]
1、初始化触摸传感器
2、配置触摸传感器
3、设置触摸中断触发的阈值
4、注册中断触发函数
5、起用中断,并设置中断触发条件
6、配置和启动 FSM
7、等在中断触发
注册中断服务函数
![[Pasted image 20250519205834.png]]
触发阈值
![[Pasted image 20250519214150.png]]
基准值
![[Pasted image 20250519214234.png]]
文章作者: youran
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 youran'blog!
相关推荐

2025-05-21
3.1 触摸传感器理论
触摸传感器的种类![[Pasted image 20250519132533.png]] ESP32-S3中的电容触摸传感器![[Pasted image 20250519132630.png]] 触摸传感器使用方法![[Pasted image 20250519132658.png]]

2025-05-21
3.2 触摸信号采集
触摸传感器使用顺序1.初始化触摸传感器, 2.对触摸传感器和引脚进行配置, 3.启动FSM(有限状态机) 4.采集原始数据 5.卸载触摸传感器 初始化触摸传感器![[Pasted image 20250519135238.png]] FSM有限状态机![[Pasted image 20250519135837.png]] 示例代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <stdio.h>#include "freertos/FreeRTOS.h" // FreeRTOS 基础头文件#include "freertos/task.h" // FreeRTOS 任务相关#include "driver/touch_sensor.h" // ESP32 触摸传感器驱动头文件#include "esp_log.h" ...

2025-05-20
2.队列操作
esp32里面跑的是freertos,如果需要传递数据需要使用内部的缓存管理. 任务间同步RTOS中的同步,是指不同任务之间或者任务与外部事件之间的协同工作方式,确保多个并发执行的任务按照预期的顺序或时机执行。它设计到线程或任务间的通信和协调机制,目的是为了避免数据竞争、解决竞态条件,并确保系统的正确行为。 互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排他性。 ![[Pasted image 20250518093926.png]] 1234567891011121314151617181920212223242526272829QueueHandle_t xQueueCreate(//创建一个队列,成功返回队列句柄 UBaseType_t uxQueueLength,//队列容量 UBaseType_t uxltemSize //每个队列项所占内存的大小(单位是字节));BaseType_t xQueueSend(//向队列头部发送一个消息 QueueHandle_t xQueue,//队列句柄 const void *...

2025-05-20
3.信号量
信号量![[Pasted image 20250518115216.png]] 123456789101112131415161718192021//创建二值信号量,成功则返回信号量句柄(二值信号量最大只有1个)SemaphoreHandle_t xSemaphoreCreateBinary(void);//创建计数信号量,成功则返回信号量句柄SemaphoreHandle_t xSemaphoreCreateCounting( UBseType_t uxMaxCount,//最大信号量数 UBseType_t uxInitialCount//初始信号量数);//获取一个信号量,如果获得信号量,则返回pdTURExSemaphoreTake( SemaphoreHandle_t xSemaphore,//信号量句柄 TickType_t xTicksTowait//等待时间);//释放一个信号量xSemaphoreGive(SemaphoreHandle_t xSemaphore);//信号量句柄//删除信号量xSemaphoreDelete(SemaphoreHandle_t...

2025-05-20
1.创建任务
任务可以存在于以下状态:运行:当任务实际执行时,它被称为处于运行状态。任务当前正在使用处理机。如果运行RTOS的处理器只有一个内核,那么在任何给定时间内都只能有一个任务处于运行状态。 准备就绪:准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态),但目前没有执行的任务,因为同等或更高优先级的不同任务已经处于运行状态。 阻塞:如果任务当前正在等待时间或外部时间,则该任务被认为处于阻塞状态。例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态),直到延迟结束一个时间事件。任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量事件。处于阻塞状态的任务通常有一个“超时”期,超时后任务被超时,并被解除阻塞,即使该任务所等待的事件没有发生。 “阻塞”状态下的任务不使用任何处理时间,不能 被选择进入运行状态。 挂起:与“阻塞”状态下的任务一样,“挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。相反,任务只有在分别通过vTaskSuspend() 和 xTaskResume()...

2025-05-21
5.对比
机制 用途 特点 适用场景 队列(Queue) 传递数据 支持多个数据项排队 任务间传递结构体/数值等数据 信号量(Semaphore) 同步 / 互斥 不传递数据,只传“信号” 同步事件、任务间或中断间的配合 互斥锁(Mutex) 资源互斥保护 特殊的二值信号量 + 优先级继承 多任务访问共享资源(如 I²C、串口) 事件组(Event Group) 多位同步控制 可同时表示多个状态位 控制多个条件满足才执行,如联网、就绪等 任务通知(Task Notification) 点对点通知 + 可传值 轻量,效率高,限单任务 一对一传递信号或数据 🧩 各模块详细对比1. ✅ 队列(Queue) 可以传递数据(整数、结构体等) 先进先出(FIFO)机制 可以阻塞等待队列满或空 支持任务与任务 / 中断与任务之间通信 🔧 示例用途: xQueueSend(queue, &data, portMAX_DELAY); // 发送数据 xQueueReceive(queue, &data,...
评论