CH573EVT开发包解压到跑通BLE例程:完整指南与避坑要点
2026/9/1 8:58:18 网站建设 项目流程

简介:面向嵌入式与物联网开发者的CH573微控制器官方评估开发包,涵盖芯片技术规格、参考例程、硬件设计参考及工程验证阶段源码,适合需要快速上手沁恒CH573并开展智能家居、传感器网络等项目的工程师与学习者。压缩包共470个文件,约4.37MB,主要包含C语言源码与H头文件、工程项目配置文件(project/cproject/wvproj)、编译生成的hex与库文件,以及PDF芯片资料,覆盖外设驱动、BLE协议栈和基本应用示例。已有678人学习/下载,说明该资源在社区中具有一定的参考价值。通过完整例程和datasheet,开发者可掌握定时器、中断、串行通信等外设初始化方法,并借助lib库理解无线协议栈调用流程;EVT阶段的原理图与配置文件也为硬件调试、功能验证乃至二次开发提供了扎实基础。 前一阵子帮一个刚入行的朋友折腾CH573的开发环境,他下载完“CH573EVT沁恒开发包.ZIP”之后,解压出来对着文件夹发呆,问我说:这里头哪个是例程?哪个是库?为什么没有我能直接打开的Keil工程?这个场景我想很多第一次接触沁恒芯片的人都会遇到。

CH573EVT这个ZIP,表面上看就是一个压缩包,但实际里面塞的是沁恒官方针对CH573这颗RISC-V内核BLE SoC的全套评估资料,包括外设驱动库、BLE协议栈、工程模板、参考原理图和相关文档。它不是给你一个“双击就能编译”的现成方案,而是需要你按它的组织逻辑去理解,然后把工程导入到指定的开发环境里。这篇文章,我就按我自己的使用经验,把这个ZIP包从解压到跑通第一个BLE例程的完整过程讲一遍,顺便把那些容易卡壳的坑都点出来。

1. 拿到ZIP之后:解压和目录理解

1.1 解压压缩包时的两个典型报错

先说说ZIP本身。CH573EVT这个包大小在几十MB量级,从官网下载的时候,如果你用的是浏览器自带的下载,网络稍微一抖就可能拿到一个不完整的文件。解压时如果提示invalid zip archive: could not find eocd或者类似报错,基本就是包没下载完整,别犹豫,重新下载。eocd是ZIP格式结尾的中央目录记录,这个字段找不到,说明解压软件根本没读到完整的压缩包结构。我见过有人拿这种坏包硬折腾一天,最后换一个下载工具就好了,纯属浪费时间。

第二个问题是解压路径。强烈建议解压到纯英文路径,比如C:\CH573EVT,不要放到桌面中文文件夹里,也不要用带空格的目录名。MounRiver Studio基于Eclipse,底层GCC工具链对路径里的中文和空格处理得不好,轻则编译变慢,重则报各种cannot open source file的莫名错误。这个坑在Windows上特别常见,我习惯单独建一个C:\wch\目录来放所有沁恒的开发资料,各家芯片的包井水不犯河水,找起来也方便。

1.2 核心目录结构与各文件夹用途

解压成功后,根目录下一般会有APP、EVT、LIB、REF这几个核心文件夹,不同版本命名会有一点出入,比如有的版本把蓝牙库放在更深的子目录,但整体逻辑不变。我第一次打开的时候,第一反应是去找.uvprojx文件,结果没有,后来才意识到这套开发包是为MounRiver Studio配套的,工程文件是.wvproj格式,不是Keil的工程格式。这一点很多人一开始都会懵。

目录作用使用频率
APP应用层例程,主要围绕BLE,有peripheral、central这类角色例程
EVT外设驱动例程,GPIO、UART、SPI、I2C、ADC、PWM、Timer等基础外设Demo
LIB芯片固件库和BLE协议栈库,编译整个工程用到的静态库和头文件
REF参考文档、芯片数据手册、参考原理图、PCB封装库

