搜索
bottom↓
回复: 18

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

[复制链接]

出0入4汤圆

发表于 2023-10-16 21:47:59 | 显示全部楼层 |阅读模式
如何高效的通过DMA+GPIO 把字节数据流从STM32 的一个IO打出去?  LED驱动上,,DMA+GPIO  方式 。  字节数据是8位的   是否输出前要把每个bit分开填充到8个字节 ,这样方面DMA到GPIO相关寄存器的操作?

出0入1209汤圆

发表于 2023-10-17 00:06:45 | 显示全部楼层
DMA+SPI不晓得行不行,从MOSI引脚输出。

出0入228汤圆

发表于 2023-10-17 06:02:31 来自手机 | 显示全部楼层
不就是串口嘛

出0入0汤圆

发表于 2023-10-17 08:31:09 来自手机 | 显示全部楼层
spi可以,驱动ws2812就是有spi的方式。论坛里面有

出0入300汤圆

发表于 2023-10-17 08:36:22 来自手机 | 显示全部楼层
并口能快的话fpga卖给谁去

出20入186汤圆

发表于 2023-10-17 08:38:23 | 显示全部楼层
你得把每个BIT分成一个字节,这样的话比较占内存。用SPI或者PWM配合DMA会好一些。

出0入4汤圆

 楼主| 发表于 2023-10-17 09:08:12 | 显示全部楼层
DMA+SPI肯定没问题。。。现在讨论的是DMA+GPIO ..这个在LED点阵驱动上有人用,效果还可以 ,,就是不清楚数据是如何处理的

出0入4汤圆

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

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

出0入46汤圆

发表于 2023-10-17 09:34:16 | 显示全部楼层
arm核的单片机除了FSMC,应该没有其他方式了吧,GPIO根本不是DMA的外设

出0入224汤圆

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

STM32不是有位段吗

出0入362汤圆

发表于 2023-10-17 09:43:24 | 显示全部楼层
串行还是并行输出? 串行就直接用SPI的MOSI就行了. 并行的话, 不需要太快的话用M2M方式, 在F103上大约能做到20个时钟周期输出一次.
需要快的话, 按DAC配置, 把DMA的目标地址改成GPIO的ODR寄存器, 可以做到10个以内时钟周期输出一次.

出0入4汤圆

 楼主| 发表于 2023-10-17 10:35:38 | 显示全部楼层

位段 虚拟的 不能DMA

出0入4汤圆

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

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

出0入0汤圆

发表于 2023-10-17 12:48:52 | 显示全部楼层
DMA+SPI,之前用过

出0入4汤圆

发表于 2023-10-17 15:28:00 | 显示全部楼层
DMA+SPI和DMA+GPIO都可以,把每个bit按照2:6的规律折合成一个字节,或者按照1:3的规律折合成半个字节,两者占用内存数量一样,DMA+SPI是用SPI触发DMA,DMA+GPIO用TIM触发DMA。

出0入362汤圆

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

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

出0入362汤圆

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

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

出0入4汤圆

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

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

出0入362汤圆

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

一个必低一个必高呀, 还好吧
感觉SWIM协议就可以用UART来模拟, 有空了试试.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 13:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表