硬汉嵌入式论坛

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

[STM32H7] 使用两路spi ,想同步传输接收数据,采用hal库,发现不能同时!

[复制链接]

25

主题

58

回帖

133

积分

初级会员

积分
133
发表于 2024-1-8 15:59:26 | 显示全部楼层 |阅读模式
版主,各有大牛
      
我现在用的是stm32F743mcu,使用了两路spi采集两路adc
      现在我用的的hal库,里面的函数。如下图
下载 (1).png
     问题时,想在同一个时间点,启动两路spi,采集。
下载 (2).png
我理解应该时很快的。
但是波形看spi的时钟时有先后的顺序。
下载.png
如何解决这个问题?就用sthal库。
谢谢大家和版主 硬汉



回复

使用道具 举报

5

主题

159

回帖

174

积分

初级会员

积分
174
发表于 2024-1-8 16:47:42 | 显示全部楼层
如果spi是在不同的DMA上,那就使用DMA吧
回复

使用道具 举报

25

主题

58

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2024-1-8 17:17:35 | 显示全部楼层
不知道我发的贴子为什么没有图片,只能再补三张图片,说明一下。
1704702129341.png
1704702051804.jpg
5025a30caef45d3a63b0b75b35ef218.jpg
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2024-1-8 17:59:58 | 显示全部楼层
给你个简易的方法解决这问题
用两个SPI, 比如SPI1 & SPI2, SPI1配置为主,SPI2配置为从, 两个时钟线接一块, 这就轻松的做到你说的同步了。
回复

使用道具 举报

25

主题

58

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2024-1-8 23:04:17 | 显示全部楼层
谢谢,Edmund1964的建议。


还有一个疑问,就是st提供的hal的spi函数,为什么效率那么低。

函数调用倒是简单了,但是内容为了做到兼容,有大量的额外操作。

有高手在尝试,用hal库,做简单的寄存器操作吗?
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2024-1-8 23:15:09 | 显示全部楼层
wxqhit 发表于 2024-1-8 23:04
谢谢,Edmund1964的建议。

hal是出了名的浪费资源的, 想省些就用LL或寄存器吧
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2024-1-8 23:23:02 | 显示全部楼层
wxqhit 发表于 2024-1-8 23:04
谢谢,Edmund1964的建议。

。。。。。。。。。。

对比一下吧

对比一下吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116779
QQ
发表于 2024-1-9 08:51:38 | 显示全部楼层
wxqhit 发表于 2024-1-8 23:04
谢谢,Edmund1964的建议。

可以用定时器触发实现SPI+DMA, 这样同步就非常好了,比软件控制准。
回复

使用道具 举报

25

主题

58

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2024-1-9 16:09:32 | 显示全部楼层
谢谢@Edmund1964 @eric2013
回复

使用道具 举报

3

主题

115

回帖

124

积分

初级会员

积分
124
发表于 2024-1-10 18:01:20 | 显示全部楼层
eric2013 发表于 2024-1-9 08:51
可以用定时器触发实现SPI+DMA, 这样同步就非常好了,比软件控制准。

@eric2013 硬汉哥,您手的定时器触发SPI+DMA的方式,能用在F4上吗?
能简单说说思路吗?
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-12-26 11:47:06 | 显示全部楼层
Edmund1964 发表于 2024-1-8 17:59
给你个简易的方法解决这问题
用两个SPI, 比如SPI1 & SPI2, SPI1配置为主,SPI2配置为从, 两个时钟线接一 ...

我目前也有类似这样的问题,如果两个SPI都是用DMA进行发送,但是第一个DMA发送的数据还没有发完,然后就第二个DMA进行发送的数据就来了,导致第一个DMA的数据都没有发完就被占用,我目前也想实现您说的,配置为主,配置为从,然后两个时钟线接在一起
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-12-26 11:49:02 | 显示全部楼层
Edmund1964 发表于 2024-1-8 17:59
给你个简易的方法解决这问题
用两个SPI, 比如SPI1 & SPI2, SPI1配置为主,SPI2配置为从, 两个时钟线接一 ...

我想知道这种使用方式是传输的速率会比较快嘛
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 12:18 , Processed in 0.375520 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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