Funpack5-2 - 基于PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit实现两路RGB LED PWM控制
该项目使用了PIC32CM5164LS00048,实现了驱动两路RGB LED的设计,它的主要功能为:使用定时器产生PWM信号,控制两路RGB LED分别显示指定颜色。
标签
Funpack活动
开发板
贪吃蛇
更新2026-06-22
14

一、项目介绍

使用PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit套件,额外搭配两颗4引脚共阴极RGB LED,使用3路PWM+1路定时器控制GPIO,实现以高扫描频率和高刷新率,同时控制两个LED显示不同颜色。

二、硬件介绍

  PIC32系列是基于32位RISC架构的高性能微控制器家族,以其出色的处理能力、丰富的外设集成以及高指令密度而闻名,广泛应用于工业自动化、物联网、医疗设备、人机图形界面和音频处理等诸多领域。PIC32系列最初的架构核心源自美国微芯科技公司(Microchip)。早年Microchip以其经典的8位(PIC16/PIC18)和16位(dsPIC/PIC24)微控制器闻名于业界。2007年,为了进军高性能32位市场,Microchip正式推出了基于MIPS公司的MIPS32 M4K架构的PIC32MX系列。2016年,Microchip斥资收购了其主要竞争对手之一:Atmel。后者的代表产品包括AVR(含AVR32)和SAM系列,AVR系列涵盖了8位机及准16位机,且拥有非常开放的生态环境,Arduino最初的产品就基于AVR系列打造,而SAM系列则基于ARM指令集,主攻32位,且对安全功能有要求的场景。收购完成后,Microchip推出了融合两家公司产品技术的新系列:基于ARM指令集的新PIC32。本次使用的PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit板载的PIC32CM5164LS00048芯片就是其中一员。

  PIC32CM LS系列是Microchip在完成与Atmel的技术融合后推出的代表性低功耗、高安全性子系列,其中的CM代表Cortex-M内核,而LS则代表Low Power & Security(低功耗与安全)。本系列在保持较低BOM成本的情况下,仍然提供了较大的Flash与SRAM空间,且支持ARM TrustZone技术,可以在片内建立两片独立的区域,只保留有限的代码用于夸区域调用,将敏感数据与一般数据隔离开,与安全启动一同为实现便于审计的高级安全功能提供硬件基础。另外,其还搭载了Microchip独特的外设事件系统,允许外设之间在无需CPU干预的情况下直接进行异步通信,从而降低功耗并提高响应实时性。

  PIC32CM5164LS00048搭载工作频率可达48MHz的Cortex-M23内核,并如前所述内置硬件TrustZone安全架构,且支持安全启动。片上具有512KB Flash、16KB独立Data Flash与64KB SRAM,支持以256字节为粒度自由分配安全区与非安全区的容量。另外还提供3个基本计时器、4个高级计时器、6个通用串行协议控制器SERCOM(可配置为SPI、USART或I2C)等外设。

  PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit套件在PIC32CM5164LS00048最小系统的基础上额外添加了调试器,可以方便地使用USB线缆直接进行开发和调试工作。另外,两侧的IO引出排针也设计成了免焊接的错位引脚排列模式,以便用户快速上手。

三、系统架构

  使用C语言编程,通过ARM官方规范CMSIS以及Microchip开发的PLIB外设库操作外设,控制定时器产生3路频率相同、占空比不同的PWM信号,并连接到两颗RGB LED三个颜色的阳极。另外再控制一个定时器,并分配两个GPIO,分别连接到两颗LED的阴极,用于控制当前扫描状态。此外,也充分利用了板载按钮,用于在按下时暂停扫描动作,以观察LED的扫描过程。

chart.png

四、软件架构

  由于主控芯片是ARM架构,且支持TrustZone,因此需要配置两个独立的工程,分别对应安全区域与非安全区域运行的应用。本次实验没有对Bootloader的需求,因此没有开发单独的Bootloader应用,CPU启动后会直接执行安全应用。本次实验的逻辑均在非安全应用中实现,因此安全应用在完成一些初始化操作后就会直接陷入非安全态,启动非安全应用。

  非安全应用启动后,首先初始化串口SERCOM3、系统计时器SysTick、GPIO、定时器TCC0、TC0与TC1,并设置GPIO初始状态。而后进入主循环,监听并响应串口发来的调试命令。定时器TCC0负责产生100kHz左右的3路PWM信号,控制LED三个颜色的亮度。定时器TC0负责闪烁板载橙色LED指示灯,并循环切换RGB LED要显示的颜色。定时器TC1负责以10kHz的频率切换两个RGB LED共阴极的选中状态,并确保切换时的时间空隙(死区),以免两个LED出现同时发光或发出不正确颜色的光等问题。

flow2.png

