Funpack5-2 - 基于EV41C56A开发板完成触摸输入与LED控制任务功能
该项目使用了EV41C56A开发板、MPLAB X IDE开发环境,实现了触摸按键控制LED灯开关的设计,它的主要功能为:使用触摸按键控制开关LED的功能。
标签
Funpack活动
touch
EV41C56A
Blink
cubeline
更新2026-06-22
31

项目介绍:

  • 本项目是基于EV41C56A开发板完成任务1:触摸输入与LED控制
  • 本项目使用到的外设有: 触摸PTC 和GPIO
  • 实现的逻辑控制:
    • 单击板载触摸按钮(PA22)开关板载LED(PA15)


使用到的硬件介绍:

  • PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit 是一款专为评估 PIC32CM5164LS00048 微控制器而设计的硬件平台。该套件基于安全且超低功耗的 ARM® Cortex®-M23 内核,集成了丰富的安全功能和触摸控制能力
  • 本次实验内容比较简单,使用触摸控制开关灯。 因此仅使用到了PTC(触摸)按键和LED功能,在我们这块EV41C56A开发板上已经板载了PA22的触摸按钮和PA15的黄色LED指示灯。

方案框图和设计思路介绍

项目使用USB线缆给开发板供电,使用板载PA22触摸按钮作为输入,使用PA15 LED作为LED输出,单击触摸按键可以开关LED。

调试软件介绍

  • 开发环境使用MPLAB X IDE

MPLAB X Integrated Development Environment

关键代码介绍

int main ( void )
{
uint32_t msp_ns = *((uint32_t *)(TZ_START_NS));
volatile funcptr_void NonSecure_ResetHandler = NULL;
uint8_t button_last_state = 0u;
uint8_t button_now_state = 0u;

/* 初始化所有模块 */
SYS_Initialize(NULL);

/* 读取触摸按键初始状态,避免上电时误判 */
button_last_state = get_sensor_state(0) & KEY_TOUCHED_MASK;

/* 如果非安全区程序存在,则切换到非安全区执行 */
if (msp_ns != 0xFFFFFFFFu)
{
/* 设置非安全区主栈指针 */
__TZ_set_MSP_NS(msp_ns);

/* 获取非安全区复位处理函数地址 */
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));

/* 跳转到非安全区程序 */
NonSecure_ResetHandler();
}

/* 如果没有可执行的非安全区程序,则留在安全区循环中运行 */
while ( true )
{
/* 触摸库周期性处理 */
touch_process();

/* 读取按键传感器状态,并执行上升沿按键检测 */
button_now_state = get_sensor_state(0) & KEY_TOUCHED_MASK;
if ((button_last_state == 0u) && (button_now_state != 0u))
{
/* 按键从未按下变为按下时切换 LED 状态 */
GPIO_PA15_Toggle();
}
button_last_state = button_now_state;
}

/* 正常运行不应到达这里 */
return (EXIT_FAILURE);
}

软件功能也比较简单,因此逻辑上也比较简单,首先程序从安全区的main()函数开始执行,第一步初始化所有的外设模块。初始化功能在MCC中配置外设的过程中已经配置好了,这里只需要在初始运行的时候调用一下SYS_Initialize(NULL);
即可,然后预读一下触摸按键,初始化一下LED状态。然后是检测非安全区是否有代码需要执行,没有则留在这里继续往下执行。接下来的while循环才是我们真正的程序功能控制逻辑:

  1. 周期性调用触摸库来处理触摸按键相关功能
  2. 读取触摸按键的状态,并写入按键的状态flag
  3. 对比前后的状态,在按键从没有按下到按下时切换LED灯的状态
  4. 更新触摸按键的状态flag

功能展示图及说明

如图轻按触摸按钮可以点亮LED1,再次轻触可以关闭LED。

项目中遇到的困难以及解决办法:

  1. 本来我是想使用MPLAB for VS Code插件搭配VSCode编辑器来开发这个项目,但是奈何一些众所周知的原因,在国内我一直无法完整的获取到MCC配置器插件,每次插件要么卡在启动画面,要么完全无法打开,最终我只能选择放弃使用VSCode+插件的方式开发,转而使用官方IDE MPLAB X来开发这个项目
  2. 开发项目的过程中,我一直在尝试使用官方的参考用例来修改以适配我的这个工程,但官方示例往往是基于老旧的运行库或软件环境,每次都是感觉我配置的毫无问题,但是真正使用MCC生成的代码却一堆报错,搞得我一度想放弃。后续我索性直接新建一个基于开发板的全新工程,配置过程反而无比顺畅。
  3. 调试触摸的过程中,因为这个M23内核是一个安全处理器,它包含了一个安全工程和一个非安全工程,这个看起来非常好的功能却在开发的过程中给我挖了不少坑,因为生成工程会变成两套,我总是搞不清我的代码该写在安全工程的main函数里,还是写在非安全工程的main函数中,因为使用MCC配置器生成代码,也似乎存在安全工程版本和非安全工程版本,我在两者之间切换的时候就经常弄丢配置文件,导致项目直接变得不可用,后来我在群里看到也有类似用户在讨论相关问题,终于慢慢的捋顺了其中的逻辑。

心得体会:

本来以为点灯嘛,这是个再基础不过的功能了,想我玩过这么多的开发板,点灯总是不至于让我翻车的咯,但是真正从一款从来没有接触过的开发板从零开始配置外设,配置IO功能,没有仔细的阅读示例代码,和参考用例,终究还是非常难以继续,后面还是要沉下心来一点一点的认真阅读示例代码,分析各个外设的功能以及配置。不能总是栽进想当然的思路中去。

附件下载
Project.7z
团队介绍
我是Cubeline,一个新手开发者
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号