搜索
bottom↓
回复: 29

stm32F103如何通过'DMA把几十个字节数组通过一个IO端口发送数据?

[复制链接]

出0入4汤圆

发表于 2020-3-4 14:32:53 来自手机 | 显示全部楼层 |阅读模式
stm32F103如何通过'DMA把几十个字节数组通过一个IO端口发送数据?   不是用SPI通讯。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入22汤圆

发表于 2020-3-4 14:41:20 | 显示全部楼层
你可以用DMA+SPI,只需要SPI的MOSI一个IO就可以,MISO,SCLK,CS可以当普通IO用

出0入4汤圆

 楼主| 发表于 2020-3-4 15:30:11 来自手机 | 显示全部楼层
SPI我已经实现了,我是说用'DMA加上普通IO口来做。。。这好像在LED 控制卡行业有人实现,但是不知道怎么弄的。

出0入0汤圆

发表于 2020-3-4 15:44:51 | 显示全部楼层
在同一个端口的话,似乎可以

出0入0汤圆

发表于 2020-3-4 16:05:57 | 显示全部楼层
NXP 单片机的FLEXIO,可以直接将数据信息发送出去

出0入0汤圆

发表于 2020-3-4 16:49:00 来自手机 | 显示全部楼层
你试试dma的内存到内存方式,目标地址选端口的位带区。

出0入4汤圆

 楼主| 发表于 2020-3-4 16:59:38 来自手机 | 显示全部楼层
XA144F 发表于 2020-3-4 16:49
你试试dma的内存到内存方式,目标地址选端口的位带区。

一个字节8bit 如何顺序赋值到指定位带区?

出0入0汤圆

发表于 2020-3-4 17:08:16 来自手机 | 显示全部楼层
把1字节扩展成8个32位数据,这还不简单吗。

出0入0汤圆

发表于 2020-3-4 18:10:16 | 显示全部楼层
以前做过一个类似的,定时器驱动DMA控制GPIO

出0入4汤圆

 楼主| 发表于 2020-3-4 18:57:41 来自手机 | 显示全部楼层
XA144F 发表于 2020-3-4 17:08
把1字节扩展成8个32位数据,这还不简单吗。

8个32位段数据都只是BIT0 是有效位,那如何通过DMA赋值到一个指定IO比如'PA2?

出0入0汤圆

发表于 2020-3-4 19:10:41 | 显示全部楼层
定时器控制PA2端口的高低

出0入4汤圆

 楼主| 发表于 2020-3-4 19:38:59 来自手机 | 显示全部楼层
RobotRD 发表于 2020-3-4 19:10
定时器控制PA2端口的高低

这有啥用?效率低下

出0入4汤圆

 楼主| 发表于 2020-3-4 19:39:19 来自手机 | 显示全部楼层
RobotRD 发表于 2020-3-4 19:10
定时器控制PA2端口的高低

这有啥用,效率太低下了

出0入0汤圆

发表于 2020-3-4 19:40:56 | 显示全部楼层
DMA+PWM           

出0入4汤圆

 楼主| 发表于 2020-3-4 19:52:23 来自手机 | 显示全部楼层
hanshiruo 发表于 2020-3-4 19:40
DMA+PWM

几十个字节的数据以PWM的形式发送失去?

出0入0汤圆

发表于 2020-3-4 19:54:48 | 显示全部楼层
fbwcpu 发表于 2020-3-4 19:52
几十个字节的数据以PWM的形式发送失去?

搜 PWM DMA 任意波形

出0入20汤圆

发表于 2020-3-4 19:55:49 | 显示全部楼层
直接在内存的位带区操作就可以了吧,起码SMT32的内存是全部映射到位带区的,理论上是可以以原子操作访问任何一个位,加上DMA就可以变相实现一个移位寄存器~

出0入4汤圆

 楼主| 发表于 2020-3-4 20:06:44 来自手机 | 显示全部楼层
hanshiruo 发表于 2020-3-4 19:54
搜 PWM DMA 任意波形

好的,我研究哈看看,谢谢了

出0入4汤圆

 楼主| 发表于 2020-3-4 20:16:04 来自手机 | 显示全部楼层
Error.Dan 发表于 2020-3-4 19:55
直接在内存的位带区操作就可以了吧,起码SMT32的内存是全部映射到位带区的,理论上是可以以原子操作访问任何 ...

谢谢回复,我也在研究下,看是否能行

出10入0汤圆

发表于 2020-3-4 20:55:44 | 显示全部楼层
fbwcpu 发表于 2020-3-4 15:30
SPI我已经实现了,我是说用'DMA加上普通IO口来做。。。这好像在LED 控制卡行业有人实现,但是不知道怎么弄 ...

WS2812,通过DMA+PWM来输出的。

出0入0汤圆

发表于 2020-3-4 21:35:30 | 显示全部楼层
goodjob2 发表于 2020-3-4 20:55
WS2812,通过DMA+PWM来输出的。

+1
WS2812 DMA+PWM搞定

出0入0汤圆

发表于 2020-3-6 00:29:51 | 显示全部楼层
本帖最后由 pt2go 于 2020-3-6 00:31 编辑

把数组转换一下,可以DMA到PORTx->ODR,实现8xSPI输出。DMA使用定时器触发

出0入0汤圆

发表于 2020-3-6 09:08:33 | 显示全部楼层
fbwcpu 发表于 2020-3-4 18:57
8个32位段数据都只是BIT0 是有效位,那如何通过DMA赋值到一个指定IO比如'PA2? ...

103有位段映射,每个IO都一个地址

出0入0汤圆

发表于 2020-3-6 09:17:51 | 显示全部楼层
位带区应该不能DMA,还是要用PWM。

出0入4汤圆

 楼主| 发表于 2020-3-6 11:50:42 来自手机 | 显示全部楼层
pt2go 发表于 2020-3-6 00:29
把数组转换一下,可以DMA到PORTx->ODR,实现8xSPI输出。DMA使用定时器触发

只需要一个IO通过DMA输出,那数据变换有点麻烦

出0入4汤圆

 楼主| 发表于 2020-3-6 21:09:07 来自手机 | 显示全部楼层
pt2go 发表于 2020-3-6 00:29
把数组转换一下,可以DMA到PORTx->ODR,实现8xSPI输出。DMA使用定时器触发

实现一个'SPI的话,DMA到PORTx->ODR,只有一个BIT有用,其他数据没有用,那太浪费数据空间里

出0入4汤圆

 楼主| 发表于 2020-3-8 11:19:43 来自手机 | 显示全部楼层
有使用过的朋友讲解一下,其中的门道

出0入4汤圆

 楼主| 发表于 2020-3-19 07:52:16 来自手机 | 显示全部楼层
听说用DMA+PWM   有朋友搞过吗?

出0入224汤圆

发表于 2020-3-19 08:55:08 来自手机 | 显示全部楼层
pt2go 发表于 2020-3-6 00:29
把数组转换一下,可以DMA到PORTx->ODR,实现8xSPI输出。DMA使用定时器触发

每次还要输出一个sck,怎么实现?

出0入8汤圆

发表于 2020-3-19 09:06:13 来自手机 | 显示全部楼层
一个IO不就是异步串口吗?DMA到USART TX
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 10:18

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

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