内容介绍
内容介绍
项目介绍:
- 本项目是基于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

关键代码介绍
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循环才是我们真正的程序功能控制逻辑:
- 周期性调用触摸库来处理触摸按键相关功能
- 读取触摸按键的状态,并写入按键的状态flag
- 对比前后的状态,在按键从没有按下到按下时切换LED灯的状态
- 更新触摸按键的状态flag
功能展示图及说明
如图轻按触摸按钮可以点亮LED1,再次轻触可以关闭LED。

项目中遇到的困难以及解决办法:
- 本来我是想使用MPLAB for VS Code插件搭配VSCode编辑器来开发这个项目,但是奈何一些众所周知的原因,在国内我一直无法完整的获取到MCC配置器插件,每次插件要么卡在启动画面,要么完全无法打开,最终我只能选择放弃使用VSCode+插件的方式开发,转而使用官方IDE MPLAB X来开发这个项目
- 开发项目的过程中,我一直在尝试使用官方的参考用例来修改以适配我的这个工程,但官方示例往往是基于老旧的运行库或软件环境,每次都是感觉我配置的毫无问题,但是真正使用MCC生成的代码却一堆报错,搞得我一度想放弃。后续我索性直接新建一个基于开发板的全新工程,配置过程反而无比顺畅。
- 调试触摸的过程中,因为这个M23内核是一个安全处理器,它包含了一个安全工程和一个非安全工程,这个看起来非常好的功能却在开发的过程中给我挖了不少坑,因为生成工程会变成两套,我总是搞不清我的代码该写在安全工程的main函数里,还是写在非安全工程的main函数中,因为使用MCC配置器生成代码,也似乎存在安全工程版本和非安全工程版本,我在两者之间切换的时候就经常弄丢配置文件,导致项目直接变得不可用,后来我在群里看到也有类似用户在讨论相关问题,终于慢慢的捋顺了其中的逻辑。
心得体会:
本来以为点灯嘛,这是个再基础不过的功能了,想我玩过这么多的开发板,点灯总是不至于让我翻车的咯,但是真正从一款从来没有接触过的开发板从零开始配置外设,配置IO功能,没有仔细的阅读示例代码,和参考用例,终究还是非常难以继续,后面还是要沉下心来一点一点的认真阅读示例代码,分析各个外设的功能以及配置。不能总是栽进想当然的思路中去。
附件下载
Project.7z
团队介绍
我是Cubeline,一个新手开发者
评论
0 / 100
查看更多
猜你喜欢
Funpack5-2 - 用EV41C56A完成任务1触摸输入与LED控制该项目使用了EV41C56A,实现了任务1的基础和进阶题目的设计,它的主要功能为:触摸输入与LED控制。
lyh114
35
Funpack5-2 - 基于EV41C56A开发板实现触摸输入与LED控制该项目使用了Microchip EV41C56A 开发板,实现了触摸输入与LED控制的设计,它的主要功能为:电容触摸按键控制LED灯亮灭,包括短按和长按控制。
FuShenxiao
38
Funpack 5-2 EV41C56A 开发板 触摸输入与led控制功能-进阶版该项目使用了EV41C56A 开发板,实现了触摸输入检测与LED灯控制功能的设计,它的主要功能为:基于 EV41C56A 开发板板载触摸输入按键实现对板载LED灯的控制。
bigjiong
27