从使用频率来讲,你平时改得最多的是APP和EVT里的代码,LIB基本不动,但工程配置里的库路径必须指向正确的位置。很多人下载完直接开干,从不看REF,等到画板子时才回头翻,结果原理图、封装、手册满天飞,效率很低。我的建议是解压完先把REF目录整体看一遍,知道里面有什么,后面遇到问题才知道去哪里找答案。

1.3 建议先翻REF目录,而不是直接开工程

这里多提一句REF。很多人下载ZIP包之后直奔例程,结果编译报一堆错误,其实根因是路径或者工程配置问题。我自己的习惯是解压之后先把REF里的《CH573EVT评估板说明书》翻一遍,里面有一页会写清楚板子的按键、LED、串口和调试口对应哪个GPIO。后面你调BLE例程时,确认广播事件就得靠板上的LED,如果GPIO弄错了,代码跑起来你也看不出来。

另外REF目录里的原理图建议留一份PDF在手机里,后面自己画板子或者排查硬件问题时随时能翻,比临时去官网找方便得多。尤其是天线匹配这部分,CH573的参考设计里有天线的π型匹配电路,直接抄参数比自己瞎调省事太多。射频匹配这东西没有频谱仪很难调试,官方给什么参数,先照抄,不要自由发挥。

1.4 版本差异:尽量用官网最新包

我遇到过拿着两年前下载的CH573EVT来问问题的情况,里面的库文件版本和官方最新BLE库对不上,编出来的固件行为也有区别。如果你要从零开始一个新项目,务必去官网下载当前最新的开发包ZIP,别用网盘里别人转存的老包。老包里的BLE库可能有已知问题,比如广播间隔配置、连接参数更新逻辑这些,用新版能少踩很多坑。

另外,同一个大版本号下,官方偶尔会更新例程里的宏定义或配置文件,所以就算你之前下载过,做新项目前最好也重新下一次,对比看看有没有变化。我的做法是把下载时间写在文件夹名里,比如CH573EVT_202501,这样过几个月后自己也能分清哪个是最新版。

2. 开发环境:为什么是MounRiver Studio而不是Keil

2.1 MRS这台IDE解决了什么问题

CH573用的是沁恒自研的青稞V4A内核,属于RISC-V架构。你熟悉的那套Keil MDK主要是ARM生态的,虽然新版本Keil也开始支持部分RISC-V芯片,但沁恒官方推荐的IDE是MounRiver Studio,基于Eclipse做的,内置了riscv-none-embed-gcc工具链,下载调试也直接在IDE里完成,不用额外搭OpenOCD之类的东西。所以别在Keil里拼命找CH573的设备支持包了,赛道不对。

我第一次用MRS的时候,最大的不适是它和Keil的操作习惯差别很大。比如Keil里你点一下Build就能出hex,MRS里你要先确认工程配置中目标文件是否有hex输出,默认情况下它会自动把elf转成hex,但如果工程配置被改动过,输出步骤可能被丢,导致你烧录时找不到hex文件。这个后面烧录部分我再细说。

2.2 从ZIP到第一个可编译工程的具体步骤

安装MRS之后,解压CH573EVT按照上面的建议放到纯英文路径。然后打开MRS,选一个工作区目录,建议单独建一个Workspace文件夹,不要直接拿解压目录当工作区。实际导入工程的步骤:

  • 打开MounRiver Studio,选择工作区目录。
  • 菜单File -> Import -> Existing Projects into Workspace。
  • 选择CH573EVT解压目录,让IDE识别出里面的.wvproj工程文件。
  • 导入后,先在Project菜单里点Clean,再点Build。第一次编译会比较久,因为要编协议栈库,正常一两分钟以内。

如果导入后看不到工程或者工程是空的,多数是因为你选错了目录层级。比如你选的路径包含两层目录,IDE识别不到里层的.wvproj,这时候换个层级重新导入就行。另外,不要手动去改工程文件里的路径,直接在IDE里调整Properties -> C/C++ Build的配置,否则容易把工程搞坏。我自己早期犯过这种低级错误,结果整个工程无法打开,只能删掉重新导入。

2.3 链接脚本和编译配置别乱动

