一、硬件介绍:
这次参加活动的开发板是Microchip的EV41C56A。这是是一款专为评估 PIC32CM5164LS00048 微控制器而设计的硬件平台。该套件基于安全且超低功耗的 ARM® Cortex®-M23 内核,集成了丰富的安全功能和触摸控制能力。主控PIC32CM5164LS00048芯片, 内核:ARM Cortex-M23(支持 ARM TrustZone 硬件级安全隔离);存储:512 KB Flash,64 KB SRAM;工作电压:1.7V - 3.6V。板载有LED、按键、和一个触摸按键。
二、任务选择:
参加这次活动,我选择了任务1:
触摸输入与LED控制。使用 EV41C56A 开发板板载触摸按键功能,实现以下逻辑:单次触摸 → 点亮板载LED;再次触摸 → 关闭LED。功能要求:正确初始化触摸通道;LED 控制逻辑清晰,不出现误触发。
三、设计思路:
通过触摸控制LED灯的亮灭。开发板上有一个触摸按键, 设置一个状态机,当有触摸发生时,改变状态机的状态,然后通过状态机的状态控制LED灯的亮灭。

四、任务实现:
开发工具使用MPLAB X IDE v6.25。我是在笔记本上Ubuntu下安装的开发环境。预先在MCC环境中添加touch组件。新建项目。




新建好项目后,MPLAB X IDE 会自动打开MCC图形化编辑器,这个过程很漫长,需要耐心等待(很容易报错,报错了就再重来,保持网络的连接)。


成功打开MCC后,添加触摸库。通过阅读官方的文档,可以得知板载的LED灯是PA15脚,触摸按键是PA22脚。需要分别配置这两个管脚。



在MCC中配置好硬件后,就可以获取触摸按键的状态,以及驱动LED灯了。

这里需要留意一下,MCC自动生成的代码有点问题,需要调整一下触摸按键的初始化和RTC初始化的顺序,触摸初始化需要放到后边,否则触摸按键会无法工作。还需要注意,需要将安全项目(secure)做为主项目,并对安全项目中的main.c进行编辑。

#include <stddef.h> // Defines NULL
#include <stdbool.h> // Defines true
#include <stdlib.h> // Defines EXIT_FAILURE
#include "definitions.h" // SYS function prototypes
/* typedef for non-secure callback functions */
typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
// *****************************************************************************
// *****************************************************************************
// Section: Main Entry Point
// *****************************************************************************
// *****************************************************************************
int main ( void )
{
uint8_t key_status0 = 0;
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();
}
LED_Set();
// LED_Clear();
while ( true )
{
// touch_process(); // update touch state
// key_status0 = get_sensor_state(0) & 0x80; // check touch status
// if (0u != key_status0)
// {
// LED_Set(); // LED on when pressed
// }
// else
// {
// LED_Clear(); // LED off when released
// }
// LED_Toggle();
// long i=0;
// while(i<500000){
// i++;
// }
}
/* Execution should not come here during normal operation */
return ( EXIT_FAILURE );
}
/*******************************************************************************
End of File
*/
五、效果展示:
触摸一下,LED灯就亮了。

再触摸一下,LED灯就灭了。

六、心得体会:
很开心能参加这次活动,MPLAB X IDE 中的MCC图形化界面配置功能真的很强大,但是MCC的安装也是超级痛苦,在群里各位老师的帮助下,经过多次尝试,终于安装好了MPLAB X IDE。期望Microchip能拓展更多的开发工具。