打印

stm32 SPI 如何接收20位的连续数据

[复制链接]
10265|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
johngray|  楼主 | 2013-5-6 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    请教一个问题,最近做一个SPI的通信协议,打算利用STM32的SPI做从机来实现20位连续数据的处理,不知如何配置或者编程。CLK信号由外部主机提供,数据连续,且另有一路信号表达数据起始。
沙发
duljsky| | 2013-5-7 21:02 | 只看该作者
只接受吗?尝试一下配置为单线只收或者双向只收!有条件lz多多尝试就是了~没条件的人想尝试都没机会呢!LZ加油,也同样希望LZ可以成功并和大家分享交流~

使用特权

评论回复
板凳
johngray|  楼主 | 2013-5-8 08:22 | 只看该作者
问题在于 STM32F4 系列  SPI 只能配置为 8位或16位 。我这个实时性要求高,所以犯难了!

使用特权

评论回复
地板
zhaoyu2005| | 2013-5-8 09:15 | 只看该作者
20位的应该不是SPI了吧,啥器件弄得20位的SPI?
非标的东西,只能想别的招了

使用特权

评论回复
5
johngray|  楼主 | 2013-9-20 13:27 | 只看该作者
信号有三路,时钟,同步信号,数据。  时钟频率是4M, 而且上位机发下来的数据是连续不断的。对实时性要求高。同步信号在第一个时钟发出的同时,翻转位高电平, 并且一直持续到第19个数据后,变为低电平。
我的问题是,如果用STM32自带的SPI接收,设置为16位, 第一个16位接收后之后,第二个接收4位后, 接收到4位后,同步信号电平翻转,能否从寄存器里得到4位数据,实时处理。然后继续接收下一个20位,,关键是怎么实现同步。

使用特权

评论回复
6
zijia0328| | 2014-8-15 15:07 | 只看该作者
楼主请问你最后实现了吗,我现也正做一个stm32读取AD数据的SPI通信,只不过是AD芯片作为主设备,单片机做从设备,因为SCK信号是AD芯片主动发出的,分别是:SCO,SDO,SDI,FSO,FSO是数据控制信号,当其拉低时SDO才输出数据。请问SPI程序该如何改写呢?

使用特权

评论回复
7
aoshi0603| | 2016-7-27 22:09 | 只看该作者
什么情况,这贴子咋没结果呢,这不是浪费感情吗?
我需要采集20位ADC数据,STM32能不能够啊,不行我换厂家了

使用特权

评论回复
8
changle11sdo5| | 2016-7-28 17:01 | 只看该作者
我都是用普通IO口模拟SPI,想怎么玩就怎么玩

使用特权

评论回复
9
xiangzi1989| | 2017-6-14 17:45 | 只看该作者
每读一个字节前空写一次就行了吧

使用特权

评论回复
10
Talons| | 2018-9-14 17:38 | 只看该作者
zhaoyu2005 发表于 2013-5-8 09:15
20位的应该不是SPI了吧,啥器件弄得20位的SPI?
非标的东西,只能想别的招了 ...

SPI只是时序和电平的标准,没有规定数据位数。不存在非标问题。不支持只是stm32的问题,很多传感器或者设备甚至用的25位,或32位SPI数据。

使用特权

评论回复
11
Talons| | 2018-9-14 17:39 | 只看该作者
johngray 发表于 2013-9-20 13:27
信号有三路,时钟,同步信号,数据。  时钟频率是4M, 而且上位机发下来的数据是连续不断的。对实时性要求 ...

如果系统复杂性不高,可以用模拟SPI,寄存器操作电平翻转或检测速度也很快。

使用特权

评论回复
12
huzi2099| | 2018-9-14 17:54 | 只看该作者
记得以前有个贴讨论过,你这边只是从机,做好cs拉高的状态处理就行了

使用特权

评论回复
13
Talons| | 2019-1-17 09:04 | 只看该作者
zhaoyu2005 发表于 2013-5-8 09:15
20位的应该不是SPI了吧,啥器件弄得20位的SPI?
非标的东西,只能想别的招了 ...

SPI标准只限定了电平和时序,位数五花八门,我做过8,12,16,20,25的元器件,都有

使用特权

评论回复
14
Talons| | 2019-1-17 09:06 | 只看该作者
aoshi0603 发表于 2016-7-27 22:09
什么情况,这贴子咋没结果呢,这不是浪费感情吗?
我需要采集20位ADC数据,STM32能不能够啊,不行我换厂家 ...

更新你的库,分成两个10bit数据,最新的库支持2~16位任意值

使用特权

评论回复
15
Prry| | 2019-1-18 23:52 | 只看该作者
一般都可以,目前为止,我遇到的spi器件都可以,ADI的器件就喜欢搞非标SPI。对于这类,把无效位去掉即可,比如20bit,则spi配置为8bit模式,通过3个字节的时钟读取(24bit),然后把无效的4bit去除即可。参考几个例子:

https://blog.csdn.net/qq_20553613/article/details/79132821
https://blog.csdn.net/qq_20553613/article/details/79043934

使用特权

评论回复
16
aoshi0603| | 2019-10-2 20:50 | 只看该作者
Talons 发表于 2019-1-17 09:06
更新你的库,分成两个10bit数据,最新的库支持2~16位任意值

换FGPA了,不过有机会会试一下你说的方法,非常感谢。

使用特权

评论回复
17
zjp8683463| | 2020-5-13 16:58 | 只看该作者
ZSBD

使用特权

评论回复
18
GK胡康| | 2022-8-5 15:07 | 只看该作者
Prry 发表于 2019-1-18 23:52
一般都可以,目前为止,我遇到的spi器件都可以,ADI的器件就喜欢搞非标SPI。对于这类,把无效位去掉即可, ...

能私聊吗

使用特权

评论回复
19
GK胡康| | 2022-8-5 15:07 | 只看该作者
Prry 发表于 2019-1-18 23:52
一般都可以,目前为止,我遇到的spi器件都可以,ADI的器件就喜欢搞非标SPI。对于这类,把无效位去掉即可, ...

能私聊吗

使用特权

评论回复
评论
Prry 2022-8-6 12:05 回复TA
欢迎交流 
20
sparrow054| | 2022-8-7 13:37 | 只看该作者
确定都是有效数据么

使用特权

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

本版积分规则

3

主题

21

帖子

1

粉丝