CH573的链接脚本是工程里的.ld文件,一般不用动。但如果你改了Flash/RAM分区,或者要加自定义段,就需要改这个文件。建议改之前先备份,改错了轻则链接报错,重则固件跑飞。我第一次在CH573上做OTA时,就是因为改炸了.ld文件,导致下载没问题,跑起来就HardFault,后来对着官方示例的.ld文件一步步对比才定位到问题。

还有一点,工程里的优化等级建议保持默认,不要一上来就开-O2。CH573的BLE协议栈对时序有要求,优化等级改变可能影响中断响应行为,跑起来会有一些很微妙的问题,比如广播丢包、连接不稳定。调试阶段用默认优化,最后发布前再评估是否调整,而且调整后要完整跑一遍通信压力测试,不要只看编译通过就发货。

3. 跑通第一个BLE例程:从编译到手机连上

3.1 选对入门例程:先跑peripheral

CH573EVT的APP目录下,最常用的是peripheral例程,它的作用是把芯片配置成一个BLE从机设备,周期性地发出广播。手机或者电脑用BLE调试工具就能扫描到这个设备,验证链路是否通。如果你想做两个板子之间的主从通信,那就要看central和peripheral配合的例程。

我自己第一次验证硬件板子有没有毛病,就是烧一个peripheral例程进去,然后用手机上的nRF Connect扫描。如果能扫描到设备名,说明电源、晶振、BLE射频链路基本没问题;如果扫描不到,大部分情况是外部32.768kHz低速晶振没起振或者没焊接,这个我后面会重点提。不要一上来就直接改代码,先确认硬件链路通不通,这个问题排除得越早,后面调试越顺。

3.2 编译、烧录的完整操作

在MRS里选中peripheral工程,点Build编译。编译完成后,在工程目录的build/output文件夹下面会生成hex文件。如果你没找到hex,去工程属性的Post-build steps里确认一下,MRS默认有生成hex这一步,但如果你手动清理过项目或者改动过配置,这步可能丢,直接把elf文件拖进烧录工具是无效的。

烧录推荐用WCH-Link,SWD接口接SWDIO、SWCLK、GND,如果要调试的话再接VCC和RST。接好之后,在MRS里选择调试配置,目标芯片选CH573,然后点Download。第一次下载如果提示找不到设备,检查两个点:一是驱动有没有装好,二是目标板有没有独立供电。WCH-Link本身可以给目标板供电,但如果板子上有大电容或者特殊电源设计,建议还是外部供电,供电不足会导致下载到一半失败,那种卡在95%然后报错的体验很折磨人。

3.3 用手机验证广播和修改设备名

下载完成后,板子会开始广播。打开手机的nRF Connect或者沁恒的BLE调试工具,开始扫描,列表里会出现一个默认名字的BLE设备,一般是“CH573”或例程里定义的名称。如果你看不到,先确认板子上的LED有没有在闪,有些例程默认用LED指示广播状态。LED不闪说明代码可能没跑起来,而不是射频有问题。

改广播名称也很简单,在peripheral例程里搜索adv_name或者表示本地名称的字段,把字符串改成你自己定义的设备名。注意名字长度不要超过广播包能承载的长度,一般建议不超过20字节。名字太长会导致广播包被截断,甚至影响其他广播字段的发送,这个在产品设计里要注意。广播包里除了设备名,通常还有服务UUID、厂商自定义数据,你要规划好每一段的长度,尽量留出余量。

4. 开发中绕不开的几个坑

4.1 外部32.768kHz晶振不焊,BLE直接罢工

这个坑我见过太多次了。CH573的BLE协议栈内部依赖外部32.768kHz晶振做低功耗定时基准,如果你自己画板子的时候没焊这个晶振,或者焊了一个负载电容不匹配的型号,固件烧进去之后芯片能跑,但BLE广播始终起不来,手机永远扫描不到设备。排查的时候,不要一开始就怀疑代码,先用示波器或者万用表量一下晶振两个引脚。没有示波器的话,把官方评估板的晶振电路原样抄过来最稳妥。

