打印
[STM32F1]

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

[复制链接]
1479|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjhcpu|  楼主 | 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 (192.26 KB )

230422pja7ba2daarg7ja7.jpg

使用特权

评论回复
沙发
香水城| | 2020-3-24 11:07 | 只看该作者
我们可以使用STM32的定时器的PWM输出 模拟一个 CLK出来,
同时我们又可以结合定时器的更新事件或比较事件 触发DMA 进行数据传输。

使用特权

评论回复
板凳
fjhcpu|  楼主 | 2020-3-24 12:05 | 只看该作者
但是数据都是字节的,如何变换后一个一个bit的从一个IO输出?

使用特权

评论回复
地板
香水城| | 2020-3-24 14:18 | 只看该作者
这也不难,每个人处理办法或许不一样。

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

使用特权

评论回复
5
fjhcpu|  楼主 | 2020-3-24 15:33 | 只看该作者
那这数据量要扩大8倍了。和驱动单总线ws2812 LED 一个方法了。 内存吃不消呀。

使用特权

评论回复
6
香水城| | 2020-3-24 17:03 | 只看该作者
fjhcpu 发表于 2020-3-24 15:33
那这数据量要扩大8倍了。和驱动单总线ws2812 LED 一个方法了。 内存吃不消呀。 ...

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

368

帖子

3

粉丝