MPLAB Harmony框架:嵌入式开发的一站式解决方案与实战解析 1. 项目概述当嵌入式开发遇上“一站式”框架最近在折腾Microchip的PIC32系列MCU特别是新的PIC32MZ感触颇深。嵌入式开发尤其是涉及复杂应用和网络功能的项目最头疼的往往不是硬件本身而是软件生态的“碎片化”。你得从不同供应商那里找RTOS、TCP/IP协议栈、加密库、文件系统然后自己吭哧吭哧地集成、调试、解决兼容性问题。这个过程耗费的时间精力远超写业务逻辑本身而且后期发现的集成Bug修复成本是设计阶段的十倍甚至几十倍。这不Microchip显然也看到了开发者的这个痛点随着新一代32位PIC处理器的推出他们同步放出了一个重量级工具MPLAB Harmony。这可不是一个简单的库或者插件而是一个号称“All-in-One”的免费开发框架。它的核心目标很明确为PIC32 MCU的软件开发带来“和谐”Harmony通过提供一个统一的、经过验证的软件组件源来简化开发流程加速产品上市。简单来说Harmony试图把嵌入式软件开发中那些繁琐、重复且容易出错的“脏活累活”给包揽了。它整合了Microchip自家的以及多家知名第三方如Express Logic、FreeRTOS、wolfSSL等的中间件、驱动程序、库和实时操作系统。最关键的是这些组件的授权、购买和技术支持你现在可以直接通过Microchip这一个渠道来完成。对于开发者而言这意味着你不再需要为了一个项目去跟五六家不同的软件供应商打交道研究各自晦涩的授权协议再花大量时间做集成测试。Harmony框架预先帮你做好了这些组件的验证和兼容性测试提供了一个模块化的架构让你能像搭积木一样相对轻松地构建你的应用。无论你是正在评估PIC32用于下一个物联网网关、工业控制器还是消费电子产品的嵌入式工程师还是已经深陷多种软件组件集成泥潭的开发者Harmony框架都值得你花时间深入了解。它试图解决的正是嵌入式系统复杂度飙升背景下那个占比高达60%的、令人头疼的软件开发周期问题。2. MPLAB Harmony框架的核心设计思路解析2.1 直面痛点嵌入式软件开发的“集成地狱”在深入Harmony的技术细节之前我们必须先理解它要解决的根本问题。传统的嵌入式软件开发特别是当项目需要网络连接、安全传输、复杂文件管理或高级用户界面时开发流程通常是这样的首先选定MCU和硬件平台然后开始四处搜寻所需的软件组件。你可能从A公司选择一个免费的RTOS内核从B公司购买一个商业TCP/IP协议栈从C公司的开源项目里找一个SSL/TLS库再用D公司提供的图形库。每个组件都有自己独立的代码风格、配置方式、API接口和潜在的硬件依赖。接下来的工作就是一场“集成马拉松”。你需要手动编写“胶水代码”让这些组件协同工作处理可能存在的内存管理冲突、任务优先级设置矛盾、以及底层的硬件驱动适配。更麻烦的是兼容性问题A公司的协议栈在B公司的RTOS上运行是否稳定C公司的加密库是否占用了D公司图形库需要的关键硬件资源这些问题往往在项目后期系统进行复杂联调时才会暴露而此时修复一个底层集成Bug的代价正如行业数据指出的可能是设计阶段发现并修复的10到30倍。这种模式导致了开发周期不可预测、成本激增并且严重依赖开发团队个人的集成经验。注意这种“拼凑式”开发的最大风险在于“责任真空”。当系统出现一个难以复现的随机崩溃时RTOS供应商可能说是协议栈的问题协议栈供应商可能指向驱动不兼容而驱动开发者则认为是你的应用逻辑有误。排查这类问题极其耗时且往往没有明确的解决方案。2.2 Harmony的解决方案统一平台与预验证生态MPLAB Harmony的核心理念就是从根本上改变上述模式。它不再是一个单纯的工具链或编译器而是一个统一的软件平台和生态系统。其设计思路可以拆解为以下几个关键点单一来源采购与支持这是Harmony最直观的商业价值。Microchip作为框架的提供者和整合者成为了所有内置软件组件无论是自家还是第三方的单一联系点。你只需要从Microchip这里获取框架和组件所有的授权购买、版本更新和技术支持都通过Microchip进行。这极大地简化了商务流程也避免了技术支持上的扯皮。预验证与互操作性保证框架内包含的每一个软件模块在集成到Harmony之前都经过了Microchip的测试和验证以确保它们彼此之间能够稳定、协同地工作。这意味着当你从Harmony的“菜单”中选择FreeRTOS和InterNiche的TCP/IP栈时你可以默认它们之间的基础兼容性如任务同步、内存分配已经得到了解决。这为开发者移除了第一道也是最大的一道技术障碍。模块化与抽象化架构Harmony在软件架构上做了精心设计。它提供了一套统一的驱动抽象层和硬件抽象层将具体的MCU外设操作与上层的中间件和应用逻辑隔离开。这种模块化设计带来了两个巨大好处代码可移植性和RTOS无关性。代码可移植性你的应用层代码和大部分中间件代码通过调用Harmony提供的统一API可以相对容易地在不同的PIC32 MCU型号之间迁移即使它们的时钟、内存或外设存在差异。框架底层会处理这些硬件差异。RTOS无关性你的应用程序可以设计成不直接依赖特定RTOS的API。Harmony在应用和RTOS之间提供了一层抽象理论上允许你在不重写应用逻辑的情况下切换不同的RTOS例如从免费的FreeRTOS切换到功能更丰富的商业RTOS如ThreadX。2.3 目标用户与适用场景分析那么谁最应该关注并使用MPLAB Harmony呢PIC32新项目开发者如果你正准备启动一个基于PIC32 MCU的新项目尤其是需要网络、安全、图形等复杂功能的项目那么从零开始就采用Harmony框架是最佳选择。它能让你快速搭建起一个稳定、可扩展的软件基础避免重复造轮子和早期集成陷阱。现有项目迁移或升级者如果你有一个使用旧版库或分散组件的老项目正面临维护困难或需要添加新功能可以考虑向Harmony框架迁移。虽然迁移本身有工作量但长远来看统一到经过维护和测试的框架下能降低未来的技术债务。学生与教育工作者对于学习嵌入式系统特别是中大型系统设计的学生来说Harmony提供了一个绝佳的、工业级的实践平台。你可以接触到模块化设计思想、RTOS应用、协议栈集成等实际工程中必备的知识点且所有组件在一个框架内环境搭建和学习曲线相对平滑。寻求降低长期维护成本的团队对于企业团队而言采用Harmony意味着将软件供应链简化降低了对多个供应商的依赖风险也使得新成员加入后能更快地上手项目代码库因为大家都遵循同一套框架规范。3. 框架核心组件与模块化架构深度剖析3.1 基础框架与核心服务层MPLAB Harmony框架本身是免费的你可以将其理解为一个精心设计的“骨架”或“底盘”。这个基础框架提供了构建嵌入式应用所需的核心服务和基础设施主要包括以下几个部分配置工具通常以图形化插件如MPLAB Harmony Configurator的形式集成在MPLAB X IDE中。这是你与Harmony交互的主要界面。你可以在这里可视化地选择目标MCU型号使能所需的外设如UART, SPI, I2C, Ethernet, USB等勾选需要加入项目的软件模块RTOS, TCP/IP Stack等。配置工具会根据你的选择自动生成对应的初始化代码、驱动代码和引脚配置代码极大地减少了手动编写底层配置代码的工作量和出错概率。外设驱动库这是Harmony的基石。它为PIC32系列MCU的所有外设提供了统一、抽象的驱动程序接口。与传统的寄存器级操作或厂商提供的分散驱动示例不同Harmony的驱动库设计更加结构化通常包含阻塞式、非阻塞式和基于DMA的操作模式并集成了中断处理和错误管理。统一的API意味着操作一个UART发送数据无论具体是PIC32MX还是PIC32MZ代码看起来几乎是一样的。系统服务框架提供了时钟管理、中断管理、延时、调试输出等基础系统服务。这些服务同样被设计为与具体硬件和RTOS解耦为上层应用提供稳定的运行时环境。3.2 丰富的中间件与第三方组件“菜单”这是Harmony框架价值最集中的体现。它像一个“应用商店”为你提供了经过预集成和测试的各类高级软件模块。根据最初的发布信息其组件库涵盖了嵌入式系统最关键的几个领域组件类别代表组件初始发布提供商关键作用与选择考量实时操作系统FreeRTOS, OPENRTOSReal Time Engineers Ltd., WITTENSTEINFreeRTOS开源、流行、社区支持好适合成本敏感和入门项目。OPENRTOSFreeRTOS的商业授权版本提供专业的技术支持、 indemnification知识产权保障和附加工具适合对产品可靠性和法律风险有高要求的商业项目。网络协议栈TCP/IP StackInterNiche Technologies提供完整的IPv4/IPv6网络协议支持包括TCP, UDP, DHCP, DNS, HTTP等。预集成在Harmony中意味着其与底层驱动和RTOS的适配工作已完成你只需关注应用层逻辑如Web服务器、Socket通信。安全通信库CyaSSL (现wolfSSL)wolfSSL一个轻量级、专注于嵌入式的SSL/TLS库。用于为你的设备添加HTTPS、MQTTS等安全传输能力。在物联网设备中这是实现安全云连接的必备组件。Harmony集成它省去了你自己交叉编译、移植和调试加密算法的巨大工作量。其他中间件文件系统、USB协议栈等Microchip及第三方随着框架发展后续不断加入如FAT文件系统、USB Host/Device协议栈、图形库等模块进一步扩展其应用范围。实操心得在选择组件时尤其是RTOS不要只看是否免费。对于商业产品务必评估技术支持和法律风险。使用纯开源FreeRTOS可能需要自己承担所有问题排查和潜在的知识产权风险。而通过Harmony获取的OPENRTOS商业版本虽然需要付费但你购买的是包含专业支持和法律保障的“产品”这对于需要量产和上市的产品至关重要。Harmony将这两种选择都透明地摆在你面前方便你根据项目阶段和公司政策做决策。3.3 模块化架构与“RTOS无关”设计实现Harmony的模块化是其灵魂。它并非简单地将一堆代码打包在一起而是通过清晰的层次和接口定义来实现松耦合。硬件抽象层位于最底层直接与MCU寄存器打交道但对外提供统一的硬件操作接口。这层隔离了MCU型号差异。驱动层基于HAL实现具体外设的功能性驱动如发送一帧数据、读取一个缓冲区。驱动层API是标准化的。系统服务与中间件层包括RTOS、协议栈、加密库等。它们通过驱动层与硬件交互并通过框架定义的接口与应用程序交互。应用层你的业务逻辑代码所在。它应尽可能只调用Harmony提供的服务接口和中间件API避免直接调用特定RTOS或硬件的原生API。所谓“RTOS无关”主要是通过在应用层和RTOS之间引入一个“OSAL”来实现的。OSAL定义了一套通用的任务创建、信号量、队列、定时器等操作接口。你的应用代码调用这些通用接口而Harmony框架则提供了针对不同RTOS如FreeRTOS, ThreadX的OSAL具体实现。这样当你需要更换RTOS时理论上只需在配置工具中选择另一个RTOS并重新链接对应的OSAL实现库即可应用层代码无需改动。当然绝对的“无关”是很难的一些高级特性或性能调优可能仍会涉及RTOS specifics但这种设计已经极大地提升了代码的可移植性和可维护性。4. 从零开始基于MPLAB Harmony的实际开发流程4.1 环境搭建与项目创建假设我们要为一个基于PIC32MZ EF系列带以太网和加密引擎的物联网数据采集器开发固件需要实现以太网通信和TLS安全连接。安装基础软件安装MPLAB X IDE这是Microchip官方的集成开发环境。安装XC32编译器用于编译PIC32的C/C代码。在MPLAB X IDE中通过插件中心安装MPLAB Harmony Configurator (MHC)。这是Harmony的图形化配置工具是后续所有操作的起点。创建Harmony项目在MPLAB X IDE中选择File - New Project。在类别中选择Microchip Embedded-32-bit MPLAB Harmony Projects。选择MPLAB Harmony 3这里以Harmony 3为例其是后续更成熟的版本原理与初代Harmony相通但更强大。输入项目名称和路径。在“Framework Selection”步骤选择从网上下载或使用本地已下载的Harmony框架包。建议使用在线下载确保获取最新版本。在“Project Configuration”中选择你的目标PIC32具体型号例如PIC32MZ2048EFM144。4.2 使用配置工具进行图形化配置项目创建后IDE会自动打开MPLAB Harmony Configurator界面。这是整个开发流程的核心。时钟与引脚配置在“Clock Diagram”标签页配置系统时钟源、PLL倍频、分频器等以得到你需要的核心频率和外设时钟。配置工具会生成直观的时钟树图并自动计算配置寄存器值避免手动计算错误。在“Pin Diagram”标签页以可视化的方式分配芯片引脚功能。你可以将某个引脚拖拽分配给UART的TX另一个分配给以太网的RXER等。工具会自动检查冲突并生成引脚初始化代码。使能与配置外设驱动在“Project Graph”视图从左侧的组件库中找到并双击需要的外设如ETH(以太网控制器)、TMR1(定时器)、UART2(用于调试输出) 等。它们会被添加到项目图中。点击图中添加的每个外设模块右侧属性窗口会显示其详细配置选项。例如配置UART的波特率、数据位、停止位配置以太网的MAC地址、PHY类型、连接模式等。添加软件组件这是Harmony的精华。同样在组件库中找到并添加FreeRTOS。添加TCP/IP Stack。添加后你需要在属性中配置网络参数比如静态IP地址或启用DHCP客户端。添加wolfSSL TLS库。添加后可能需要将其与TCP/IP栈建立依赖关系在项目图中用“连线”表示并配置加密套件、证书等。生成代码完成所有图形化配置后点击Configurator工具栏上的“Generate Code”按钮。MHC会根据你的所有配置自动生成完整的、立即可编译的工程代码。这包括initialization.c/.h系统初始化代码。peripheral目录所有配置好的外设驱动代码。osal和rtos目录RTOS适配层和FreeRTOS源码。tcpip和wolfssl目录网络栈和SSL库的集成代码。main.c一个包含SYS_Initialize和SYS_Tasks调用的主函数框架。注意事项首次生成代码后切勿手动修改在configuration目录下由工具生成的文件文件名通常有gen前缀。因为这些文件会在你下次通过MHC修改配置并重新生成代码时被覆盖。你的自定义应用代码应该写在项目指定的“应用”区域或新建的文件中并通过头文件接口调用Harmony服务。4.3 编写应用逻辑与调试理解任务结构在main.c的SYS_Tasks函数中框架已经初始化了RTOS并启动了调度器。你需要创建自己的应用任务。例如创建一个APP_TCP_Client_Task用于处理网络连接和数据发送。调用Harmony API在你的任务中使用Harmony提供的API进行开发。例如使用TCPIP_TCP_ClientOpen打开一个TCP连接。使用wolfSSL_connect进行TLS握手。使用DRV_USART_Write发送调试信息。 这些API是统一的底层驱动和RTOS的细节已被屏蔽。编译与调试像普通MPLAB X项目一样进行编译、链接。使用仿真器如PICKit4连接目标板进行下载和在线调试。你可以在IDE中查看RTOS任务列表、队列状态设置断点观察变量调试体验与开发裸机程序或传统RTOS程序基本一致。5. 实战经验优势、挑战与迁移策略5.1 采用Harmony框架的显著收益经过实际项目验证采用MPLAB Harmony框架能带来以下几方面的切实好处开发效率的飞跃图形化配置和自动代码生成将开发者从繁琐的底层寄存器配置和驱动编写中解放出来。过去需要几天才能调通的以太网TCP/IPRTOS基础环境现在可能只需要几小时就能搭建完成并跑通第一个Demo。代码质量与可靠性提升使用经过Microchip和第三方供应商共同验证的代码库显著降低了因驱动Bug或组件间不兼容导致的系统不稳定风险。这为产品尤其是工业级和消费级量产产品提供了更高的可靠性基线。降低长期维护成本统一的框架意味着团队有统一的代码规范和技术栈。新成员入职培训成本降低。当Microchip发布新的PIC32型号或组件更新时在Harmony框架下进行迁移或升级远比在散装代码库中操作要系统化和可预测。更快的市场响应正如Microchip所强调的当终端市场需求变化需要为设备增加新功能例如从HTTP升级到HTTPS或增加某种云协议支持时你可以快速地从Harmony组件库中评估和集成新的中间件而不必从头开始寻找、评估和集成一个陌生的第三方库。5.2 可能遇到的挑战与应对策略当然引入任何一个新框架都不是银弹Harmony也不例外在采用初期可能会遇到一些挑战学习曲线对于习惯了直接操作寄存器或使用简单库的开发者Harmony的模块化思想和配置工具需要一定的适应时间。你需要理解框架的层次结构知道在哪里配置在哪里写代码。策略充分利用Microchip提供的丰富资源包括详细的帮助文档、数据手册、以及官网和社区如Microchip Developer Help上的大量示例项目Example Projects。从模仿一个最接近你需求的示例项目开始是最快的学习路径。代码体积与资源占用由于集成了完整的驱动、RTOS和中间件生成的代码体积通常会比自己精心裁剪的“裸机”或最小化RTOS项目要大。对Flash和RAM资源紧张的低端型号PIC32可能构成压力。策略Harmony的模块化特性本身也是解决之道。在配置工具中只勾选你项目真正需要的功能模块。例如如果你的项目只用UART和SPI就不要使能USB和以太网相关的所有驱动和服务。仔细调整RTOS的配置如任务栈大小、优先级数量、功能裁剪并使用编译器的优化选项。对复杂问题的调试当系统出现一个深层次的、涉及多模块交互的Bug时例如网络数据包丢失导致SSL握手超时进而触发看门狗复位由于代码层级较多定位问题根源可能比在扁平代码中更复杂。策略建立体系化的调试方法。首先利用Harmony和RTOS提供的调试功能如系统状态查看、任务运行统计。其次采用分模块隔离测试例如先确保TCP/IP通信在裸数据下稳定再启用SSL。最后熟练使用逻辑分析仪、网络抓包工具如Wireshark进行协同调试。5.3 从传统开发模式向Harmony迁移如果你有一个现有的、未使用Harmony的PIC32项目考虑迁移时需要权衡利弊。何时考虑迁移项目进入重大功能重构或升级周期。现有代码维护困难且需要引入Harmony已集成的复杂新功能如图形界面、新的安全协议。团队计划将多个不同风格的老项目统一到新的技术平台上。迁移策略推荐渐进式评估与规划不要试图一次性重写整个项目。分析现有代码识别出最复杂、最不稳定或最需要新功能的部分例如网络模块。新建Harmony子模块在现有工程旁为一个新功能或用Harmony重写的模块创建一个全新的Harmony项目。确保它能独立运行。接口与集成设计清晰的接口如通过队列、共享内存或简单的API调用来连接老代码和新的Harmony模块。初期可能看起来有些“丑陋”但这是风险可控的方式。逐步替换随着时间推移逐步将其他模块迁移到Harmony框架下最终完成整体替换。这种方式保证了项目在迁移过程中始终处于可工作、可发布的状态。6. 常见问题与排查技巧实录在实际使用MPLAB Harmony进行开发的过程中无论是新手还是有一定经验的开发者都会遇到一些典型问题。下面我将一些常见问题及其排查思路整理成表并分享一些从实战中获得的技巧。问题现象可能原因排查步骤与解决思路项目编译通过但下载到芯片后无任何反应如LED不闪串口无输出1. 时钟配置错误。2. 引脚配置冲突或错误。3. 中断向量表未正确设置在切换工程或型号时常见。4. 堆栈溢出导致启动即崩溃。1.检查时钟使用配置工具反复确认时钟图特别是PLL锁定、分频系数。用示波器测量主时钟输出引脚如果使能了的频率是否与预期相符。2.检查引脚在Pin Diagram视图确认所有使用到的引脚功能分配正确无多重冲突。特别是调试串口引脚是否被其他功能占用。3.检查链接器脚本确认MPLAB X工程中使用的链接器脚本.ld文件与目标MCU型号完全匹配。不同型号的RAM/Flash地址可能不同。4.增大堆栈在RTOS配置或项目属性中暂时显著增大主堆栈和中断堆栈大小看是否恢复正常。添加了TCP/IP栈和FreeRTOS后程序运行一段时间后死机或重启1. 任务栈空间不足。2. 中断优先级与RTOS内核冲突。3. 网络缓冲区不足或内存泄漏。4. 看门狗未喂食。1.分析栈使用利用FreeRTOS的uxTaskGetStackHighWaterMark函数在运行时检查各个任务的栈高水位线确保有充足余量建议20%以上。2.检查中断配置确保用于RTOS心跳的定时器中断如SysTick优先级设置为RTOS要求的最低优先级。其他外设中断优先级不应高于此优先级以防中断嵌套导致内核数据损坏。3.调整TCP/IP参数在TCP/IP栈配置中适当增加MAX_TCP_SOCKETS,MAX_UDP_SOCKETS以及数据包缓冲区数量。使用工具监控堆内存使用情况。4.处理看门狗如果使能了看门狗确保在RTOS的空闲任务钩子函数或一个低优先级任务中定期喂狗。网络通信不稳定时断时续或速度极慢1. 以太网PHY芯片初始化或配置不正确。2. MAC与PHY之间的接口MII/RMII引脚配置或时序问题。3. 网络任务优先级过低导致数据包处理不及时。4. 防火墙或路由器设置问题。1.确认PHY型号在Harmony的ETH驱动配置中精确选择你所使用的PHY芯片型号如LAN8742A。不同PHY的寄存器配置差异很大。2.检查RMII引脚RMII接口对时钟和数据线的时序要求严格。确认原理图中相关引脚连接正确并在配置工具中检查RMII_REF_CLK引脚是否被正确配置和映射。必要时用示波器查看REF_CLK是否有稳定的50MHz时钟。3.提升网络任务优先级将处理TCP/IP栈的任务如TCPIP_STACK_Task设置为较高的优先级确保网络数据包能得到及时处理。4.抓包分析在PC端用Wireshark抓取与设备通信的数据包分析TCP握手、重传等情况判断问题是出在设备端还是网络环境。使用wolfSSL进行TLS握手失败1. 系统时间未设置证书有效期验证需要。2. 根证书未正确加载或格式不对。3. 内存不足无法分配握手所需缓冲区。4. 加密算法套件不匹配。1.设置系统时间实现一个简单的SNTP客户端从网络获取时间或在设备中硬编码一个大致正确的时间用于证书有效期校验。2.检查证书确认你加载的服务器根证书或客户端证书是wolfSSL支持的格式如DER或PEM。使用wolfSSL_CTX_load_verify_locations等函数的返回值判断加载是否成功。3.增大内存池在wolfSSL的配置头文件如user_settings.h或Harmony配置中增加MEMORY_BUF_SIZE等宏定义的值。4.调试输出启用wolfSSL的调试功能wolfSSL_Debugging_ON()将调试信息输出到串口查看握手失败的具体错误码。独家避坑技巧版本管理是关键Harmony框架、编译器、MHC插件以及MPLAB X IDE本身都在不断更新。在开始一个长期项目时务必记录下所有工具的精确版本号例如Harmony v3.6.1, XC32 v2.50, MPLAB X v5.50。不同版本间可能存在API变动或兼容性问题。最好能在团队服务器上保存一套完整的、已知可用的开发环境安装包。善用“系统控制台”在MPLAB X IDE中运行程序时查看“系统控制台”输出。Harmony和许多组件在初始化失败或遇到严重错误时会通过SYS_DEBUG或SYS_CONSOLE打印错误信息。确保你的调试串口配置正确并勾选了相应的调试输出级别。从官方示例入手修改而非重写Microchip为几乎所有外设和中间件组合都提供了丰富的示例项目。当你需要实现某个功能时第一反应不应该是自己从头创建项目而是去Harmony的安装目录或GitHub仓库里寻找最接近的示例。然后在这个示例的基础上进行修改这能避免大量基础配置错误。理解“生成代码”的边界MHC是一个强大的代码生成器但它不是万能的。它主要生成初始化和配置代码。复杂的应用逻辑、业务状态机、算法实现等仍然需要开发者手动编写。清晰地划分“生成区”和“手写区”是保持项目整洁和可维护性的基础。最后我个人体会是MPLAB Harmony框架代表了嵌入式开发工具向更高层次抽象和集成化发展的趋势。它确实在项目初期设置和复杂功能集成上带来了巨大的效率提升尤其适合需要快速原型验证和团队协作的中大型项目。然而它也要求开发者从“寄存器工程师”向“系统架构师”的角色进行一定转变需要花时间去理解其设计哲学和模块关系。一旦掌握了它你会发现构建一个稳定、功能丰富的嵌入式系统不再是一件令人望而生畏的艰巨工程。对于长期深耕Microchip PIC32生态的开发者来说投入时间学习并掌握Harmony是一项非常值得的投资。