当前位置: 首页 > news >正文

基于stm32f103c8t6最小系统板的ws2812b广告牌设计——桂林电子科技大学软硬件小学期课设

前言:

由于原理图设计和PCB打板出现些许问题,预定准备的字库存储芯片和蓝牙模块没有用上,在该背景下,我将仅使用最小系统板,2个独立按键以及2块8*32的ws2812灯带,实现的效果仅是内置好汉字和英文效果。有需要的自行优化。

一、项目背景

本项目使用 STM32F103C8T6 最小系统板作为控制器,驱动两块8×32 WS2812B点阵屏。两块灯板左右级联后,共有512颗LED,逻辑显示区域为16列×32行。

项目最终需要实现:

  • 显示16×16汉字;
  • 预设中文内容向上滚动;
  • 显示英文“hello world”;
  • PA11切换中英文内容;
  • PA12切换滚动、静止和闪烁模式;
  • 使用USB-TTL完成程序下载和串口调试;

从功能上看,这只是一个文字滚动灯牌,但实现过程中同时涉及WS2812B时序、定时器PWM、DMA、坐标映射、字模、供电、信号完整性和硬件装配等问题。

二、项目需求

面包板(用于后续+5v和GND共地)

外部电源(8*32的ws2812灯带在满负载的情况下,电流可以达到15.36A,而灯带需要的电压至少+5V,最小系统板一般只能提供+3.3V)

stm32f103c8t6最小系统板

直插式独立按键2个


三、项目效果

由于学校发的只是2个8*32的灯带,如果是8*8取字模的话,基本看不清,所以用2个灯带拼接在一起。

四、项目难点

1.WS2812B并不适合只依赖Proteus验证

Proteus比较适合验证普通GPIO、按键、串口、定时器和LCD等常规外围电路,但WS2812B属于对波形时间要求比较严格的数字器件。

它的每个数据位周期大约只有1.25 μs,逻辑0和逻辑1并不是通过普通高低电平区分,而是通过高电平持续时间区分。因此,仿真模型必须准确处理:

  • 800 kbit/s单总线数据;
  • T0H和T1H高电平时间;
  • 24位GRB颜色顺序;
  • 多颗灯珠的数据截取和转发;
  • 帧末尾的复位低电平;
  • 数百颗灯珠的连续级联。

2.WS2812B不是普通LED

普通LED只需要输出高低电平,而WS2812B内部带有控制芯片,每颗灯珠需要接收24位颜色数据,顺序通常为:

G7...G0 → R7...R0 → B7...B0

第一颗灯珠保留前24位,再把后面的数据转发给下一颗。发送完全部数据后,数据线需要保持足够长的低电平,让所有灯珠同时锁存颜色。

因此,驱动程序必须同时保证:

  • 位周期正确;
  • 0码和1码高电平宽度正确;
  • GRB顺序正确;
  • 灯珠数量正确;
  • 发送数据不能中断;
  • 帧尾复位时间足够。

任何一项错误都可能表现为随机颜色、局部点亮或整板爆闪。

3. PWM与DMA方案

系统时钟为64 MHz,一个时钟计数约为:

1 ÷ 64 MHz = 15.625 ns

WS2812B每个数据位周期约为1.25 μs,因此设置80个定时器计数:

80 × 15.625 ns = 1.25 μs

项目采用的PWM比较值为:

逻辑0:CCR = 22,高电平约0.344 μs 逻辑1:CCR = 45,高电平约0.703 μs

程序先把每个数据位转换为22或45,再由DMA连续写入TIM1的CCR1寄存器。这样每一个脉冲都由硬件产生,稳定性高于软件延时。

4.灯板级联与坐标映射

1. 物理连接方式容易理解错误

最初对灯板内部级联方向的理解有误,以为灯珠按照逐列方式连接。实际灯板采用逐行蛇形连接:

第0行:从左到右 第1行:从右到左 第2行:从左到右 第3行:从右到左 ……

如果仍然按照普通二维数组计算序号,显示出来的文字就会左右翻转、笔画断裂,甚至出现左右亮、中间不亮的固定图案。

2. 两块灯板级联后的映射

两块8×32灯板左右放置:

左侧灯板:物理序号0~255 右侧灯板:物理序号256~511

逻辑屏幕尺寸为16×32。坐标转换可以写成:

