☰
RT-Thread 瑞萨 CPK-RA2L1 开发板 CapTouch 板载触摸按键配置实战指南
2026/9/25 2:49:49 网站建设 项目流程
  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式OS
  • RTOS

【免费下载链接】rt-thread

RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/

项目地址:https://gitcode.com/gh_mirrors/rt/rt-thread
点击查看免费下载

本篇基于 RT-Thread 仓库中 CPK-RA2L1 BSP 的官方配置文档(Captouch板载触摸按键配置说明),完整讲解如何在该开发板上启用 CTSU 电容触摸按键:从 CTSU2 硬件原理、FSP 中创建 CapTouch 与 UART 调制端口,到使用瑞萨 QE for Capacitive Touch 工具完成配置、Tuning 与状态监控,并结仓库中 QE-Touch sample 代码 分析触摸状态在 RT-Thread 系统中的消费方式。

一、CTSU2 电容触摸的基础知识

瑞萨 RA 系列 MCU 内置电容式感应单元 CTSU2,其基本工作方式如下:

  • CTSU2 测量传感器的静电电容,电容值的变化由软件判定,从而确定手指是否与传感器接触;
  • 传感器电极表面通常包裹一层电介质薄膜,手指不会直接接触电极;
  • 电极与周围导体之间存在寄生电容。人体是电导体,当手指靠近电极时,静电电容值会增大。

静电电容的检测采用两种方式:

检测方法原理
自电容法(self-cap)CTSU 检测手指与单个电极之间产生的静电电容
互电容法(mutual-cap)使用两个电极(一个传输、一个接收),CTSU 检测手指靠近两电极时产生的静电电容变化

CPK-RA2L1 板载了触摸按键(BTN1/BTN2/BTN3),下面就是完整的启用流程。

二、FSP 配置:启用 CTSU 并创建 CapTouch 实例

CPK-RA2L1 BSP 默认提供 MDK5 工程(project.uvprojx)。BSP 的 README 中说明:修改瑞萨 BSP 外设配置或添加新的外设端口,需要用到瑞萨 FSP 配置工具(建议使用 FSP 3.5.0,并导入 CPK-RA2L1 板级支持包)。在 MDK 中可以通过自定义用户命令打开 FSP。

2.1 Pins 选项卡:启用 CTSU0

打开 FSP 配置工具,移至"Pins"选项卡并打开"Peripherals"条目。在外围设备列表中滚动到"Input: CTSU",打开配置并确保 CTSU0 处于启用状态(传感器引脚 TS 通道即由此分配)。

2.2 Stacks 选项卡:创建 CapTouch 实例

  1. 转到"Stacks"选项卡,在"HAL/Common Stacks"窗格中单击"New Stack",选择"CapTouch" → "Touch (rm_touch)";
  2. 选中创建出的rm_touch实例,在其配置中开启 Tuning 和 monitoring 功能(这两个功能供后续 QE 工具通过 UART 与板端通信);
  3. 添加 UART 端口用于调制(tuning)过程的通信。

2.3 添加 UART 调制端口

  1. 选中创建出的 UART 实例。本例使用UART 0作为调制串口,如需使用其他串口可手动修改 channel 数值;
  2. 默认的 SCI0 可能被配置为 SPI 模式,需要将 SCI0 使用的模式修改为 UART(RA 的 SCI 控制器是通用串口控制器,SPI/I2C/UART 三模可选,这一点也可以从 board/Kconfig 中BSP_USING_SCI0_SEL的 SPI/I2C/UART 三选一配置项得到印证);
  3. 回到 Stacks 标签页,打开该 UART 实例的DTC 功能并添加 DTC,为RX 和 TX都添加 DTC 支持(DTC 是瑞萨的中断驱动数据搬运机制,可减少 UART 通信对 CPU 的占用)。

2.4 配置 r_ctsu 并生成代码

选中r_ctsu实例,同样打开 DTC 功能并添加 DTC 配置。

配置完成后,点击Generate Project Content生成配置代码并将库文件加入工程。

2.5 编译工程

关闭 FSP,编译 MDK 工程。第一次编译出现弹窗确认后,再次编译即可。编译通过后进入 QE 工具配置环节。

三、QE for Capacitive Touch 工具配置

从瑞萨官网下载最新版QE for Capacitive Touch开发辅助工具(Capacitive Touch Sensors Development Assistance Tool)。

注意事项:

  • 解压路径不能包含中文;
  • 解压后进入eclipse目录,双击qe-touch.exe启动。

工具主窗口会显示完整的操作指引,后续按引导逐步完成配置。

第一步:准备工作

  1. 选择工程目录:选择 ra2l1-cpk 的 BSP 工程目录;
  2. 选择芯片信号:确认工具中选择的芯片型号与实际使用的芯片对应(本板为 R7FA2L1AB2DFM,Cortex-M23、48MHz,见 README 的板载资源说明)。

