资讯动态

INAV 仓库 STM32H7 BSP:TS3510 触摸屏组件驱动与 Release Notes 深度解析

发布时间:2026/10/15 17:38:21 来源:尧图企业网站定制
无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载导读本文以 INAV 仓库中携带的 STM32H7 BSP 组件驱动 TS3510 Release Notes 为主线完整解析 ST 官方 TS3510 电阻式触摸屏组件驱动Touch Screen Component Driver的版本演进、文件组成、核心 API 与底层实现并结合仓库内 STM32H743I-EVAL 评估板 BSP 的集成代码说明其实际使能方式。读完本文你将掌握该驱动在 INAV 仓库中的角色定位、如何按模板配置ts3510_conf.h、如何通过TS3510_RegisterBusIO挂接 I2C 总线并读取单点触摸坐标以及它在 BSP 层与 LCD 尺寸、方向、精度参数之间的换算逻辑。一、这份 Release Notes 说明什么lib/main/STM32H7/Drivers/BSP/Components/ts3510/Release_Notes.md是 STMicroelectronics 为TS3510 触摸屏组件驱动发布的正式 Release Notes随 STM32H7 HAL/BSP 库一起被纳入 INAV 仓库的lib/main/STM32H7目录。文档核心信息如下Purpose该驱动提供一组驱动 TS3510 触摸屏组件所需的函数This driver provides a set of functions needed to drive TS3510, Touch Screen component。License组件采用 BSD 3-Clause 许可发布用户不得在不遵守该许可的情况下使用本组件。适用边界这是一份组件驱动Component Driver级别的说明遵循 STM32Cube BSP 驱动开发指南UM2298的规范编写面向的是 STM32Cube 生态中的 BSP 集成层而不是 INAV 飞控业务代码本身。需要特别说明的是从仓库源码检索结果看INAV 的src目录飞控代码、io、drivers、navigation 等并未直接引用ts3510相关符号该组件与 STM32H7 HAL/BSP 库整体驻留于 lib/main/STM32H7/Drivers/BSP 之下属于随附的厂商外设库基础设施其直接消费方是仓库内的 STM32H743I-EVAL 评估板 BSP 代码详见下文第六节。二、版本历史与主要变更原文完整继承Release Notes 记录了两个阶段的发布历史V2.0.0 是依照 UM2298 规范重写的组件驱动版本此前的 V1.x 是旧版 TS 驱动。各版本要点如下版本发布日期主要变更V2.0.02019-11-23TS3510 组件驱动首次正式发布符合 STM32Cube BSP 驱动开发指南UM2298驱动由三部分组成组件核心驱动文件ts3510.h/.c、组件寄存器驱动文件ts3510_reg.h/.c、组件配置文件ts3510_conf_template.h向后兼容性本版本与旧版本不兼容breaks the compatibility with previous versions依赖兼容BSP Common V6.0.0 及以上注意事项ts3510_conf_template.h必须复制到用户应用中并改名为ts3510_conf.h可按需更新配置V1.0.22017-06-05更新注释以用于 PDSC 生成V1.0.12014-12-02修正st7735.h中 include 路径的反斜杠\为斜杠/解决 Linux 下的编译问题V1.0.02014-02-18TS3510 TS 驱动首个官方发布其中 V2.0.0 的三条要点对使用者影响最大文件结构重组驱动被拆分为核心驱动 寄存器驱动 配置模板三层这是 UM2298 组件驱动规范的标准形态向后不兼容从 V1.x 升级到 V2.0.0 时应用层调用方式需要按新 API 调整强制配置步骤必须将ts3510_conf_template.h复制为ts3510_conf.h并纳入编译包含路径否则ts3510.h中的#include ts3510_conf.h无法解析。三、驱动文件组成与职责划分对照 Release Notes 的说明仓库lib/main/STM32H7/Drivers/BSP/Components/ts3510/目录下实际存在以下文件职责清晰分层文件角色职责ts3510.h组件核心驱动头文件导出对象类型、IO 抽象、能力结构、全部 API 原型及TS3510_TS_Driver驱动操作表ts3510.c组件核心驱动实现实现总线注册、初始化/反初始化、ID 读取、单点状态读取、能力查询等逻辑ts3510_reg.h寄存器驱动头文件定义寄存器地址常量与ts3510_ctx_t上下文、ts3510_read_reg/ts3510_write_reg原型ts3510_reg.c寄存器驱动实现将寄存器读写统一转发到上下文中的读写回调ts3510_conf_template.h配置模板定义触摸屏最大坐标范围用户复制为ts3510_conf.h后可按需修改Release_Notes.html文档与 Markdown 同内容的网页版发布说明3.1 分层结构的意义这种核心驱动 寄存器驱动分离设计的直接好处是寄存器驱动只负责把指定地址的若干字节读出来/写进去不关心总线是 I2C、SPI 还是其他介质而核心驱动则依赖上下文ts3510_ctx_t中挂接的回调完成业务逻辑。从 ts3510_reg.c 可以看到ts3510_read_reg/ts3510_write_reg只是一层薄封装直接把参数透传给ctx-ReadReg(ctx-handle, ...)/ctx-WriteReg(...)。真实的总线收发函数由上层 BSP 在注册总线 IO 时注入。四、核心 API 与源码级实现细节4.1 关键常量与类型在 ts3510.h 中定义了驱动运行所依赖的核心常量TS3510_OK0TS3510_ERROR-1统一返回码TS3510_MAX_NB_TOUCH1U最大可检测同时触摸数为 1即单点触摸TS3510_ID0x3510U组件标识用于ReadID校验TS3510_READ_CMD0x81U、TS3510_WRITE_CMD0x08U触摸屏数据传输前的命令字字节对。寄存器驱动在 ts3510_reg.h 定义了仅有的两个寄存器地址TS3510_SEND_CMD_REG0x00U发送命令寄存器TS3510_READ_BLOCK_REG0x8AU读取数据块寄存器。4.2 驱动对象与函数指针抽象驱动通过三类结构体完成与具体总线解耦TS3510_IO_t总线 IO 抽象包含Init、DeInit、WriteReg、ReadReg、GetTick函数指针以及从设备地址AddressTS3510_Object_t组件对象内嵌TS3510_IO_t IO、寄存器上下文ts3510_ctx_t Ctx与初始化标志IsInitializedTS3510_TS_Drv_t面向 BSP 层的统一驱动操作表包含Init/DeInit/GestureConfig/ReadID/GetState/GetMultiTouchState/GetGesture/GetCapabilities/EnableIT/DisableIT/ClearIT/ITStatus共 12 个操作。该操作表的实现在 ts3510.c 中由全局变量TS3510_TS_Driver静态初始化。有趣的是其中多个操作在当前版本中直接返回TS3510_ERROR即功能不支持Feature not supported包括TS3510_GestureConfig、TS3510_GetMultiTouchState、TS3510_GetGesture、TS3510_EnableIT、TS3510_DisableIT、TS3510_ITStatus、TS3510_ClearIT。这说明TS3510 组件驱动本质上只支持单点触摸的轮询读取不支持多点、手势与中断模式——这一点与GetCapabilities的返回一致见 4.4。4.3 总线注册与初始化流程TS3510_RegisterBusIOts3510.c是接入总线的唯一入口流程如下将上层传入的pIO中的函数指针与地址拷贝到组件对象pObj-IO将静态包装函数ReadRegWrap/WriteRegWrap与pObj自身挂到pObj-Ctx使寄存器层回调能正确回到组件对象立即调用pObj-IO.Init()完成底层总线初始化例如 I2C 通道使能返回失败则整体返回TS3510_ERROR。TS3510_Init/TS3510_DeInitts3510.c通过IsInitialized标志实现幂等重复调用Init不会重复初始化底层 IODeInit只在已初始化状态下执行避免重复操作 I2C 外设。4.4 设备 ID 读取与能力查询TS3510_ReadIDts3510.c的实现逻辑是向TS3510_SEND_CMD_REG写入命令字节对{0x81, 0x08}从TS3510_READ_BLOCK_REG读取 1 字节数据只要读写成功就把*Id置为固定值TS3510_ID (0x3510)。也就是说该驱动并不真正从芯片回读 ID 数值而是以与器件握手成功作为 ID 校验通过的依据这正是 Release Notes 中驱动由 ST 提供、面向固定硬件的体现。BSP 层用返回的0x3510与TS3510_ID比较判断板上是否挂载了该触摸控制器。TS3510_GetCapabilitiests3510.c返回能力集合字段值含义MultiTouch0不支持多点触控Gesture0不支持手势识别MaxTouch1最多同时 1 个触点MaxXl/MaxYl4096X/Y 原始坐标最大边界来自配置文件4.5 单点触摸状态读取与坐标换算TS3510_GetStatets3510.c是核心业务函数步骤如下调用内部函数TS3510_DetectTouch判断是否有触摸有触摸时先向TS3510_SEND_CMD_REG写入命令字节对再从TS3510_READ_BLOCK_REG连续读取11 字节数据pData[0..10]坐标换算TouchX (((pData[1] 8) | pData[2]) 12) / 640TouchY (((pData[3] 8) | pData[4]) 12) / 480可以推断原始触摸数据以 12 位精度存放在pData[1..4]通过左移 12 位并除以 640/480 归一化到640×480的触摸面板分辨率与 STM32H743I-EVAL 板上 AMPIRE 640×480 LCD 对应。TS3510_DetectTouchts3510.c的判定规则是若pData[1..4]全部为0xFF则视为无效数据、无触摸返回 0否则返回 1。0xFF在此处被当作未发生触摸的占位值处理。五、配置模板从 ts3510_conf_template.h 到 ts3510_conf.hRelease Notes 明确要求ts3510_conf_template.h必须复制到用户应用中并命名为ts3510_conf.h。当前仓库中的模板ts3510_conf_template.h内容如下#ifndef TS3510_CONF_H #define TS3510_CONF_H ... #define TS3510_MAX_X_LENGTH 4096U #define TS3510_MAX_Y_LENGTH 4096U ... #endif /* TS3510_CONF_H */要点说明头文件保护宏即为TS3510_CONF_H因此复制后文件名必须为ts3510_conf.h且需保证该文件在编译器的头文件搜索路径中否则 ts3510.h 的#include ts3510_conf.h会编译失败模板仅暴露TS3510_MAX_X_LENGTH/TS3510_MAX_Y_LENGTH两个宏默认均为4096U它们是GetCapabilities返回的MaxXl/MaxYl数据源决定了 BSP 层坐标归一化的最大边界使用者可按实际触摸面板规格修改这两个宏例如 1024×768 面板可改为对应值从而让后续 BSP 的坐标换算在新边界下生效。六、在 STM32H743I-EVAL 评估板 BSP 中的集成Release Notes 面向 STM32Cube BSP 生态仓库中的实际集成案例位于 STM32H743I-EVAL 板级支持包。6.1 触摸屏实例的探测与挂接在 stm32h743i_eval_ts.c 中TS3510_Probe完整展示了 BSP 层使用该组件驱动的标准姿势构造TS3510_IO_t IOCtx填充Address TS_TS3510_I2C_ADDRESS在 stm32h743i_eval_ts.h 中定义为0x80U8 位地址格式Init/DeInit BSP_I2C1_Init / BSP_I2C1_DeInitReadReg/WriteReg BSP_I2C1_ReadReg / BSP_I2C1_WriteRegGetTick BSP_GetTick调用TS3510_RegisterBusIO注册总线并初始化 I2C1调用TS3510_ReadID读取 ID若返回TS3510_ID (0x3510)则确认组件存在将TS3510_TS_Driver操作表赋给 BSP 的Ts_Drv再调用TS3510_Init。6.2 编译期开关BSP 配置模板 stm32h743i_eval_conf_template.h 用编译宏在三种触摸控制器之间切换#define USE_TS3510_TS_CTRL 0U /* TS3510 触摸组件使能位 */ #define USE_EXC7200_TS_CTRL 1U /* EXC7200默认开启 */ #define USE_EXC80W32_TS_CTRL 0U /* EXC80W32H753I-EVAL2 板 */据此可以推断ST 官方默认配置优先使能 EXC7200若目标评估板实际搭载 TS3510 控制器则需要将USE_TS3510_TS_CTRL改为1U并关闭USE_EXC7200_TS_CTRL。BSP_TS_Initstm32h743i_eval_ts.c会在初始化时按这些宏依次执行对应 Probe并将GetCapabilities返回的MaxXl/MaxYl存入板级上下文Ts_Ctx。6.3 BSP 层的坐标归一化与滤波BSP_TS_GetStatestm32h743i_eval_ts.c在拿到组件驱动返回的原始坐标后还做了三层处理方向变换根据Ts_Ctx.Orientation中的TS_SWAP_XY / TS_SWAP_X / TS_SWAP_Y标志对 X/Y 进行镜像或交换边界缩放TouchX (x_oriented * Width) / MaxX、TouchY (y_oriented * Height) / MaxY把 4096 边界的原始坐标映射到用户指定的 LCD 宽高精度滤波对比当前点与上一次记录点只有当 X 或 Y 差值超过Accuracy由TS_Init_t.Accuracy传入时才更新坐标否则沿用上一次值用于抑制抖动。这一链路完整串联了组件驱动原始坐标→ BSP 板级驱动归一化、方向、滤波→ 应用层宽高像素坐标也是读者在实际移植时可复用的样板。七、使用与移植要点总结综合 Release Notes 与源码实现在 INAV 仓库环境或自有 STM32H7 工程中使用 TS3510 组件驱动时可按以下步骤操作放置配置将ts3510_conf_template.h复制到应用目录并命名为ts3510_conf.h必要时按面板规格修改TS3510_MAX_X_LENGTH/TS3510_MAX_Y_LENGTH提供 IO 回调实现TS3510_IO_t中要求的Init、DeInit、WriteReg、ReadReg、GetTick其中WriteReg/ReadReg签名形如int32_t (*)(uint16_t addr, uint16_t reg, uint8_t *buf, uint16_t len)注册并校验调用TS3510_RegisterBusIO注册总线随后调用TS3510_ReadID确认返回0x3510初始化与读取调用TS3510_Init后在轮询循环中调用TS3510_GetState通过TS3510_State_t.TouchDetected判断是否触摸读取TouchX/TouchY640×480 归一化坐标注意能力边界本驱动不支持多点触摸、手势和中断模式GetMultiTouchState、GetGesture、EnableIT等接口一律返回TS3510_ERROR应用层应改用轮询单点方案BSP 集成参考如需在评估板级工程中挂接可直接参照 stm32h743i_eval_ts.c 的TS3510_Probe写法并通过USE_TS3510_TS_CTRL编译开关启用该组件。八、在 INAV 仓库中的角色与边界最后需要澄清该组件在 INAV 项目中的准确定位TS3510 组件驱动位于lib/main/STM32H7/Drivers/BSP/Components/ts3510/属于随仓库整体携带的STM32Cube HAL/BSP 厂商库的一部分其上游为 ST 官方 BSP 组件规范UM2298并非 INAV 自行开发的模块从当前src目录的符号检索看INAV 飞控代码main/io/drivers/navigation 等没有直接调用ts3510_*或TS3510_*接口因此它不参与飞控运行路径更多是作为 BSP 基础设施保留供依赖 STM32H7 HAL 的板级/调试场景使用因此对 INAV 开发者的实际参考价值主要体现在理解仓库内厂商 BSP 的目录结构与组件驱动规范、在评估板触摸屏调试或二次开发时快速复用该驱动的总线抽象与坐标换算方案。若需查看原始发布说明与驱动源码可直接阅读 Release_Notes.md 及同目录下的 ts3510.c、ts3510.h、ts3510_reg.c、ts3510_reg.h、ts3510_conf_template.h以及板级集成示例 stm32h743i_eval_ts.c。赞分享无人机嵌入式智能硬件【免费下载链接】inavINAV: Navigation-enabled flight control software项目地址https://gitcode.com/gh_mirrors/in/inav点击查看免费下载相关推荐INAV 仓库 STM32H7 BSP 库中的 FT5336 触摸屏组件驱动架构、寄存器映射与移植指南INAV 仓库 STM32H7 BSP 库中的 FT5336 触摸屏组件驱动架构、寄存器映射与移植指南 导读 FT5336 是 FocalTech 推出的电容无人机嵌入式智能硬件INAV 仓库中的 STM32H7 FT6X06 电容触摸屏组件驱动解析架构、寄存器与 BSP 集成指南INAV 仓库中的 STM32H7 FT6X06 电容触摸屏组件驱动解析架构、寄存器与 BSP 集成指南 本文以 lib/main/STM32H7/Drive无人机嵌入式智能硬件INAV 仓库中的 MT48LC4M32B2 SDRAM BSP 驱动STM32H7 外部 SDRAM 组件驱动解析INAV 仓库中的 MT48LC4M32B2 SDRAM BSP 驱动STM32H7 外部 SDRAM 组件驱动解析 INAV 作为一套带导航能力的飞行控制固无人机嵌入式智能硬件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