一、项目介绍
第五季第2期板卡是来自Microchip的EV41C56A(PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit),这是一款为触摸应用设计的安全低功耗评估套件。该套件基于安全且超低功耗的 ARM® Cortex®-M23 内核,集成了丰富的安全功能和触摸控制能力。这款评估套件将安全启动、TrustZone® 技术、加密加速器与增强型触摸控制完美融合,是开发安全触摸应用的理想选择。

二、任务:触摸输入与LED控制
基础题目:【难度:⭐️】
使用 EV41C56A 开发板板载触摸按键功能,实现以下逻辑:
- 单次触摸 → 点亮板载LED
- 再次触摸 → 关闭LED
功能要求:
- 正确初始化触摸通道
- LED 控制逻辑清晰,不出现误触发
三、系统流程图
项目采用MPLAB IDE来设计、开发和烧录。新建项目后,进行管脚和触摸引脚的配置,并生成初始化系统代码,然后在main函数中进行任务的代码开发。循环判断获取触摸传感器的状态,如果有触摸,LED输出电压进行反转既可,这样就实现了任务的要求。具体参见下面的流程图,以及开发时候的管脚等的配置图片。

下图为硬件配置截图。其中PA15为LED指示灯对应引脚,因此设置为GPIO并输出。而PA22为触摸控制器,因此设置为PTC_X16/Y16,用于感知用于的触摸,从而控制LED灯的亮灭。

四、代码实战
由于本任务相对来说比较简单,因此代码比较少,主要是判断是否触摸,以及进行管脚输出电压的反转。在main函数中,首先进行系统初始化操作,然后进入死循环,先获取触摸状态,然后判断是否有触摸,并且判断最近一次状态,防止长时间触摸的误操作,最终进行LED状态的反转,从而可以通过触摸功能完成对应的开关灯操作。具体参见下图。
int main ( void )
{
uint32_t msp_ns = *((uint32_t *)(TZ_START_NS));
volatile funcptr_void NonSecure_ResetHandler;
/* Initialize all modules */
SYS_Initialize ( NULL );
if (msp_ns != 0xFFFFFFFF)
{
/* Set non-secure main stack (MSP_NS) */
__TZ_set_MSP_NS(msp_ns);
/* Get non-secure reset handler */
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
/* Start non-secure state software application */
NonSecure_ResetHandler();
}
uint8_t key_last =0;
while ( true )
{
touch_process();
uint8_t key_status = get_sensor_state(0) & KEY_TOUCHED_MASK;
if(key_status && !key_last){
GPIO_PA15_Toggle();
}
key_last = key_status;
}
/* Execution should not come here during normal operation */
return ( EXIT_FAILURE );
}
下图是触摸后的LED进行发光,再次触摸LED会关闭,具体可以参见上面的视频。

五、心得体会
由于初次使用MPLAB的IDE进行项目开发,开始花费了不少时间来熟悉环境的使用和配置,经过一段时间的练习,已经基本上了解了整个开发流程和技巧,通过本次任务又学会了一项新的技能,特别感谢主办方及相关企业。