第二步:创建触摸配置

  1. 选择"Create a new configuration"创建新的触摸配置,工具会打开一个默认空白画布;
  2. 从画布右侧选择"Button"(按钮)菜单项,将光标移到画布上,单击鼠标左键放下按钮图标,共添加3 个按钮(对应板载 BTN1/BTN2/BTN3),添加完成后按ESC键退出;
  3. 此时画布下方会显示RED X及文本 "There are some problems with setting",按钮显示为红色,表明按钮尚未绑定到任何 MCU 传感器引脚;
  4. 双击 Button00,在弹出的对话框中通过下拉菜单选择TS32作为 MCU 传感器分配给该按钮(其余按钮同理绑定各自的 TS 通道);
  5. 触摸按钮配置完成后需要修改文件名——默认文件名包含不支持的字符;
  6. 点击对话框中的"Create"创建配置。

接着选择输出配置文件,输出路径请选ra2l1-cpk/QE-Touch目录(即 bsp/renesas/ra2l1-cpk/QE-Touch),弹窗按实际情况选择。完成后将输出配置文件和 sample 代码文件。

将 QE 输出加入 RT-Thread 工程

仓库中已准备了能在 RT-Thread 系统中运行的 sample 代码 qe_sample_rtthread.c。该目录下的 SConscript 揭示了 QE 输出文件与工程集成方式:

file = glob.glob('*.tifcfg') if len(file): if rtconfig.PLATFORM in ['iccarm']: print("\nThe current project does not support IAR build\n") Return('group') elif rtconfig.PLATFORM in ['gcc', 'armclang']: src += ['qe_touch_config.c'] src += ['qe_sample_rtthread.c'] CPPPATH = [cwd] CPPDEFINES = ['QE_TOUCH_CONFIGURATION'] group = DefineGroup('QE-Touch', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)

从源码结构看:

  • 只有当QE-Touch目录下存在 QE 工具输出的.tifcfg配置文件时,qe_touch_config.c(QE 生成的 CTSU/触摸参数数据)与qe_sample_rtthread.c才会被加入编译,并定义QE_TOUCH_CONFIGURATION宏;
  • QE 配置依赖 MDK(armclang)构建,IAR 构建会被显式跳过。

因此操作步骤为:在 ENV 工具中执行scons --target=mdk5命令生成 MDK 工程,并把 QE 输出的配置文件和 sample 文件加入到ra2l1-cpk/QE-Touch目录。打开生成的 MDK 工程并编译,然后进入 debug。J-Link 可能弹出选择芯片型号的窗口,输入r7fa2l1ab选中后点击 OK 即可进入。在 MDK debug 中点击 Run 全速运行,命令行会打印日志信息,说明 touch 功能的 sample 已启动。

sample 代码在 RT-Thread 中的工作方式

qe_sample_rtthread.c 的完整实现如下,可帮助理解触摸状态如何被 RT-Thread 线程消费:

#define TOUCH_SCAN_INTERVAL_EXAMPLE (20) /* milliseconds */ uint64_t button_status; void qe_touch_main(void *parameter) { fsp_err_t err; rt_uint32_t led_blu = rt_pin_get("P501"); /* Open Touch middleware */ rt_kprintf("TOUCH Open\n"); err = RM_TOUCH_Open(g_qe_touch_instance_config01.p_ctrl, g_qe_touch_instance_config01.p_cfg); if (FSP_SUCCESS != err) { rt_kprintf("RM_TOUCH_Open fail\n"); return; } rt_kprintf("TOUCH ScanStart\n"); while (true) { /* for [CONFIG01] configuration */ err = RM_TOUCH_ScanStart(g_qe_touch_instance_config01.p_ctrl); if (FSP_SUCCESS != err) { rt_kprintf("RM_TOUCH_Open fail\n"); return; } while (0 == g_qe_touch_flag) {} g_qe_touch_flag = 0; err = RM_TOUCH_DataGet(g_qe_touch_instance_config01.p_ctrl, &button_status, NULL, NULL); if (FSP_SUCCESS == err) { if (button_status) { rt_pin_write(led_blu, PIN_HIGH); } else { rt_pin_write(led_blu, PIN_LOW); } } /* FIXME: Since this is a temporary process, so re-create a waiting process yourself. */ rt_thread_mdelay(TOUCH_SCAN_INTERVAL_EXAMPLE); } } int touch_init(void) { rt_thread_t tid = rt_thread_create("touch", qe_touch_main, RT_NULL, 512, 10, 50); if (tid) { rt_thread_startup(tid); } return 0; } INIT_APP_EXPORT(touch_init);

关键实现要点:

  • 通过INIT_APP_EXPORT(touch_init)在应用初始化阶段自动创建名为touch的线程(栈 512 字节、优先级 10、时间片 50),无需手动调用;
  • 主循环节奏为每TOUCH_SCAN_INTERVAL_EXAMPLE(20ms)扫描一次:RM_TOUCH_ScanStart()发起一次扫描 → 自旋等待扫描完成标志g_qe_touch_flag(由 CTSU 中断回调置位)→RM_TOUCH_DataGet()取出各按钮状态位;
  • 任一按钮按下(button_status非 0)时将P501 蓝色 LED 拉高,全部抬起时熄灭——这就是文档中"按下按钮时蓝色 LED 常亮、抬起熄灭"现象的底层实现;
  • 代码中的 FIXME 注释也提示:自旋等待属于临时方案,正式产品应自行创建更合理的等待机制(如事件/信号量)。

