ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32F103C8T6蓝牙键盘设计全解析:从最小系统到WS2812B灯效与PCB封装

STM32F103C8T6蓝牙键盘设计全解析:从最小系统到WS2812B灯效与PCB封装 简介一套基于STM32F103C8T6LQFP48主控与WS2812B RGB灯珠的蓝牙键盘硬件设计工程主要面向嵌入式硬件工程师、电子设计竞赛参赛者及DIY爱好者可用于学习STM32最小系统设计、低功耗蓝牙通信、RGB灯效驱动等综合硬件知识。压缩包共含14个文件涵盖Altium Designer 09设计环境的原理图SchDoc、PCB PcbDoc、器件封装库PcbLib/SchLib、工程结构PrjPcb、BOM表格CSV以及高亮预览文档完整记录了一块139×97mm双层键盘板卡的元器件布局、走线与引脚分配。原理图部分可对照学习MCU外围电路、蓝牙模块连接及WS2812B灯珠排布PCB部分则展示2层板下的射频区处理与RGB阵列走线策略对理解紧凑型无线外设设计很有帮助。资源包大小约9.08MB目录结构直观下载解压后可直接打开工程查看整体设计。目前已有770人浏览学习既适合初学者临摹参考也适合有经验的开发者在此基础上快速衍生出带自定义RGB背光效果的蓝牙键盘方案。1. 从 LQFP48 键盘板看 STM32F103C8T6、WS2812B 与蓝牙键盘的硬件关系打开这个压缩包时多数人第一眼会去找 PDF 格式的原理图但我更建议先把文件名当需求文档读一遍STM32F103C8T6LQFP48是主控芯片和封装形式WS2812B 是板载可编程 RGB 灯珠的型号蓝牙键盘是产品形态而 AD 设计、PCB 与器件封装库文件是这份工程要交付的内容本身。换句话说这是一份从原理图到生产文件全流程的完整硬件设计包适合正在从开发板原型往量产方向收尾的工程师也适合第一次尝试“主控 灯带 无线”三合一的硬件新人。这类板子的难点不在某一个模块而在于三套系统共用一块 PCBSTM32 最小系统的电源和时钟要稳WS2812B 的 5V 供电和数据时序要准蓝牙射频部分要留出干净的净空和天线区域。三者之间还会互相干扰灯带大电流会把 3.3V 拉垮数据线走线太长会把灯效信号搞花天线底下铺铜过多会让蓝牙键盘连不上。把这三条线理清楚再去看这份工程里的原理图和封装库基本就能读懂每一处设计选择。2. STM32F103C8T6 最小系统原理图晶振、复位、BOOT 和 SWD 一个都不能少2.1 板载最小系统板的常规画法六个模块凑齐“能跑”条件STM32F103C8T6 本身是 LQFP48 封装48 个引脚不算紧张但真要在一块键盘 PCB 上跑起来核心不是 MCU 本身而是外围最小系统是否完整。一份合格的最小系统原理图一定包含六个部分3.3V 电源网络、VDDA/VSSA 模拟供电滤波、8MHz 外部晶振、NRST 复位电路、BOOT0 启动选择和 SWD 下载接口。缺了任何一个板子要么不启动要么调试器连不上要么烧录后跑飞。我一般会把 VDDA 单独用磁珠从 3.3V 主干分出来再接一个 1uF 和一个 100nF 电容这是 STM32 数据手册里明确要求的做法。NRST 引脚用 10k 电阻上拉到 3.3V再并一个 100nF 电容到地能有效防止上电瞬间和静电干扰造成的异常复位。BOOT0 直接用一个 10k 电阻下拉到地保证芯片从 Flash 启动不要像开发板那样留三针跳线量产键盘上没有用户会去拨它。2.2 8MHz 晶振的负载电容选择不是随便焊两个 20pF晶振部分最容易照抄开发板但抄错参数。STM32F103C8T6 的 HSE 引脚是 PD0OSC_IN和 PD1OSC_OUT外部晶振选 8MHz配合两个负载电容接地。负载电容的计算公式是 CL (C1 × C2) / (C1 C2) Cs其中 Cs 是引脚寄生电容和走线寄生电容约 3 到 5pF。很多晶振规格书上标的是 18pF 或 20pF 负载如果你直接用两个 20pF 电容实际负载约 12pF 左右偏差不大但频率精度会受影响对蓝牙键盘这种需要串口通信定时的场景不够稳妥。RCC_OscInitTypeDef osc {0}; osc.OscillatorType RCC_OSCILLATORTYPE_HSE; osc.HSEState RCC_HSE_ON; osc.PLL.PLLState RCC_PLL_ON; osc.PLL.PLLSource RCC_PLLSOURCE_HSE; osc.PLL.PLLMUL RCC_PLL_MUL9; // 8MHz * 9 72MHz HAL_RCC_OscConfig(osc);这段配置里最关键的是 PLLMUL 参数。外部 8MHz 晶振经过 PLL 倍频到 72MHz这是 STM32F103C8T6 的标称最高主频。如果外部晶振换成 12MHzPLLMUL 就要相应调整否则串口波特率和 WS2812B 的时序都会跟着跑偏。原理图上晶振的两个引脚各接一个 18pF 电容到地电容值不必过分精确但耐压和温度稳定性要选 C0G 或 NP0 材质不要用高容量的 X5R/X7R。2.3 SWD 下载口留四根线串口调试口单独分一路LQFP48 封装的 STM32F103C8T6 支持 SWD 和 JTAG但键盘 PCB 上空间有限一般只留 SWD。SWD 只需要 SWDIO、SWCLK、GND 和 3.3V 四根线即使板子已经贴好外壳也能用四根飞线完成程序烧录。注意 SWCLK 引脚上不要加过长走线或大电容否则高频时钟会衰减得厉害调试器识别不到芯片。同时建议把 USART1PA9/PA10引出一组 3.3V TTL 串口作为调试口不要直接接 RS232 电平转换芯片键盘内部没有空间放这些老家伙。串口在这里的作用是打印蓝牙模块的 AT 返回值和 WS2812B 的灯效调试信息这在排查“蓝牙连不上”“灯色不对”这类问题时效率极高。我通常会把 USART1 固定为调试串口把蓝牙模块挂到 USART3PB10/PB11两块串口互不干扰。2.4 键盘矩阵的引脚功能分配列输出、行输入、灯数据、蓝牙串口功能模块引脚说明列扫描输出8 列PA0 到 PA7推挽输出默认输出低电平行扫描输入6 行PB0 到 PB5上拉输入检测列线拉低状态WS2812B 数据线PB6 或 PA8优先选择定时器通道输出引脚USART1 调试串口PA9 / PA103.3V TTL 电平USART3 蓝牙连接PB10 / PB11与蓝牙模块串口对接USB 备用接口PA11 / PA12留作有线模式扩展布线时按差分线处理机械键盘的矩阵扫描核心思路是列线由 MCU 推挽输出行线配置为上拉输入。扫描时逐列拉低再读取行线电平就能判断哪个按键被按下。为了防止多个按键同时按下时出现鬼键现象原理图上每个按键开关都会串联一个 1N4148 二极管方向从行线指向列线这是键盘矩阵设计的行业标准做法原理图库里要给二极管单独做封装不要和 LED 封装混用。PA11/PA12 是 USB D-/D如果产品规划里没有有线模式这两个引脚可以挪作他用但一旦要加有线键盘功能这两个引脚的走线就得按 USB 差分线要求来线宽保持一致、等长误差控制在 5mil 以内。建议原理图阶段就把这两个引脚预留成 2 针焊盘后续改版不用动矩阵扫描的固件逻辑。3. WS2812B 灯板供电计算与数据链布线60mA 一颗灯不只是算着玩3.1 WS2812B 中文资料里最容易误读的两个参数电压阈值和位周期WS2812B 的中文资料很多但有两个参数经常被看错。第一个是数据输入引脚的电压阈值数据手册里给出的 VIH 大约在 0.7 × VDD即 3.5V 左右这让很多人以为 3.3V 的 STM32 肯定驱动不了。实际上 WS2812B 内部有整形电路实际触发阈值会低一些大量量产项目直接用 3.3V 单板驱动也能工作但余量不够稳定。最可靠的做法是加一颗 74AHCT1G125 单路缓冲器把 3.3V 数据信号升到 5V顺便带来更强的扇出能力和更陡的信号边沿。第二个参数是位周期。WS2812B 采用单线归零码数据率是 800Kbps每一位的时长固定为 1.25us。0 码的高电平时间约 0.35us1 码的高电平时间约 0.85us。用 STM32 的 GPIO 模拟这个时序不是不行但一颗灯 24bit几十颗灯的数据帧会长时间阻塞 CPU所以实用方案都是用定时器 PWM 加 DMA 输出。3.2 供电设计每颗灯全白 60mA一排灯的电流要把电源线当主干道灯珠数量全白电流1oz 铜厚最小线宽实际建议线宽10 颗0.6A0.5mm1.0mm20 颗1.2A1.0mm1.5mm30 颗1.8A1.5mm2.0mm40 颗2.4A2.0mm2.5mm 并开窗镀锡这里的电流是每颗灯珠 RGB 全亮时的极限值黑色键盘日常灯效不会持续满电流但电源设计必须按极限算。USB 口的 5V 供电能力通常只有 500mA直连电脑时根本带不动 20 颗以上的灯全亮所以原理图上一定要加外部 5V 供电接口比如 USB Type-C 的 PD 诱骗取电或者板载 DC 座PCB 上从供电入口到第一颗灯珠的主干道单独走一根宽线不要把灯带电流绕到 MCU 的 3.3V 电源网络里。3.3 用定时器 PWM 加 DMA 发一帧灯色数据的最小代码#include main.h #define WS2812B_NUM 30 // 灯珠数量按 PCB 上串联灯实际数量改 #define WS_TIM_PERIOD 89 // 72MHz 下 90 个计数周期约 1.25us uint32_t ccBuf[WS2812B_NUM * 24]; // 每 bit 对应一个 CCR 比较值 void ws2812b_set_bit(uint8_t data, uint32_t idx) { uint8_t mask 0x80; while (mask) { ccBuf[idx] (data mask) ? 55 : 18; // 1 码高电平约 0.76us0 码约 0.25us mask 1; } } void ws2812b_fire(TIM_HandleTypeDef *htim, uint32_t channel) { HAL_TIM_PWM_Start_DMA(htim, channel, ccBuf, WS2812B_NUM * 24); }逻辑上先把每一颗灯珠的 24bit 颜色数据拆成单个 bit每个 bit 对应定时器一个完整周期的 CCR 值。DMA 会在每个周期自动更新定时器的比较寄存器从而在 GPIO 上生成连续的单线协议波形整个过程不占用 CPU 中断。发送完一帧后记得关闭 DMA 或把数据线拉低否则最后一个周期的电平状态会残留导致下一帧的第一个 bit 被误判。htim2.Init.Prescaler 0; htim2.Init.CounterMode TIM_COUNTERMODE_UP; htim2.Init.Period WS_TIM_PERIOD; // 89周期约 1.25us htim2.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(htim2);参数说明预分频设为 0意味着定时器直接以 72MHz 时钟计数周期 89 则一个完整周期是 90 个计数约 1.25us。CCR 值 18 对应 0.25us 高电平55 对应 0.76us 高电平这两个值要在示波器上实测微调因为 PCB 走线寄生电容会改变边沿速度。另外颜色顺序是 GRB 而不是 RGB打样回来点灯时发现红绿互换不要怀疑硬件先查固件里颜色排列。3.4 数据线走线与地回流包地后还要远离射频天线WS2812B 数据线属于高速数字信号虽然单线协议只有 800Kbps但边沿非常陡谐波成分能到几十兆赫兹处理不好会成为板上的噪声源。数据线从 MCU 的定时器通道输出后尽量走短走直线两侧包地下方保持完整的地平面不要跨分割。灯珠之间的数据线长度不需要严格等长只要控制在 10cm 以内波形畸变都还在容差范围内。灯带供电回流的路径同样重要。如果 5V 从板子一端进、灯珠一路铺过去但地线没有同步跟随电流会在 PCB 上绕大圈回流产生压降和地弹轻则灯色偏暗重则数据信号被干扰导致整条灯带闪烁。所以在原理图和 PCB 阶段就要把 5V 主干和 GND 主干像一对平行线一样敷设灯珠密集区域的地孔每两三颗灯打一组过孔连接到背面地平面这些细节在 AD 的 PCB 工程里都要落实到位。4. 蓝牙键盘的无线链路透传模块选型、天线净空与 HID 上报4.1 STM32F103C8T6 没有蓝牙外挂一条 HID 链路STM32F103C8T6 内部没有射频收发器所以蓝牙键盘必须在主控之外挂一颗蓝牙模块。常见做法有两种一种是直接用自带蓝牙协议栈的 SoC 做主控比如 nRF52832但会绕开本文标题里的 STM32F103C8T6另一种是保持 STM32 做主控外挂一颗支持 HID 服务的低功耗蓝牙模块通过串口或 SPI 通信。后者更符合这份工程文件的结构也是客制化键盘里最常见的主控加透传方案。需要注意的是入行时很多人拿 HC05 这类经典蓝牙透传模块做键盘最常见的现象是连接不上或频繁断连。根因有两个一是 HC05 的配对窗口时间短灯带大电流启动时把模块供电拉低广播就断了二是 HC05 本身不是为 HID 键盘设计的要经过额外的协议转换才能上报键值。键盘这类人机交互设备直接选支持蓝牙 HID Profile 的模块让模块内部处理主机配对和上报STM32 只负责矩阵扫描。4.2 选模块看四个参数而不是只盯蓝牙版本参数关注点说明休眠电流越低越好最好小于 20uA键盘待机时间由它决定连接事件间隔7.5ms 到 30ms 可配置间隔越短延迟越低耗电越高广播间隔30ms 到 100ms影响手机搜索到键盘的速度HID 服务是否内置键盘/多媒体报告决定主控要不要自己组 HID 报文蓝牙版本 4.2 和 5.0 对键盘这类低速 HID 设备来说没有本质差异BLE 的广播和连接机制才是关键。键盘对延迟敏感连接事件间隔设得太大按键按下到屏幕上显示会有可感知的延迟设得太小模块和主机都在高频唤醒耗电会翻倍。量产键盘通常把连接事件间隔定在 7.5ms 到 15ms 之间配合 STM32 的 STOP 模式睡眠整机待机电流能控制在 100uA 上下一节锂电池用一两个月不充电。4.3 拿到模块先做串口回环再看广播和配对ATVERSION? # 确认串口参数正确返回信息里一般带模块固件版本 ATADDR? # 读取模块蓝牙地址烧录前记下来方便主机端白名单配对 ATNAMEKBD-RGB # 广播名尽量用纯 ASCII 字符某些主机对 UTF-8 名称兼容不好 ATSLEEP1 # 没有这条指令时改用 MCU 的 GPIO 控制模块 EN 脚拿到蓝牙模块后先不要直接焊到键盘板上。把模块接到 USB 转 TTL 小板用上述指令一条条测。ATVERSION 用来确认模块串口波特率和固件状态ATADDR 记录的蓝牙地址在调试阶段很有用可以预先把地址加进手机端的白名单避免同时搜到附近其他同型号模块改广播名时要避免中文和特殊符号某些手机系统对非 ASCII 广播名会显示乱码甚至拒绝连接。ATSLEEP 这条指令不是所有模块都支持遇到不支持的情况就在原理图上把模块的 EN 引脚接一根线到 MCU 的 GPIO由主控控制模块上下电这也是更彻底的省电方式。底层原理是BLE 模块上电后会进入广播状态手机扫描到广播包后发起连接请求连接建立后数据走 GATT 通道。如果模块支持 HID Profile它会自己创建 HID Service把串口收到的键值直接封装成 HID Report 发送给主机。此时 STM32 做的事情就是把矩阵扫描结果换算成标准的键盘键码比如按键 A 对应 0x04按键 B 对应 0x05通过 UART 发给蓝牙模块这部分逻辑和有线键盘完全一致。4.4 天线净空区的 PCB 布线规则和蓝牙测距的关联蓝牙天线对 PCB 布局非常敏感。使用陶瓷天线时天线下方所有层的铜皮都要挖空净空区至少保持天线本体向外扩展 5mm 无覆铜、无走线、无过孔使用 PCB 板载天线时天线走线周围同样要禁铜并且天线末端不能对着金属外壳或电池。常见错误是为了省空间把蓝牙模块放到键盘右下角旁边就是锂电池和 USB 座结果辐射效率被拉低手机在 3 米外就搜不到信号。很多人用 RSSI 做距离估计但蓝牙测距的稳定性恰恰依赖天线的方向性和一致性。同一块板子天线净空区完整时测得的 RSSI 在 1 米距离大约在 -50dBm 上下净空区被铜皮挡住后数值可能跌到 -70dBm 以下而且随板子转动方向波动 10dBm 以上。键盘这种贴桌面的近场设备更要关注 10cm 到 50cm 这个范围的信号一致性保证主机在各个摆放角度下都能稳定连接而不是只追求空旷环境下的极限距离。5. AD 工程里的三套库与四组规则原理图库、PCB 封装和集成库的整理套路5.1 SchLib、PcbLib 和 IntLib库文件在 AD 工程里的组织方式Altium Designer下称 AD工程里器件库通常有三种形态原理图符号库.SchLib、PCB 封装库.PcbLib和集成库.IntLib。原理图库只负责在图纸上表达电气连接关系和引脚序号PCB 封装库负责把引脚映射到真实的焊盘尺寸和丝印形状而集成库是把两者绑定在一起的编译产物。库类型文件后缀用途修改方式原理图库.SchLib画原理图时放置的符号直接打开编辑PCB 封装库.PcbLib画 PCB 时对应的实体封装直接打开编辑集成库.IntLib封装好便于复用的成品库用 LibPkg 工程重编译打开这份工程文件时优先看有没有 LibPkg 工程文件。如果有说明原作者做了集成库的源工程这比直接给一个编译好的 IntLib 更友好因为你可以修改封装后重新编译而不是拆不开的黑盒库。如果没有只有散落独立的 SchLib 和 PcbLib建新项目时记住保持两者引脚编号一致否则原理图里明明连对了网络导入 PCB 后引脚却对不上。5.2 集成库编译与封装绑定的标准步骤在 AD 里维护器件库的标准操作是新建一个 LibPkg 工程把 SchLib 和 PcbLib 加进去然后在 SchLib 的元件属性里指定 PCB 封装。每一条引脚在原理图库里的 Designator 必须和焊盘编号一一对应。编译成功后生成 IntLib之后在新工程里使用 Library 面板直接放置器件原理图符号和 PCB 封装就自动绑定不需要每画一个工程重新指定一次封装。编译集成库时注意两个坑。第一原理图库的引脚编号不能有重名LQFP48 的 48 个引脚里数字编号唯一但功能名 PA0 和 PA1 容易在复制粘贴时错位编译前用报告功能跑一遍引脚一致性检查第二封装库里的位号丝印不要和焊盘重叠否则装配后丝印被焊盘盖住板厂丝印工序会把字符削掉板子上看不清器件标号。名称命名建议统一加前缀MCU_STM32F103C8T6_LQFP48、LED_WS2812B_5050、SW_MX1 这类一眼能从封装文件名看出器件用途。5.3 LQFP48 与 WS2812B 封装参数对照项目STM32F103C8T6LQFP48WS2812B5050本体尺寸7mm × 7mm5.0mm × 5.0mm引脚间距0.5mm约 1.0mm焊盘尺寸参考宽 0.30mm、长 1.0mm宽 1.2mm、长 0.9mm底部散热焊盘无有建议整片接地并开窗镀锡LQFP48 的引脚间距只有 0.5mm封装库里的焊盘阻焊桥至少要留 0.1mm 以上生产才不至于连锡。画封装时不要直接用厂商图纸上的脚位尺寸照抄要留出焊接工艺余量焊盘长度比引脚长 0.4mm 左右才能形成可靠的焊点。WS2812B 的 5050 封装有六个脚其中电源和地各两个设计时把 VDD 和 GND 的焊盘适当加宽能有效降低灯珠到大面积覆铜之间的热阻。键盘轴体封装则是另一个重点。机械键盘常用的 MX 兼容轴体引脚孔直径约 2.8mm另有两个定位柱孔孔径约 1.2mm安装孔径要做得比轴体引脚略大但不超过 3mm否则轴体插上去摇晃。定位柱孔是给轴体卡扣定位用的不能铺铜否则卡扣对不准。这部分封装细节在普通元器件库找不到必须手工建也是这份工程里封装库文件价值最高的地方之一。5.4 双层板的层叠设计与走线规则电源 1.5mm信号 6mil这块键盘 PCB 用双层板就能完成层叠结构从上到下依次是顶层信号与器件层、FR4 介质层、底层信号与地平面层。双层板虽然没有完整内电层但可以在底层大面积铺地将所有地过孔连接成网格信号回流就有连续路径。板厚通常选 1.6mm做蓝牙键盘如果想要轻薄外壳可以改成 1.0mm但 LQFP48 的焊盘在薄板上焊接时更容易热变形需要和板厂确认铜厚和层压工艺。# 1oz 铜厚的铜箔截面积辅助评估供电走线载流能力 thickness_mm 1 * 0.035 # 1oz 铜厚约 35 微米 width_mm 1.5 # PCB 上实际设计的主干线宽 area thickness_mm * width_mm print(f截面积 {area:.3f} mm^2常温短走线约可承载 3A 量级)供电走线建议直接拉 1.5mm 到 2.0mm 宽信号线最小控制在 6mil间距不小于 6mil。键盘矩阵的列线和行线都是低速信号走线要求不高但 WS2812B 的数据线和蓝牙模块的串口线要走短路径。晶振下方不要走任何信号线避免振铃干扰 HSE 波形复位信号线也要尽量短远离 5V 电源走线和灯带数据线。5.5 打开 DRC 跑完整检查重点看这几条PCB 布局布线完成后在 AD 的 PCB 界面里打开 Design 菜单下的 Rules 规则设置确认线宽、间距、过孔尺寸都按上述参数配置好然后运行 Design Rule Check。DRC 报告里以下几类问题必须清零未连接的网络、短路、安全间距违规、丝印压焊盘。常见的丝印压焊盘问题是在放置位号和器件标注时忘了把字体调整到 1.0mm 以下字符刚好压在 LQFP48 的引脚焊盘上工厂生产时丝印和焊盘冲突直接削掉字符或者漏印。提示DRC 里的“Un-Routed Net”检查要格外认真。原理图网络表里如果有悬空引脚PCB 上表现为飞线未清除DRC 一定会报错。有些工程师为了消除飞线在规则里把 Un-Routed Net 检查关掉这是最危险的操作打样回来板子废了才发现有几根线根本没连上。另外一个容易被忽略的是过孔盖油设置。键盘 PCB 上大量地过孔如果做开窗贴片时焊锡会被吸进过孔造成虚焊。AD 的规则里把过孔 Solder Mask Expansion 设为负值并勾选 Force complete tenting on top/bottom工厂就会做盖油处理这个设置在出 Gerber 前要确认好。6. 出 Gerber 前最后一遍检查极性、丝印和钻孔文件6.1 导出 274X 格式与钻孔文件的关键设置在 AD 里导出生产文件时选择 File 菜单下的 Fabrication OutputsGerber 格式选 RS-274X坐标精度设成 2:5输出层勾选 Top Layer、Bottom Layer、Top Overlay、Bottom Overlay、Top Solder、Bottom Solder、Top Paste、Bottom Paste 和 Keep-Out Layer。钻孔文件单独导出 Excellon 格式孔径单位用毫米。板厂会先用钻孔文件生成钻带再按孔径表换钻头顺序所以钻孔文件里孔径数量越少越好0.3mm 以下的激光孔在常规工艺里要加钱设计阶段尽量把过孔统一成 0.3mm/0.6mm 的组合。6.2 灯极性与丝印检查一颗灯方向错了整条链报废WS2812B 是单线级联数据从 DIN 进、DOUT 出方向接反一颗后面所有灯珠都不会亮而且很难排查。PCB 封装里一定要在顶层丝印上加一个“DIN”方向箭头放在灯珠第一脚旁边位置不要被灯珠本体盖住。贴片回来后用万用表二极管档量每颗灯珠的 VDD 和 GND 是否短路确认没有被反贴。丝印字体建议选 TrueType 字体或标准矢量字体线宽不要小于 0.15mm字高不小于 1.2mm否则打样回来的丝印发虚模糊装配产线根本看不清位号。6.3 从贴片到跑通先点灯、再回环、后扫键的调试顺序板子贴好回来先不要急着烧键盘固件按三条链路依次验证。第一步只焊主控和电源部分用 SWD 烧一个空白工程确认 HSE 起振、串口能打印、STM32F103C8T6 的 USE_HAL_DRIVER 宏已勾选HAL_TIM_PWM_Start_DMA 这类接口才会被编进固件。第二步接上 WS2812B用示波器看数据线波形确认 0 码和 1 码的占空比满足数据手册要求再点一颗灯验证 GRB 颜色顺序。第三步接蓝牙模块跑 AT 回环确认串口波特率和模块固件版本再让 STM32 通过中断接收 USB 转 TTL 发来的数据最后才挂矩阵扫描代码。如果主控未来换成国产替代型号优先对比 BOOT0 上电时序和 VDDA 电压范围这两处在部分兼容芯片上复位行为不一样。本文还有配套的精品资源点击获取
返回列表