五、硬件连接

  TCC0的3路输出WO0、WO1和WO2分别对应PA8、PA9、PA10引脚。分配PA11、PA12分别作为两颗RGB LED的共阴极驱动引脚。板载LED、SERCOM3串口均已预先连接好。最后使用Micro USB数据线连接电脑与板载调试器接口。注意板子两端各有一个Micro USB接口,分别对应调试器与PIC32CM5164LS00048的USB外设,接错会无法调试、烧录程序,但对测试运行没有影响。

六、软件代码和结构

  Microchip为旗下产品提供了MPLAB集成开发环境(2011年左右更新为MPLAB X),但最近几年开始逐步迁移到VSCode平台,作为MPLAB扩展提供开发功能。安装MPLAB X时也会先提示了解VSCode方案。本次实验使用VSCode+MPLAB扩展进行开发。

  MPLAB(包括X或VSCode扩展)均不包含编译器。PIC32CM系列可选XC32编译器或ARM-GCC编译器(当然也可以选择其他厂家例如MDK或IAR等的编译器产品)。XC32对个人用户免费,免费版本不支持代码优化,只能开启-O0编译选项,但可以申请60天的免费试用。

  Microchip产品使用MCC配置外设状态并生成相关代码,以及管理板级支持包(CMSIS、PLIB、Harmony等)。MCC提供了图形化界面以配置各种外设。一般会配合MPLAB(包括X或VSCode扩展)使用。

  压缩包中,gen目录下的test1和test2文件夹是MPLAB工程,用于进行安全应用和非安全应用的编译工作。main目录是主要工作区,其中的ws.code-workspace文件是VSCode工作区配置文件,用于持久化保存工作区。main\mcc1目录包含了MCC配置文件,其中main\mcc1\mcc.mcc\mcc\目录下的文件是MCC存储的外设配置数据和其他相关数据,例如定时器、引脚分配、安全与非安全内存划分,以及工程生成选项等等。main\mcc1\mcc.mcc\secure目录包含安全应用的代码。由于安全应用下没有实现额外的逻辑,因此其仅预留文件夹结构,用于MCC生成初始化代码。与之对应的main\mcc1\mcc.mcc\non_secure目录包含本次实验的主要逻辑,均位于main\mcc1\mcc.mcc\non_secure\src\main.c中。其余头文件、板级支持文件和外设库文件等等均由MCC填充。

  工程编译方法如下:

  1. 安装VSCode,可选手动安装XC32编译器(也可以让VSCode MPLAB扩展自动安装,不过可能比较慢),安装VSCode MPLAB扩展。
  2. 解压zip文件到一个文件夹。
  3. 进入解压文件夹下的main目录,使用VSCode打开ws.code-workspace工作区配置。
  4. 此工作区包含三个目录。由于MPLAB扩展的BUG,MCC配置必须与Secure项目和Non-Secure项目分开,不能共用一个目录,否则编译时ninja会将两个工程的文件混在一起。
  5. 打开工作区后,确保MPLAB扩展已启用。此时,如果没有安装XC32编译器,扩展应该会先提示安装。如果已经提前安装好编译器,但扩展仍提示未找到,可以使用Ctrl+Shift+P执行MPLAB: Add toolchain命令手动输入编译器路径。
  6. 接下来需要使用MCC,从配置文件生成整个工程。Ctrl+Shift+P,执行MPLAB MCC: Launch启动MCC。(见下图1)
  7. 选择MCC配置,直接按回车选择从zip文件中解压出的。
  8. 等待一段时间,MCC加载完成后会显示一块类似流程图的框图区域。
  9. 点击左上角的Project Resource选项卡,然后点击Generate按钮。(见下图2)
  10. 耐心等待MCC下载设备支持包。完成后,MCC下方的User Output选项卡中会在倒数第二行输出Generation complete (total time: 1 milliseconds) 字样。此时可以关闭MCC。
  11. 点击左侧的MPLAB扩展选项卡,找到下方的test1工程,并点击右侧对应的Build按钮。(见下图3)
  12. 如无意外,会出现编译成功的提示。在out目录中可以找到最终产物hex文件。

step1.png

step2.png

step3.png

七、测试运行

  上电后调试器先初始化,而后主控芯片PIC32CM5164LS00048初始化并启动,最后进入非安全应用区执行主要逻辑。

  正常运行时,板载橙色LED指示灯以1Hz频率闪烁,同时两颗RGB LED以1Hz频率分别切换颜色。为了平衡红绿蓝三个颜色的量子效率差异,左侧的LED配置为红色和绿色较低占空比,蓝色较高占空比,而右侧LED三种颜色使用同样的占空比。

unt2.jpg

unt1.jpg

  动态演示请参见视频。

八、总结与展望

  本次项目探索了实验平台的开发与调试流程,熟悉了MPLAB工程结构以及MCC的使用及配置过程,并初步掌握PIC32 CM系列的开发与外设控制。

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