GD32F470VGT6 LQFP100
📌 一、需求
驱动8路TM1934灯带。每路4096颗芯片,单路长200多米(单颗控制3颗灯,长度5CM),供电12V。
📌 二、芯片
主频
系统频率最高为240MHz
引脚

RAM
512KB
定时器
高级
T0、7
通用
T1~4、8~13
基本
T5、6
SPI
SPI0~4(100pin没有SPI5)
串口
总共8路
USART0和USART5的最高速度为15Mbit/s。
USART1、USART2、UART3、UART4、UART6和UART7的最高速度为7.5Mbit/s。
DMA
2组DMA共16通道
DMA0 外设请求
DMA1 外设请求
📌 三、TM1934时序
0 码或 1 码周期在 1.25μs(频率 800KHz)至 2.5μs(频率 400KHz)范围内,芯片均可正常工
作,但是 0 码和 1 码高电平时间必须符合上表中相应数值范围;
不需复位时,字节之间的低电平时间不要超过 50μs,否则芯片可能复位,复位后又重新接收数
据,无法实现数据正确传送。

最终采用2个高电平和2个低电平表示1码,1个高电平和3个低电平表示0码的方式来驱动,单个电平周期为360ns,单码周期为1440ns(1.44μs),Reset周期为200μs。
📌 四、方案
方案一:TIM+DMA+GPIO
思路
配置PA8为普通GPIO输出模式,而不是复用功能
使用TIM0产生精确的定时,触发DMA传输
DMA将预编码的数据流(包含高低电平序列)传输到GPIO的BSRR寄存器
在数据传输完成后通过中断停止定时器
驱动8路所需RAM
驱动1颗TM1934需要
24bit * 4 * 4 = 384 Bytes (PWM的DMA数组宽度为4 Bytes)
驱动1路(4096颗TM1934)需要
4096 * 384 = 1,572,864 byte / 1024 = 1,536 KB / 1024 = 1.5 MB
驱动8路
1.5 * 8 = 12 MB
资源
DIN PA8;T1
优缺点
无需引脚复用,但RAM需求高。
方案二:SPI+DMA
思路
驱动8路所需RAM
驱动1颗TM1934需要
24bit * 4 = 96 bit
96bit / 8 = 12 Bytes
驱动1路(4096颗TM1934)需要
4096 * 12 = 49152 Bytes = 49152 / 1024 = 48 KB
驱动8路
48 * 8 = 384 KB
驱动8路所需时间
要计算DMA传输一颗TM1934(实际是“一颗LED”,TM1934是LED驱动芯片)的时间,需从数据量和SPI传输速率两个核心维度推导,具体步骤如下:
一、核心参数提取
二、关键计算步骤
1. 单颗LED的SPI传输总bit数
TM1934单颗LED需要24 bit数据,每个bit对应4个SPI bit,因此:
单颗LED的SPI总bit数 = 24 bit(TM1934) × 4(SPI bit/TM bit) = 96 bit
2. SPI时钟频率计算
SPI时钟由APB2时钟分频得到,分频系数为32:
SPI时钟频率 = APB2时钟 ÷ 32 = 120MHz ÷ 32 = 3.75MHz(即SPI每秒可传输3.75×10⁶个bit)
3. 单颗LED的DMA传输时间
传输时间 = 总bit数 ÷ SPI时钟频率
= 96 bit ÷ 3.75×10⁶ bit/s
= 0.0000256 秒
= 25.6 μs(微秒)
三、补充说明
1. 复位信号的影响:代码中dRESET_BYTES是所有LED传输完成后的复位信号(约200μs),但复位是“批量”的(所有LED传输后统一复位),不影响“单颗LED”的传输时间。
2. 误差因素:DMA启动/中断延迟(微秒级,可忽略)。
结论
DMA传输一颗TM1934(单颗LED)的时间约为25.6微秒(μs)。
驱动一路时间约为105ms(25.6*4096+200=105057.6μs)
方案三:PWM+DMA
思路
主循环中刷新RGB数据
转换为占空比缓存
DMA将占空比数据传输给Timer
Timer输出PWM波形驱动TM1934
驱动8路所需RAM
驱动1颗TM1934需要
24bit * 4 * 2 = 192 Bytes (PWM的DMA数组宽度为2 Bytes)
驱动1路(4096颗TM1934)需要
4096 * 192 = 786432 byte / 1024 = 768 KB
驱动8路
768 * 8 = 6144 KB / 1024 = 6 MB
方案四:UART+DMA
思路
驱动8路所需RAM
驱动8路所需时间
📁附言:
参考文档: