搜索
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F1] STM32如何用DMA+pwm模拟SPI时序发送字节流从IO输出?

[复制链接]
427|5
 楼主 | 2020-3-24 10:37 | 显示全部楼层 |阅读模式
STM32如何用定时器+DMA或其他外设模拟SPI时序发送字节流从  IO输出?  因为在成品的LED控制卡上发现是用这种技术驱动的,     是用GD32F150C8T6也就64K+8K主控 ,可以实现很多花样显示。   技术上还是很牛叉的。。。我已经测绘了电路并通过示波器分析了下波形不是用SPI 或者串口一类驱动的.  
1、不讨论SPI形式的驱动,这个相对来说简单,没啥好讨论的
2、只针对这种类型的驱动讨论,上FPGA的就不在讨论范围。
3、估计应该是类似WS2812的DMA+PWM一类的驱动方式,但是如何弄一个SCK信号出来?C8T6的资源也才64+8,还有待显示数据如何变换?
4、外部有一个W25Q08一类的SPI FLASH,是只读的。   
5、此控制卡最大驱动32*320点的单色屏

见下面我测绘的那款控制卡
230422pja7ba2daarg7ja7.jpg

使用特权

评论回复
| 2020-3-24 11:07 | 显示全部楼层
我们可以使用STM32的定时器的PWM输出 模拟一个 CLK出来,
同时我们又可以结合定时器的更新事件或比较事件 触发DMA 进行数据传输。

使用特权

评论回复
 楼主 | 2020-3-24 12:05 | 显示全部楼层
但是数据都是字节的,如何变换后一个一个bit的从一个IO输出?

使用特权

评论回复
| 2020-3-24 14:18 | 显示全部楼层
这也不难,每个人处理办法或许不一样。

比方我们可以将数据位0和1变换成0x00和0x0ff,然后在将其对应成不同时刻的
定时器的比较寄存器的值,通过DMA来修改CCR值来改变PWM输出高或低。
365465e79a634eb1e2.png

使用特权

评论回复
 楼主 | 2020-3-24 15:33 | 显示全部楼层
那这数据量要扩大8倍了。和驱动单总线ws2812 LED 一个方法了。 内存吃不消呀。

使用特权

评论回复
| 2020-3-24 17:03 | 显示全部楼层
fjhcpu 发表于 2020-3-24 15:33
那这数据量要扩大8倍了。和驱动单总线ws2812 LED 一个方法了。 内存吃不消呀。 ...

未必要扩大8倍。可以考虑分组传输,只需要开辟一个缓冲区而已。
当然,办法都是人想想出来的。或许还有更好的办法。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表