panel = x / 8; local_x = x % 8; base = panel * 256; if ((y % 2) == 0) index = base + y * 8 + local_x; else index = base + y * 8 + (7 - local_x);

这样,字模程序只处理普通的x、y坐标,底层映射函数负责处理左右灯板和蛇形方向。

5.WS2812B的电源电流不能忽略

理论上,一颗WS2812B全白高亮时电流可能达到约60 mA。512颗全部全白的理论电流可能非常大:

512 × 60 mA = 30.72 A

实际项目使用低亮度单色显示,电流远低于这个数值,但PCB和接线仍不能按照普通小信号电路处理。

打板时应考虑:

  • 5V电源使用较宽铜线或大面积铺铜;
  • 两块灯板分别注入电源;
  • 避免让全部电流经过最小系统板;
  • 灯板入口增加大容量电解电容;
  • 每个模块附近增加0.1 μF去耦;
  • 数据地和电源地可靠连接;
  • 电源接口需要留有足够电流余量。

6. 下载接口必须提前考虑

因为项目只有USB-TTL,没有ST-Link,所以需要使用STM32内部Bootloader下载:

USB-TTL TX → PA10 USB-TTL RX → PA9 USB-TTL GND → STM32 GND

打板时应预留:

  • PA9;
  • PA10;
  • GND;
  • BOOT0跳帽或按键;
  • RESET按键。

五、项目总结

在初期准备上没有准备好原理图,PA9和PA10引脚没有引出来,导致下载插拔困难。在遇到ws2812的各种问题并解决,在有限的情况下,尽量做出来的半成品。

http://www.cnnetsun.cn/news/3529035.html

相关文章:

  • AI Agent时代Skill安全防护全解析
  • NET+AI | Harness | MAF 1.4 发布,Harness Engineering 如约而至,智能体工程化更进一步
  • d3d8to9完全解析:让Direct3D 8经典游戏在Windows 10/11上完美运行的终极指南
  • 番茄小说下载器完整指南:免费开源工具实现小说离线阅读自由
  • 2026香港EMBA QS排名择校测评:民企老板避坑性价比榜单
  • 鸿蒙 ArkTS 实战:Kitchen Cleaning Plan 从厨房清洁计划到餐厨体验工具完整解析
  • Unity多线程编程终极解决方案:UnityMainThreadDispatcher完整使用指南
  • 如何为Grok4.5写出更清晰的指令?一篇讲透Prompt结构化技巧与实战方法
  • 80%的AI客服回答可以用关键词匹配替代:花了20万做的智能客服,8成问题没用到大模型
  • 开源在线演示文稿工具全攻略:5分钟学会免费制作专业PPT
  • Unipacker高级配置指南:自定义YARA规则和打包器签名
  • learnr部署指南:将R交互式教程发布到RStudio Connect和Shiny Server的完整教程
  • 如何用Python RCWA工具包实现专业级光学仿真:从新手到专家的完整指南
  • Lyric-Getter配置优化技巧:提升歌词获取准确性的5个方法
  • KET口语考前不知道自己什么水平?飞象说口语AI真题模考帮你精准定位薄弱环节
  • Incident-Response-Powershell实战教程:10个关键PowerShell命令快速响应安全事件
  • Slug标签系统实现:如何为短链接添加分类和筛选功能
  • 中式婚礼选酒指南:凤锦桥喜宴白酒特点解析
  • 静态路由初次实验
  • 解决Oracle Java许可问题:docker-alpine-java的替代方案与迁移指南
  • bootstrap3-wysiwyg工具栏自定义指南:打造专属编辑器界面
  • 赢标核心逻辑:如何打造一份既有竞争力又控风险的投标方案
  • 038-API层架构设计
  • 基于WebAssembly的位图矢量化技术实现机制与工程实践
  • 【闲聊】如何睡得既少做得还多(方法)
  • Switch2Cursor完整指南:JetBrains与Cursor编辑器高效切换终极方案
  • 2026年7月市场上最具竞争力的全球4强企业建站系统最新测评报告,含零代码、低代码、AI+编程
  • PDF批注、溯源、跨页推理全打通:Kimi企业级PDF工作流(附可直接复用的12条系统级指令集)
  • Illustrator脚本大全:30+个自动化工具让你的设计效率飙升
  • 3个步骤,让Wand游戏修改器变身专业版:开源增强工具完全指南