GD32F470VGT6 LQFP100

📌 一、需求

驱动8路TM1934灯带。每路4096颗芯片,单路长200多米(单颗控制3颗灯,长度5CM),供电12V。

📌 二、芯片

主频

系统频率最高为240MHz

引脚

RAM

512KB

地址

外设

0x1000 0000 - 0x1000 FFFF

TCMSRAM(64KB)

0x2000 0000 - 0x2001 BFFF

SRAM0(112KB)

0x2001 C000 - 0x2001 FFFF

SRAM1(16KB)

0x2002 0000 - 0x2002 FFFF

SRAM2(64KB)

0x2003 0000 - 0x2004 FFFF

ADDSRAM0(128KB)

0x2005 0000 - 0x2006 FFFF

ADDSRAM1(128KB)

0x2007 0000 - 0x2008 FFFF

0x2009 0000 - 0x200A FFFF

0x4002 4000 - 0x4002 4FFF

BKPSRAM(4KB)

定时器

  • 高级

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 外设请求

通道

通道0

通道1

通道2

通道3

通道4

通道5

通道6

通道7

PERIEN[2:0]

000

SPI2_RX

SPI2_RX

SPI1_RX

SPI1_TX

SPI2_TX

SPI2_TX

001

I2C0_RX

TIMER6_UP

TIMER6_UP

I2C0_RX

I2C0_TX

I2C0_TX

010

TIMER3_CH0

12S2_ADD_RX

TIMER3_CH1

12S1_ADD_TX

I2S2_ADD_TX

TIMER3_UP

TIMER3_CH2

011

I2S2_ADD_RX

TIMER1_UP

TIMER1_CH2

12C2_RX

I2S1_ADD_RX

I2C2_TX

TIMER1_CH0

TIMER1_CH1

TIMER1_CH3

TIMER1_UP

TIMER1_CH3

100

UART4_RX

USART2_RX

UART3_RX

USART2_TX

UART3_TX

USART1_RX

USART1_TX

UART4_TX

101

UART7_TX

UART6_TX

TIMER2_CH3

TIMER2_UP

UART6_RX

TIMER2_CH0

TIMER2_TG

TIMER2_CH1

UART7_RX

TIMER2_CH2

110

TIMER4_CH2

TIMER4_UP

TIMER4_CH3

TIMER4_TG

TIMER4_CH0

TIMER4_CH3

TIMER4_TG

TIMER4_CH1

TIMER4_UP

111

TIMER5_UP

I2C1_RX

I2C1_RX

USART2_TX

DAC0

DAC1

I2C1_TX

DMA1 外设请求

通道

通道0

通道1

通道2

通道3

通道4

通道5

通道6

通道7

PERIEN[2:0]

000

ADC0

TIMER7_CH0

TIMER7_CH1

TIMER7_CH2

ADC0

TIMER0_CH0

TIMER0_CH1

TIMER0_CH2

001

DCI

ADC1

ADC1

SPI5_TX

SPI5_RX

DCI

010

ADC2

ADC2

SPI4_RX

SPI4_TX

|011

SPI0_RX

SPI0_RX

SPI0_TX

SPI0_TX

100

SPI3_RX

SPI3_TX

USART0_RX

SDIO

USART0_RX

SDIO

USART0_TX

101

USART5_RX

USART5_RX

SPl3_RX

SPl3_TX

USART5_TX

USART5_TX

110

TIMER0_TG

TIMER0_CH0

TIMER0_CH1

TIMER0_CH0

TIMER0_CH3

TIMER0_TG

TIMER0_CMT

TIMER0_UP

TIMER0_CH2

111

TIMER7_UP

TIMER7_CH0

TIMER7_CH1

TIMER7_CH2

SPI4_RX

SPI4_TX

TIMER7_CH3

TIMER7_TG

TIMER7_CMT

📌 三、TM1934时序

参数名称

符号

测试条件

最小值

典型值

最大值

单位

输入0码,高电平时间

T0H

VDD=5.0V

GND=0V

310

360

410

ns

输入1码,高电平时间

T1H

650

720

1000

ns

输出0码,高电平时间

T0H’

350

ns

输出1码,高电平时间

T1H’

700

ns

0码或1码周期

T0/T1

1.25

μs

Reset码,低电平时间

Treset

200

μs

  1. 0 码或 1 码周期在 1.25μs(频率 800KHz)至 2.5μs(频率 400KHz)范围内,芯片均可正常工

作,但是 0 码和 1 码高电平时间必须符合上表中相应数值范围;

  1. 不需复位时,字节之间的低电平时间不要超过 50μs,否则芯片可能复位,复位后又重新接收数

据,无法实现数据正确传送。

最终采用2个高电平和2个低电平表示1码,1个高电平和3个低电平表示0码的方式来驱动,单个电平周期为360ns,单码周期为1440ns(1.44μs),Reset周期为200μs。

📌 四、方案

方案一:TIM+DMA+GPIO

  • 思路

  1. 配置PA8为普通GPIO输出模式,而不是复用功能

  2. 使用TIM0产生精确的定时,触发DMA传输

  3. DMA将预编码的数据流(包含高低电平序列)传输到GPIO的BSRR寄存器

  4. 在数据传输完成后通过中断停止定时器

  • 驱动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传输速率两个核心维度推导,具体步骤如下:

一、核心参数提取

参数

数值

说明

单颗LED的TM1934数据位

24 bit(dTM_BITS_PER_LED

TM1934每个LED需要24位颜色数据(RGB格式)

SPI与TM1934的位映射

4:1(dSPI_BIT_PER_TM_BIT

每个TM1934的bit需要4个SPI bit传输(硬件时序要求)

SPI分频系数

32(SPI_PSC_32

SPI时钟由APB2时钟分频得到

APB2时钟频率

120MHz

GD32F470系统频率240MHz时,APB2为120MHz

二、关键计算步骤

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

  • 思路

  1. 主循环中刷新RGB数据

  2. 转换为占空比缓存

  3. DMA将占空比数据传输给Timer

  4. 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路所需时间

📁附言:

参考文档: