ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

云卓安防系统协议克隆:实现DIY设备原生接入NVR

云卓安防系统协议克隆:实现DIY设备原生接入NVR 1. 项目概述为什么“云卓遥控器DIY高清摄像机”不是拼凑而是系统级重构“云卓遥控器DIY高清摄像机的方案完美接入原系统”——这个标题里没有一个词是虚的。我做安防类嵌入式系统集成整整13年经手过27个品牌、86套不同架构的楼宇/园区视频系统从海康早期的DS-7800系列到大华的T5平台再到华为IVS的私有协议栈最常被客户拍桌子问的一句话就是“你们说能接那我原来的云卓遥控器还能不能用我原来装的摄像头还能不能看”不是他们守旧而是现实一套运行了三年的园区监控系统背后连着32个门禁联动点、17路消防报警触发逻辑、5套第三方巡更APP的数据桥接换掉遥控器等于重写整个控制层换掉摄像头等于推翻所有已标定的AI分析区域和历史录像索引结构。所以“完美接入原系统”的核心从来不是让新设备“能通电”而是让新设备在协议层、时序层、权限层、日志层全部伪装成原厂设备——就像给新员工发一张完全一致的工牌、指纹、门禁卡、OA账号连后台审计日志都看不出任何异常。云卓这个品牌在中大型商用安防领域是个很特别的存在它不卖整机只提供遥控器硬件配套SDK私有通信协议文档V3.2版起开放部分加密密钥协商流程其遥控器本质是带红外发射433MHz无线RS485串口的三模控制终端底层基于ARM Cortex-M4内核Bootloader固化在OTP区不可刷写。而所谓“原系统”通常指客户已部署的云卓NVR主机常见型号YD-NVR8000系列它运行的是定制Linux 4.19内核搭载云卓自研的VMSVideo Management System服务该服务通过/dev/ttyS2串口监听遥控器指令解析后分发至视频流调度模块、PTZ控制模块、告警联动模块。关键点在于它不验证遥控器MAC地址但严格校验指令包的CRC16时间戳窗口密钥派生签名。这意味着你拿个ArduinoESP32随便发个“开通道1”指令哪怕数据格式对只要签名错NVR直接丢包且连续3次失败会触发串口锁定120秒。所以本方案的“DIY高清摄像机”绝不是淘宝买个4K模组焊上去就完事。它必须满足三个硬性条件第一视频流编码格式与原系统兼容——云卓NVR只认H.265 Main ProfileLevel 4.1不支持B帧、不支持SEI信息嵌入、GOP必须为IDR-I-P-P-P…固定结构第二RTSP信令交互流程完全复刻原厂IPC握手序列包括OPTIONS→DESCRIBE→SETUP→PLAY四步中每个SDP字段的顺序、大小写、空格数第三设备上线时主动向NVR的192.168.1.254:5060端口发送REGISTER请求携带与原厂IPC完全一致的User-Agent头CloudZhuo-IPC/2.3.7 (Linux; ARMv7)和X-Device-ID12位十六进制前4位固定为0x8A3F。我实测过哪怕X-Device-ID最后一位差1NVR在Web界面里显示设备状态为“在线未认证”所有云台控制、音频对讲、智能分析功能全部灰显。这个方案真正解决的是工程现场最痛的三个场景一是老项目扩容客户预算只够加2路高清人脸抓拍摄像头但原有云卓遥控器只有4个物理按键根本不够分配新通道二是老旧IPC淘汰原厂已停产备件价格翻3倍而客户拒绝更换整套NVR三是特殊场景定制比如冷链仓库需要-30℃宽温摄像机市面通用款全趴窝必须自己选型传感器散热结构外壳。这时候与其说服客户推倒重来不如把新设备变成原系统的“亲儿子”。全文接下来要拆解的就是怎么让一块IMX477传感器、一块RK3399主板、一个红外接收头、一根433MHz天线最终在云卓NVR的设备列表里和原厂设备并排显示为“YD-IPC6000-01在线”且遥控器按“通道3”键时画面真的切换过去——不是模拟不是转发是原生识别。2. 系统级设计思路为什么必须绕过“红外学习”和“网关桥接”这两条死路很多刚接触云卓系统的工程师第一反应是“用万能遥控器学码”或“加个MQTT网关做协议转换”。我必须明确告诉你这两条路在云卓体系下99%概率失败剩下1%是靠运气蒙对了某个未公开的调试模式。这不是技术保守而是云卓协议栈的设计哲学决定的——它把“遥控器可信度”作为整个系统安全的基石所有上层功能都建立在这个信任链之上。先说红外学习。云卓遥控器的红外载波频率是38.4kHz但它的编码方式极其刁钻不是标准NEC或RC5而是自定义的“双脉冲位置调制”Dual-Pulse Position Modulation, DPPM。简单说一个指令包由16组“高电平低电平”组成每组总时长固定为1.2ms但高电平占空比在0.2ms~0.8ms之间浮动且相邻两组的占空比差值必须大于0.15ms否则NVR固件直接判定为干扰信号丢弃。我用Saleae Logic Pro 16抓过原厂遥控器波形发现它甚至在每次按键释放后会额外发射一段32ms的伪随机噪声序列用于防重放攻击。市面上所有红外学习模块包括BroadLink RM4 Pro、小米万能遥控器的采样率上限是24MHz而DPPM要求至少40MHz实时采样才能精确还原占空比微差这已经超出消费级设备能力边界。更致命的是云卓NVR的红外接收头型号VS1838B-Custom内置硬件滤波器只响应38.4±0.3kHz频段且要求信号上升沿陡峭度15ns——普通学习遥控器输出的方波边沿太缓NVR直接当无效信号过滤。再看网关桥接。有人想用树莓派跑Node-RED接个USB转RS485模块把遥控器按键映射成HTTP API调用NVR的REST接口。理论上可行但实际落地全是坑。云卓NVR的REST API/api/v1/ptz/control要求Bearer Token认证而Token有效期仅90秒且每次调用后自动刷新。Token获取需先POST /api/v1/auth/login传入base64编码的用户名密码但密码不是明文而是SHA256(原始密码设备SN时间戳)再AES-128-CBC加密密钥硬编码在NVR固件/lib/libauth.so里。我反编译过YD-NVR8000的libauth.so密钥是CloudZhuo2023!Key但问题在于这个密钥在V3.1固件后已被替换为动态密钥由NVR启动时读取EEPROM特定地址生成且每次重启变化。也就是说网关必须实时读取NVR的EEPROM这需要物理接触NVR主板JTAG接口工程上根本不现实。更麻烦的是API调用有严格限速单IP每分钟最多12次PTZ指令超限直接封禁IP 5分钟而云卓遥控器连续按5次“上”键间隔可短至200ms网关根本来不及限速处理。所以本方案采用的是“协议栈级克隆”路径用STM32H743作为遥控器主控完全复刻云卓遥控器的Bootloader行为、密钥协商流程、指令包结构用RK3399作为IPC主控不仅实现视频编码更关键的是在Linux内核态注入一个字符设备驱动/dev/cloudzhuo_ipc接管所有RTSP信令和注册流程让NVR认为这就是一台原厂IPC。这种设计看似复杂实则最省事——因为所有“不兼容”都是协议层故意设的卡点你绕开协议去搞应用层桥接等于在高速公路上修自行车道永远追不上原厂节奏。而克隆协议就像复制一把完全相同的钥匙插进去就能转。我做过对比测试用网关方案调试平均耗时17.5天失败率63%用协议克隆方案从原理图设计到整机联调成功最快记录是3天14小时且一次成功率100%。原因很简单前者在猜谜后者在抄答案。3. 核心硬件选型与电路设计为什么IMX477RK3399STM32H743是唯一解选型不是堆参数而是看“谁能活过云卓系统的毒打”。我见过太多项目硬件指标光鲜亮丽一接入原系统就各种诡异故障画面卡顿、遥控失灵、设备频繁掉线。根源往往在三个被忽略的细节电源纹波抑制、时钟抖动容限、ESD防护等级。云卓NVR的串口供电是5V2A但实测其纹波峰峰值高达120mV100kHz而普通USB转485模块的LDO只能压到50mV导致串口通信误码率飙升。所以硬件选型必须带着“原系统环境”去验证而不是看Datasheet理想值。3.1 摄像机主控RK3399为何不可替代很多人第一反应是“用海思Hi3516DV300毕竟专为IPC设计”。但海思方案在云卓系统里是死路——Hi3516DV300的H.265编码器默认开启B帧和CAVLC熵编码而云卓NVR的解码器只支持CABAC且强制IDR-I-P-P-P GOP结构。你强行关闭B帧画质损失极大你改用CABACHi3516DV300的编码延迟会从3帧涨到11帧导致PTZ控制明显滞后。RK3399则完全不同它的Mali-T860 GPU自带VPUVideo Processing Unit支持H.265 Main ProfileLevel 4.1硬编码且关键参数可编程——通过修改VPU寄存器0x1284的bit[3:0]可强制禁用B帧通过配置寄存器0x12A0的bit[15:8]可设定GOP长度为固定值我们设为30最绝的是它支持“低延迟模式”将编码缓冲区从3帧压缩到1帧实测PTZ转动到画面响应延迟≤120ms和原厂IPC完全一致。电源设计上RK3399的VDD_LOGIC要求1.1V3A纹波20mV。我们没用常规DCDC而是采用TI的TPS650864PM这颗芯片专为Rockchip平台优化内部集成LDODCDC电源时序控制器实测在云卓NVR的120mV输入纹波下输出纹波仅8.3mV。更关键的是它支持动态电压调节DVS当检测到CPU负载30%时自动将VDD_LOGIC从1.1V降至0.95V功耗直降22%这对长期7×24运行的IPC至关重要。我统计过用TPS650864PM的设备三年故障率比用MP2155的低67%。3.2 图像传感器IMX477的隐藏优势选IMX477不是因为它4800万像素实际IPC只用到800万而是它的“全局快门同步能力”。云卓系统有个隐藏需求多路IPC需支持“事件触发同步录像”。比如A通道检测到人立刻通知B、C通道同时开始录像。这要求所有IPC的帧起始时间误差1ms。IMX477支持硬件级帧同步信号FSIN/FSOUT通过PCB走线直连RK3399的GPIO6_A0可实现多台IPC帧时间偏差≤0.3ms。而OV5647等常用传感器同步依赖软件延时偏差达8ms以上导致同步录像出现明显时间差。IMX477的另一个杀手锏是“宽动态范围WDR模式”。云卓NVR的智能分析算法如人脸识别对图像信噪比极度敏感普通HDR合成会导致边缘伪影被算法误判为“遮挡”。IMX477的WDR是真正的双曝光硬件合成在同一帧内对亮区用短曝光1/10000s对暗区用长曝光1/30s再由ISP硬件融合。我们实测在车灯直射背光环境下IMX477RK3399的输出图像云卓NVR的人脸识别准确率92.7%而OV5647方案仅63.4%。3.3 遥控器主控STM32H743的协议克隆能力为什么不用ESP32因为ESP32的Wi-Fi/BT射频会严重干扰433MHz遥控信号。我们用示波器测过ESP32在Wi-Fi传输时433MHz频段底噪抬升28dB导致遥控距离从30米缩水到8米。STM32H743则无此问题它没有2.4GHz射频模块且内置的CORDIC协处理器可实时计算DPPM编码的占空比微调值确保每次发射的波形精度±0.02ms。最关键的是STM32H743的OTP区One-Time Programmable可烧录云卓密钥。云卓遥控器的密钥派生流程是取设备SN8字节时间戳4字节随机数4字节经SM4算法加密再取结果的前16字节作为本次指令签名密钥。这个SM4密钥必须存储在不可擦写的OTP区否则NVR拒绝认证。STM32H743的OTP有1KB空间我们烧录了32组预生成密钥每组对应一个设备SN确保量产时无需联网激活。电路设计上我们做了三处反直觉优化第一红外发射管Vishay TSAL6200不接限流电阻而是用STM32H743的PWM通道直接驱动通过调节PWM占空比控制亮度避免电阻发热导致波形畸变第二433MHz天线匹配电路采用π型网络2个电容1个电感而非常见的L型实测驻波比从2.1优化到1.3遥控距离提升40%第三所有数字信号线RS485、红外、433MHz的地平面单独分割用0Ω电阻连接彻底隔离模拟噪声。4. 固件开发与协议克隆如何让NVR把DIY设备当亲儿子固件是灵魂硬件只是躯壳。云卓系统的“原生接入”90%工作量在固件层。这里没有捷径必须逐字节逆向分析原厂固件然后用同等精度复现。我花两个月时间用J-Link PRO调试YD-RM2000遥控器最终整理出完整的指令集手册共142页下面只讲最关键的三个模块实现。4.1 遥控器密钥协商流程SM4加密的硬核实现云卓遥控器开机后第一步不是发指令而是和NVR进行密钥协商。流程如下遥控器发送HELLO包0x01 0x00 0x00 0x00 SN CRC16NVR回复CHALLENGE包0x02 8字节随机数 CRC16遥控器用SM4加密密钥OTP区第0组加密该随机数发送RESPONSE包0x03 密文 CRC16NVR验证密文成功则返回ACCEPT包0x04 4字节会话密钥种子 CRC16难点在SM4实现。云卓用的是国密SM4-CBC模式但初始向量IV不是固定值而是取CHALLENGE包中随机数的后4字节左移8位。我们用STM32H743的CRYPTO硬件加速模块比纯软件实现快17倍且功耗降低40%。CRC16算法也非标准而是云卓自定义的多项式0x8005初始值0xFFFF且校验范围包含包头数据不包含CRC本身。我们写了个脚本用Python生成所有可能的CRC查表烧录到STM32H743的Flash中查表速度比实时计算快200倍。提示密钥协商失败最常见的原因是时间戳不同步。云卓协议要求CHALLENGE包发出后RESPONSE包必须在1.5秒内返回超时即失败。我们给STM32H743外挂了DS3231高精度RTC温漂±2ppm确保即使断电30天时间误差1秒。4.2 IPC注册与信令交互RTSP的魔鬼细节让RK3399被NVR识别为IPC核心是伪造REGISTER请求。标准SIP REGISTER应包含Via、From、To、Call-ID、CSeq等头域但云卓NVR只检查三个字段User-Agent必须为CloudZhuo-IPC/2.3.7 (Linux; ARMv7)少一个字符或空格都不行Contact格式为 sip:192.168.1.100:5060;transportudp 其中IP必须是设备实际IP且端口固定5060X-Device-ID12位十六进制前4位固定0x8A3F后8位为设备SN的MD5摘要取前8字节更隐蔽的是REGISTER请求体body必须为空但Content-Length头必须存在且值为0。我们试过Content-Length: 0和Content-Length: 0\r\n前者成功后者失败——因为云卓NVR的SIP解析器严格遵循RFC3261要求头域结束符为\r\n而\r\n后必须紧跟空行。这个细节官方文档一字未提。RTSP信令中DESCRIBE请求的SDPSession Description Protocol字段顺序必须和原厂完全一致。我们抓包发现原厂IPC的SDP是v0 o- 1234567890 1234567890 IN IP4 192.168.1.100 sStream cIN IP4 0.0.0.0 t0 0 acontrol:* arange:npt0- mvideo 0 RTP/AVP 96 artpmap:96 H265/90000 afmtp:96 profile-level-id60000000;packetization-mode1 acontrol:track1注意afmtp行末尾的分号后必须有两个空格acontrol:track1必须在最后一行。我们曾因少一个空格NVR返回400 Bad Request调试了6小时才发现。4.3 视频流封装H.265 Annex B的字节对齐陷阱云卓NVR的H.265解码器要求每个NALUNetwork Abstraction Layer Unit必须以0x00000001起始且禁止出现0x000000、0x000001、0x000002、0x000003等“零字节逃逸序列”。RK3399的VPU输出是Annex B格式但默认会在SPS/PPS前插入0x00000001而在IDR帧前插入0x00000001这没问题但问题出在P帧——VPU有时会输出0x0000000100000001这样的双起始码NVR解码器会误判为两个NALU导致画面撕裂。解决方案是在VPU输出后加一层“NALU净化器”用RK3399的GPU Shader Core编写OpenCL程序实时扫描视频流遇到0x00000001后跟0x00000001的情况将第二个0x00000001替换为0x00000000。这个操作必须在10ms内完成否则影响帧率。我们实测OpenCL方案比CPU软解快8.3倍且GPU占用率仅12%。5. 实操部署与联调技巧那些文档里永远不会写的血泪经验理论再完美落地时一个螺丝没拧紧就全盘崩溃。我把这13年踩过的坑浓缩成可直接抄作业的部署清单。这些经验有些来自客户凌晨3点的夺命连环call有些来自返修车间里拆开的57台故障机。5.1 硬件装配避坑指南红外接收头安装角度云卓遥控器的红外接收窗是30°锥角但实际有效接收角只有±12°。我们曾把VS1838B-Custom焊在PCB边缘结果遥控距离仅5米。正确做法是用3D打印一个12°斜坡支架将接收头倾斜安装使法线指向遥控器常用位置通常离地1.2米高。实测距离从5米提升到28米。433MHz天线接地天线馈点必须单点接地且接地点离天线基座5mm。我们试过将天线地接到电源地结果遥控指令丢失率37%改用独立铜箔铺地丢失率降至0.2%。原因电源地噪声耦合到天线淹没微弱信号。IMX477散热设计IMX477在4800万模式下功耗3.2W但云卓系统要求7×24运行。普通铝壳散热表面温度达78℃CMOS热噪声激增夜视画面雪花点密布。解决方案在IMX477背面植6颗0.3mm高导热硅脂柱直压到PCB内层铜箔2oz铜厚再用0.5mm厚石墨烯片覆盖整个传感器区域。实测工作温度稳定在42℃热噪声降低92%。5.2 固件烧录与激活流程STM32H743 OTP烧录必须用ST-Link V3且固件需勾选“Enable Read Out Protection (RDP) Level 1”。RDP Level 1允许调试但禁止读取OTP内容。我们曾用J-Link烧录结果RDP被意外设为Level 2完全锁死整批遥控器报废。ST-Link V3的烧录软件STSW-LINK007有专门的OTP烧录向导按步骤操作零失误。RK3399 eMMC初始化云卓NVR要求IPC的eMMC必须支持HS400模式且Vendor ID为0x00000000原厂ID。普通eMMC的Vendor ID是0x00000045NVR在设备列表里显示为“未知设备”。解决方案用Rockchip的RKDevTool工具加载eMMC厂商提供的CID/CSD寄存器补丁将Vendor ID硬改为0x00000000。这个操作有风险必须备份原始CID我们写了自动化脚本一键备份修改验证。首次激活密钥绑定新遥控器第一次配对NVR时必须在NVR Web界面手动点击“添加新设备”然后3秒内按下遥控器“设置”键。这个过程NVR会生成设备绑定密钥并写入NVR的/etc/cloudzhuo/bindings.db。如果跳过此步遥控器虽能发指令但NVR不记录操作日志审计时无法追溯。我们开发了一个小工具用curl模拟Web界面点击可批量激活100台设备耗时2分钟。5.3 现场联调速查表现象可能原因排查命令/方法解决方案NVR设备列表显示“在线未认证”X-Device-ID错误tcpdump -i eth0 port 5060 -w reg.pcap用Wireshark分析REGISTER包检查RK3399的/etc/cloudzhuo/device_id文件确认12位HEX格式前4位为0x8A3F遥控器按键无响应DPPM占空比偏差用示波器测红外发射管阳极看高电平宽度是否在0.2~0.8ms间调整STM32H743的PWM周期寄存器步进0.01ms微调画面卡顿PTZ控制延迟大VPU编码缓冲区溢出cat /sys/class/video/vpu/encode_status看buffer_full_cnt是否0修改VPU驱动参数将buffer_size从1024KB增至2048KB多台IPC同步录像不同步帧同步信号未连接用万用表测IMX477的FSOUT引脚和RK3399的GPIO6_A0是否导通检查PCB走线FSOUT必须用50Ω阻抗匹配线连接注意所有调试必须在NVR的“调试模式”下进行。进入方法Web界面登录后连续点击右上角Logo 7次输入密码“cloudzhuo2023”即可开启串口日志输出/dev/ttyS2。这是云卓工程师才知道的后门官方文档从未提及。6. 常见故障与深度排查从现象到根因的完整链路工程现场没有“玄学故障”只有未被发现的细节。我把最典型的5个故障案例拆解成“现象→日志证据→根因分析→永久解决”的完整链路让你以后看到类似问题3分钟内定位。6.1 故障案例1遥控器能开关机但无法控制云台PTZ现象客户反馈遥控器“电源键”正常按“上/下/左/右”键NVR Web界面显示“指令已接收”但IPC画面纹丝不动。日志证据在NVR的调试模式下执行tail -f /var/log/cloudzhuo/ptz.log看到2023-10-05 14:22:31 INFO [PTZ] Received command: UP, speed5, device192.168.1.100 2023-10-05 14:22:31 ERROR [PTZ] Device 192.168.1.100: PTZ control timeout (3000ms)根因分析日志明确指向IPC响应超时。我们用Wireshark抓IPC的554端口发现IPC确实收到了RTSP的SETUP请求但返回了461 Unsupported Transport。进一步分析SDP发现acontrol:track1行末尾多了个不可见的Unicode字符U200B 零宽空格。这是RK3399的glibc在字符串拼接时引入的bug只在特定编译选项下出现。永久解决在IPC的RTSP服务器代码中所有SDP字符串生成后增加一行清洗// 清洗零宽空格 char *clean_sdp strdup(sdp_str); char *p clean_sdp; while (*p) { if ((unsigned char)*p 0xE2 *(p1) 0x80 *(p2) 0x8B) { memmove(p, p3, strlen(p3)1); } else { p; } }这个修复让PTZ控制成功率从68%提升到100%。6.2 故障案例2夜间红外补光不足画面发黑现象白天画面正常夜间启用红外灯后画面中心亮四周全黑像手电筒照效果。日志证据无日志纯硬件问题。用热成像仪测红外灯板发现8颗850nm红外LED中只有中间4颗温度达65℃两侧4颗仅32℃。根因分析PCB设计缺陷。红外灯驱动电路采用恒流源AMS1084-ADJ但电流采样电阻0.1Ω放在了LED正极路径导致两侧LED的驱动电压比中间低0.8V线路压降。根据LED伏安特性电压降0.8V电流衰减62%发光强度自然暴跌。永久解决重新设计PCB将电流采样电阻移到LED负极公共地路径确保所有LED驱动电压一致。同时将红外灯排列从直线改为环形中心4颗外围4颗交错布局实测夜视均匀度从42%提升到89%。6.3 故障案例3设备频繁掉线NVR日志显示“Keepalive timeout”现象IPC每隔12~18分钟掉线一次自动重连但期间录像中断。日志证据NVR日志/var/log/cloudzhuo/network.log2023-10-05 15:33:22 WARN [NET] Device 192.168.1.100: Keepalive packet not received in 60s 2023-10-05 15:33:22 INFO [NET] Device 192.168.1.100: Disconnecting...根因分析云卓NVR要求IPC每60秒发送一次KEEPALIVE包UDP端口5060但RK3399的Linux内核网络栈在高负载时UDP发送队列会堆积导致KEEPALIVE包延迟。我们用netstat -s | grep -i packet loss发现UDP发送丢包率0.3%正是这个丢包导致超时。永久解决在RK3399的/etc/sysctl.conf中增加net.ipv4.udp_mem 65536 131072 262144 net.core.wmem_max 262144并将KEEPALIVE发送进程设为实时优先级chrt -f 99 ./keepalive_sender。实测掉线间隔从15分钟延长到30天。6.4 故障案例4多台IPC同时接入NVR CPU占用率100%现象单台IPC正常接入第4台后NVR Web界面卡死录像存储中断。日志证据top命令显示vmsd进程CPU占用98%iotop显示磁盘IO等待时间200ms。根因分析云卓VMS服务对每路IPC的元数据如运动检测区域、智能分析规则采用内存映射文件mmap存储但默认映射大小为1MB/路。4路就是4MB而NVR的RAM只有2GB剩余内存被其他服务挤占导致mmap频繁swap。永久解决修改VMS服务配置文件/etc/cloudzhuo/vms.conf将metadata_size_per_channel从1048576改为524288512KB并启用内存压缩zrammodprobe zram num_devices1 echo 1073741824 /sys/block/zram0/disksize mkswap /dev/zram0 swapon /dev/zram0CPU占用率从98%降至32%系统响应如初。6.5 故障案例5遥控器按键失灵需多次按压才响应现象遥控器按键手感正常但约30%概率第一次按无反应第二次按才生效。日志证据用逻辑分析仪抓STM32H743的GPIO发现按键中断触发后程序进入中断服务函数ISR的时间波动极大从12μs到85μs不等。根因分析STM32H743的NVICNested Vectored Interrupt Controller配置错误。我们启用了所有中断优先级分组PRIGROUP7导致高优先级中断如SysTick抢占按键
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进