四、第三步:Tuning(调节)

回到 QE 工具启动 Tuning 过程。调制约定使用UART0(P100、P101),需要用USB-TTL 工具将这两个引脚连接到电脑。

等待自动调节过程——此过程可能较长,请勿触碰触摸按键。

经过几个自动化步骤后,会弹出触摸灵敏度测试对话框:可以看到传入的**"触摸计数",即在传感器上测量到的电容值。触摸传感器(如 BTN3、TS28)会使条形图和触摸计数增加,因为手指靠近改变了传感器电容。Tuning 总是从最低传感器编号到最高传感器编号**依次进行。

操作要求:

  • 在传感器(BTN1、BTN2、BTN3)上使用一般的触摸力度按压板载按键;
  • 按下时进度条向右进展、触摸计数增加,保持按压并点击电脑键盘任意键(如空格)记录测量结果;
  • 对每个按钮重复此过程,测量结果因显示计数而异。

完成后将看到最终界面。理想情况下,使用此硬件应能看到1000 次或更多的触摸阈值计数——这是中间件用来判定是否发生触摸事件的检测阈值。

注意:Tuning 过程中可能收到"寄生电容 < 10pF"的警告。此时请选中目标选择框并单击重试,尝试重新 Tuning 该传感器。要使 CTSU/CTSU2 实现最佳性能,负载电容至少需要 10pF,低于 10pF 会导致该传感器通道对噪声敏感。

单击"Continue the Tuning Process"(继续调节)按钮退出 Tuning 过程,并与目标上的调试会话断开连接。

随后单击"Output Parameter Files"(输出参数文件)输出 Tuning 参数文件。部分配置代码会有更新,需要重新编译工程并再次更新固件。

五、第四步:连接并实时监控按键状态

使用 UART 连接开发板,即可在 QE 工具中监控触摸按键状态。连接成功后点击左上角"Enable Monitoring"开始监测。

  • 主窗口切换到CapTouch Status Chart (QE)视图,可监控图形化触摸灵敏度,查看所选触摸传感器的当前计数值、参考值、阈值以及传感器是打开还是关闭状态;
  • 左下角窗口可通过下拉菜单选择按键名称,CapTouch Multi Status Chart (QE)视图可同时查看多个传感器,用于评估串扰等性能。

同时在按下板载按钮时,开发板上的蓝色 LED(P501)会常亮,抬起则熄灭,与 sample 代码中的逻辑一致,可作为调试验证手段。

六、相关源码与配置索引

内容路径
本文原始配置文档bsp/renesas/ra2l1-cpk/docs/Captouch板载触摸按键配置说明.md
QE 触摸 sample(RT-Thread 版)bsp/renesas/ra2l1-cpk/QE-Touch/qe_sample_rtthread.c
QE 输出集成构建脚本bsp/renesas/ra2l1-cpk/QE-Touch/SConscript
BSP 说明(FSP/ENV 使用方式、烧录)bsp/renesas/ra2l1-cpk/README.md
板级外设 Kconfig(SCI0 模式选择等)bsp/renesas/ra2l1-cpk/board/Kconfig
SCI UART 默认实例配置bsp/renesas/ra2l1-cpk/ra_cfg/fsp_cfg/r_sci_uart_cfg.h

七、要点回顾

  1. FSP 侧:Pins 使能 CTSU0 → Stacks 新建rm_touch(CapTouch → Touch)并开启 Tuning/monitoring → 添加 UART0 调制端口(SCI0 模式改回 UART,RX/TX 加 DTC)→r_ctsu加 DTC → 生成代码并重新编译 MDK 工程;
  2. QE 工具侧:工程目录指向 ra2l1-cpk BSP、芯片型号选 R7FA2L1AB 对应型号 → 画布放置 3 个 Button 并绑定 TS 传感器引脚(如 TS32)→ 输出到ra2l1-cpk/QE-Touch目录;
  3. 构建侧:scons --target=mdk5重新生成工程(存在.tifcfg时 SConscript 自动纳入qe_touch_config.c与 sample),编译后 J-Link 输入r7fa2l1ab进入 debug;
  4. Tuning 侧:UART0(P100/P101)接 USB-TTL,按"一般力度"逐键按压并记录,理想触摸阈值 ≥1000 计数;负载电容 <10pF 会警告,需重试 Tuning;完成后输出参数文件、重新编译并更新固件;
  5. 验证侧:Enable Monitoring 查看计数/参考值/阈值与开/关状态,Multi Status Chart 评估串扰;板上蓝 LED 随触摸常亮/熄灭。
  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式OS
  • RTOS

【免费下载链接】rt-thread

RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/

项目地址:https://gitcode.com/gh_mirrors/rt/rt-thread
点击查看免费下载

相关推荐

上一篇:pre-commit终极指南:如何用10个简单步骤提升你的Git代码质量
下一篇:qmd模型管理指南:如何更换与配置本地LLM模型

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询