这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » MIcroChip的MCC工具上的一个bug

共4条 1/1 1 跳转至

MIcroChip的MCC工具上的一个bug

专家
2026-03-23 13:04:16   被打赏 50 分(兑奖)     打赏

这几天一直在搞MPLAB X IDE 6.30版开发PIC32CM系列的32位单片机的开发板应用,带有触摸外设。目前来看,过程一言难尽,为了搞通这个MCC,能让MCC正常启动,破费一番周折。从6.0、6.2、6.25、6.3试了个遍,中间不断地安装、编程·、测试、卸载,熬了两个夜。没睡好,差点垮了。幸好现在终于在6.30上弄出来了。该说不说有了MCC的帮助,开发确实变方便了,但另一个问题来了。PIC32CM系列的32位单片机带有TrustZone配置,建立新工程时,一定会生成两个工程,一个是nosecure的,一个是secure的。我尝试建立nosecure的,并且在PIN指定资源为nosecure的,但触摸外设部分的代码依旧会生成在secure工程中。这种混杂的工程,怎么运行以及运行顺序,短时间内根本无法彻底理解。

最后没办法,只好把全都改成secure的,让生成的代码全部全都在secure工程,这才能够正常编译、下载、运行。但在使用touch库的时候,自动生成的代码,又出了问题。一开始没注意,以为没问题,结果运行起来后,touch处理没执行起来。开始还以为是触摸处理的代码有问题,毕竟是第一次接触Microchip的触摸外设嘛,查了半天,最后发现由MCC生成的代码是有问题的。在自动生成的初始化代码(SYS_Initialize函数)中:

void SYS_Initialize ( void* data ) {
    PM_Initialize();
    NVMCTRL_SEC_REGS->NVMCTRL_CTRLB = NVMCTRL_CTRLB_RWS(2);
  
    PORT_Initialize();
    CLOCK_Initialize();
    NVMCTRL_Initialize();
    EVSYS_Initialize();

      touch_init();
      RTC_Initialize();
      
    NVIC_Initialize();
}

注意看:

      touch_init();
      RTC_Initialize();

触摸外设需要使用RTC资源,结果代码中初始化的逻辑错了,应该改成:

      RTC_Initialize();
      touch_init();

这个顺序才是正常的。

经过这样的修改,程序终于可以正常检测触摸了。




关键词: 菜鸟学单片机     MPLAB X IDE     MCC    

助工
2026-03-23 22:30:55     打赏
2楼

通过持续不断地debug,才能更加深入理解芯片工作机理,熟练掌握开发工具使用


院士
2026-03-26 18:22:37     打赏
3楼

印象中ST可以关闭Trustzone。这样就只有一个工程文件了。


专家
2026-03-28 23:03:11     打赏
4楼

额,在MPLAB X上没有找到这样的开关。可能还不是很熟悉的缘故。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]