第一次画板子的人容易忽略晶振旁边的两个负载电容,电容值不对会导致晶振不起振或者频偏,进而影响BLE的射频性能,比如连接不稳定、功耗异常。所以PCB设计阶段,晶振这一块我建议完全参考官方参考设计,不要自行改动。省下这几颗电容的钱,后面会花几十倍的时间在排查莫名其妙的连接问题上,不划算。

4.2 WCH-Link连不上芯片的排查顺序

下载失败是新手问得最多的一个问题。按这个顺序排查,基本能解决九成问题:

  • 驱动:WCH-Link插电脑后,设备管理器里能看到调试设备,看不到就重装驱动。
  • 供电:目标板的VCC和GND是否正常,WCH-Link的3.3V输出能力有限,不要同时给太多外设供电。
  • 接线:SWDIO和SWCLK有没有接反,RST不要乱接,尤其目标板上有外部复位电路时。
  • 复位下载:排除以上问题后,在MRS里点下载的同时,按住板子上的复位键,等下载开始再松开,有时候能救回来。

很多人不知道“按住复位下载”这个技巧,它其实适用于很多国产MCU。芯片内部程序跑飞占用调试接口时,按住复位可以让内核停留在复位状态,调试器更容易接管。我靠着这招解决过不少量产现场的问题,做产线测试治具的时候,这招简直就是救命稻草。

4.3 自己画板子例程跑不起来:先查GPIO复用

CH573的GPIO复用和STM32这类ARM芯片不完全一样,外设和引脚的映射关系要看数据手册里的引脚复用配置表,不是想把UART的TX映射到哪个引脚就可以直接用的。比如你想把UART1的TX映射到指定引脚,除了配置串口本身,还需要在寄存器里配置引脚复用功能。例程里通常有对应代码,但如果你从其他芯片移植过来,很容易漏掉这一步,导致串口完全无输出。

我建议的做法是:先在EVT目录下找出你要用的外设对应例程,在它的基础上改GPIO,而不是从零自己写初始化。因为沁恒的库函数封装风格和ST的HAL库差别挺大,直接照着EVT例程改,比自己查寄存器快得多,也稳定得多。另一个细节是,改成不同封装时,某些引脚可能是空脚,这种引脚如果配置成外设功能,会导致信号悬空,需要仔细对照封装图确认。

4.4 做OTA之前先想清楚Flash分区

如果你后面要做OTA升级,CH573的Flash空间要提前规划。BLE协议栈会占用一部分Flash,APP区容量是受限的,你需要先估算自己的固件大小,再决定分区方案。这一点必须在项目最开始就考虑,不然后面发现固件放不下,再回头改分区,牵扯到引导跳转、Flash擦写逻辑、固件升级校验等一堆东西,改动量非常大。

官方开发包里有OTA相关的例程和文档,建议做之前先把文档通读一遍,特别是Flash分区表和升级流程那部分。我见过有人把升级固件写到协议栈区,直接导致芯片变砖,最后只能重新烧录才救回来。做OTA功能时,给固件加版本号和CRC校验这两个环节一定不能省,否则现场升级出了错,排查起来非常痛苦。

我个人在CH573上做过几个小批量项目,回头来看,最值钱的经验就是别小看这个ZIP包里的REF文档。很多人觉得官网下的SDK嘛,解压之后能编译就行,文档看都不看,结果后面画板子时漏了晶振、漏了天线匹配,白白多打了一版板子。我自己的习惯是,每个新芯片到手,先花一个下午把参考原理图和评估板说明书翻完,再开始写第一行代码,这个时间花得非常值。

最后再分享一个小技巧:如果你要把CH573EVT这个包分享给同事,别把整个ZIP解压后的目录直接塞进Git仓库,里面编译产物和库文件体积很大,而且容易引发路径问题。建议只把APP和EVT里的源码目录纳入版本管理,LIB用官方包依赖的方式处理。这样团队协作的时候,每个人从官网下载同一个版本的开发包,你只维护自己改过的源文件,冲突少很多。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询