硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9420|回复: 9
收起左侧

[SPI/QSPI] STM32H7的SPI FIFO竟然可以用了,不过要注意FIFO大小和数据位宽的关系

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2020-4-3 11:48:01 | 显示全部楼层 |阅读模式

为了进一步降低带宽需求,可以考虑将H7的硬件FIFO打开,特别注意这两个参数的关系。
hspi.Init.FifoThreshold     = SPI_FIFO_THRESHOLD_05DATA;
hspi.Init.DataSize          = SPI_DATASIZE_24BIT;                       

对于SPI1来说,里面的FIFO大小是16字节,那么这里配置为24bit的话,FIFO最多可以存储5个24bit,因此这个fifo阀值要设置为5



回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2020-4-3 21:04:19 | 显示全部楼层
受教了哇
回复

使用道具 举报

3

主题

1231

回帖

1240

积分

至尊会员

积分
1240
发表于 2020-4-3 23:51:57 | 显示全部楼层
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2020-9-10 21:52:45 | 显示全部楼层
楼主,请问24位SPI如何往里面传输数据?我用 HAL_SPI_Transmit(&hspi1, SPI1_TX_BUFFER, 3, 10);或 HAL_SPI_Transmit_DMA(&hspi1, SPI1_TX_BUFFER, 3);  都不成功,SPI_DATASIZE_8BIT可以。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-9-11 05:57:56 | 显示全部楼层
乔布斯 发表于 2020-9-10 21:52
楼主,请问24位SPI如何往里面传输数据?我用 HAL_SPI_Transmit(&hspi1, SPI1_TX_BUFFER, 3, 10);或 HAL_SP ...

看V7教程的这个DAC8653章节即可
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980&extra=page%3D1

QQ截图20200911055905.png
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2020-9-17 05:41:08 | 显示全部楼层
多谢楼主,这个做成功了。

还有一个问题,感觉做不到:
DAC有多个通道,比如4个,同时设置的话,就要同时传输4个32位数据给他。DMA Size=4,CS在数据中间插入脉冲,这样是可以同时更新4个通道值的。

现在的问题是,有一大串数据值,比如是4个通道的正弦波。更新是定时器触发的,这样DMA Size要设置为整个数组的长度,每次触发只能发送一个通道的数据,不能同步更新4个通道。
难道要开4个定时器,每个定时器稍微相差一点时间避免spi冲突,这样来做吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-9-17 09:56:35 | 显示全部楼层
乔布斯 发表于 2020-9-17 05:41
多谢楼主,这个做成功了。

还有一个问题,感觉做不到:

整个DMA双缓冲的机制,动态更新缓冲。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2020-9-17 11:04:45 | 显示全部楼层
多谢。这样需要弄个中断执行几句代码。试图想一种直接配置上不用再跑cpu的
回复

使用道具 举报

39

主题

200

回帖

327

积分

高级会员

积分
327
发表于 2022-2-23 15:07:35 | 显示全部楼层
硬汉哥,SPI需要软件FIFO吗?我看你串口的驱动做了FIFO。是不是SPI没有做FIFO的必要呀
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2022-2-23 15:38:22 | 显示全部楼层
会飞的猪_2020 发表于 2022-2-23 15:07
硬汉哥,SPI需要软件FIFO吗?我看你串口的驱动做了FIFO。是不是SPI没有做FIFO的必要呀

串口的话,我们一般会整通信协议,所以用软件FIFO比较方便。

而SPI的话,我们主要是用来接外设,所以一般不用,直接驱动或者配置DMA使用就行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 20:40 , Processed in 0.302197 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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