fbwcpu 发表于 2023-10-16 21:47:59

如何高效的通过DMA+GPIO 把字节数据流从一个IO打出去?

如何高效的通过DMA+GPIO 把字节数据流从STM32 的一个IO打出去?LED驱动上,,DMA+GPIO方式 。字节数据是8位的   是否输出前要把每个bit分开填充到8个字节 ,这样方面DMA到GPIO相关寄存器的操作?

kitten 发表于 2023-10-17 00:06:45

DMA+SPI不晓得行不行,从MOSI引脚输出。

wxws 发表于 2023-10-17 06:02:31

不就是串口嘛

liufabing 发表于 2023-10-17 08:31:09

spi可以,驱动ws2812就是有spi的方式。论坛里面有

ibmx311 发表于 2023-10-17 08:36:22

并口能快的话fpga卖给谁去

yuyu87 发表于 2023-10-17 08:38:23

你得把每个BIT分成一个字节,这样的话比较占内存。用SPI或者PWM配合DMA会好一些。

fbwcpu 发表于 2023-10-17 09:08:12

DMA+SPI肯定没问题。。。现在讨论的是DMA+GPIO ..这个在LED点阵驱动上有人用,效果还可以 ,,就是不清楚数据是如何处理的

fbwcpu 发表于 2023-10-17 09:08:52

yuyu87 发表于 2023-10-17 08:38
你得把每个BIT分成一个字节,这样的话比较占内存。用SPI或者PWM配合DMA会好一些。 ...
(引用自6楼)

是的比较占内存但是GPIO有通用性,任何一个IO都可以,SPI就不行了

工程师030 发表于 2023-10-17 09:34:16

arm核的单片机除了FSMC,应该没有其他方式了吧,GPIO根本不是DMA的外设

yyts 发表于 2023-10-17 09:41:27

yuyu87 发表于 2023-10-17 08:38
你得把每个BIT分成一个字节,这样的话比较占内存。用SPI或者PWM配合DMA会好一些。 ...
(引用自6楼)

STM32不是有位段吗

tomzbj 发表于 2023-10-17 09:43:24

串行还是并行输出? 串行就直接用SPI的MOSI就行了. 并行的话, 不需要太快的话用M2M方式, 在F103上大约能做到20个时钟周期输出一次.
需要快的话, 按DAC配置, 把DMA的目标地址改成GPIO的ODR寄存器, 可以做到10个以内时钟周期输出一次.

fbwcpu 发表于 2023-10-17 10:35:38

yyts 发表于 2023-10-17 09:41
STM32不是有位段吗
(引用自10楼)

位段 虚拟的 不能DMA

fbwcpu 发表于 2023-10-17 10:37:11

tomzbj 发表于 2023-10-17 09:43
串行还是并行输出? 串行就直接用SPI的MOSI就行了. 并行的话, 不需要太快的话用M2M方式, 在F103上大约能做到 ...
(引用自11楼)

通过一根IO线输出准备把字节数组打散为bit流输出

c67890@163.com 发表于 2023-10-17 12:48:52

DMA+SPI,之前用过

zqf441775525 发表于 2023-10-17 15:28:00

DMA+SPI和DMA+GPIO都可以,把每个bit按照2:6的规律折合成一个字节,或者按照1:3的规律折合成半个字节,两者占用内存数量一样,DMA+SPI是用SPI触发DMA,DMA+GPIO用TIM触发DMA。

tomzbj 发表于 2023-10-17 16:16:01

fbwcpu 发表于 2023-10-17 10:37
通过一根IO线输出准备把字节数组打散为bit流输出
(引用自13楼)

就一根线, 那怎么处理同步呢...

tomzbj 发表于 2023-10-17 16:17:04

zqf441775525 发表于 2023-10-17 15:28
DMA+SPI和DMA+GPIO都可以,把每个bit按照2:6的规律折合成一个字节,或者按照1:3的规律折合成半个字节,两者 ...
(引用自15楼)

这种方式的话, 感觉用UART应该也可以~

zqf441775525 发表于 2023-10-17 16:20:07

tomzbj 发表于 2023-10-17 16:17
这种方式的话, 感觉用UART应该也可以~
(引用自17楼)

UART多了个不可控的起始位和停止位,所以UART应该不好用

tomzbj 发表于 2023-10-17 16:21:48

zqf441775525 发表于 2023-10-17 16:20
UART多了个不可控的起始位和停止位,所以UART应该不好用
(引用自18楼)

一个必低一个必高呀, 还好吧
感觉SWIM协议就可以用UART来模拟, 有空了试试.
页: [1]
查看完整版本: 如何高效的通过DMA+GPIO 把字节数据流从一个IO打出去?