打印
[STM32F0]

用HAL 库SPI无法读取数值

[复制链接]
楼主: zclic
手机看帖
扫描二维码
随时随地手机跟帖
21
1.用示波器测量你模拟 spi.截图.并且写出 pc 发送和收到的值.
2.用 hal ,调用收发函数.用示波器采集,截图.
保证示波器所有设置都一致.贴上来.
3. 你确定你的配置每一行都是符合从设备要求的么?

使用特权

评论回复
22
zclic|  楼主 | 2015-12-25 11:50 | 只看该作者

这个SPI 的波形图。从图上来看。是一点问题也没有。但STM32F0 却一直读到是00

使用特权

评论回复
23
zclic|  楼主 | 2015-12-25 12:32 | 只看该作者
谁告诉我,这波形有啥问题

使用特权

评论回复
24
zclic|  楼主 | 2015-12-29 13:57 | 只看该作者
还没有找到办法。求大神

使用特权

评论回复
25
libingqing| | 2016-1-20 12:47 | 只看该作者
1223657347 发表于 2015-12-21 20:17
我这个是操作SPI接口的LCD驱动芯片的读写代码(基于STM32F070RB),HAL库和寄存器方式都是可以的用的,楼 ...

这个不是在初始化的时候就有的么?

使用特权

评论回复
26
libingqing| | 2016-1-20 12:50 | 只看该作者
请问楼主怎么读写一个字节呢?对芯片操作没有效果呢,用标准库的话直接有函数,照着那个对相应的寄存器操作的时候还是没有结果,一直显示的是0,很恼火啊、、

使用特权

评论回复
27
libingqing| | 2016-1-20 13:10 | 只看该作者
1223657347 发表于 2015-12-21 20:17
我这个是操作SPI接口的LCD驱动芯片的读写代码(基于STM32F070RB),HAL库和寄存器方式都是可以的用的,楼 ...

看了你的建议,使能SPI在初始化的代码中就存在,更改单字节,控制寄存器2的8到15位不是保留的么,那写1是什么意思,希望有回应啊,我现在也在弄这个,一直为0,好头疼,谢谢!

使用特权

评论回复
28
hxhaawt| | 2016-1-20 14:20 | 只看该作者
没有用过F0的芯片,我用STM32F1 的用MXCub1 自动生成的初始化SPI,然后根据自己要求写一个单字节的操作函数,操作没有问题,可以正常读写SPI芯片M25P64也可以和FPGA那边进行通信,不知道楼主是什么问题。。。

使用特权

评论回复
29
1223657347| | 2016-1-20 18:04 | 只看该作者
libingqing 发表于 2016-1-20 13:10
看了你的建议,使能SPI在初始化的代码中就存在,更改单字节,控制寄存器2的8到15位不是保留的么,那写1是 ...

在STM32F030,070参考手册内有这样一句话。
The read access must be always aligned with the RXFIFO threshold configured by the FRXTH bit in SPIx_CR2 register.(P649)
而FRXTH默认为0,即两个字节的宽度。直接读取DR寄存器,从FIFO中返回的是两个字节的数据,而在16位向8位的强行数据转换到时候,自然高位被丢弃,读取的数据就不对了。
给FRXTH置1,读操作会从接收FIFO中取单字节数据到DR去,这样就是单字节的访问。
用寄存器操作要注意DR寄存器的访问宽度。
希望有帮助:)

使用特权

评论回复
30
libingqing| | 2016-1-21 09:40 | 只看该作者
1223657347 发表于 2016-1-20 18:04
在STM32F030,070参考手册内有这样一句话。
The read access must be always aligned with the RXFIFO thr ...

好吧,我用的是F407的板子,没有找到RXFIFO 还是谢谢啦,我再看看是什么情况、、

使用特权

评论回复
31
libingqing| | 2016-1-21 11:42 | 只看该作者
请问谁用F4的库的,有没有遇到类似的问题,我现在也是这样的,头疼的很啊、、

使用特权

评论回复
32
1223657347| | 2016-1-21 12:33 | 只看该作者
libingqing 发表于 2016-1-21 09:40
好吧,我用的是F407的板子,没有找到RXFIFO 还是谢谢啦,我再看看是什么情况、、 ...

F4xx系列的SPI结构和F030x,F070x系列的并不一致。当然如果工程中使用的是HAL库的话,建议直接用CubeMX生成相应的初始化代码,读写的API也可以直接用。
相比于F030系列的SPI,F4系列的SPI是更容易操作的

使用特权

评论回复
33
libingqing| | 2016-1-21 14:28 | 只看该作者
1223657347 发表于 2016-1-21 12:33
F4xx系列的SPI结构和F030x,F070x系列的并不一致。当然如果工程中使用的是HAL库的话,建议直接用CubeMX生 ...

好吧,我现在就是直接用Translate还可以,但是Receive一直没有值出现,让人着急啊、、谢谢啦

使用特权

评论回复
34
zclic|  楼主 | 2016-2-1 21:01 | 只看该作者
1223657347 发表于 2016-1-20 18:04
在STM32F030,070参考手册内有这样一句话。
The read access must be always aligned with the RXFIFO thr ...

我一直没有找到有超过100页的参考手册。你可以共享一下吗

使用特权

评论回复
35
zclic|  楼主 | 2016-2-25 13:59 | 只看该作者
这个问题问题还没有结束,有没有遇到过呢?

使用特权

评论回复
36
snjeym| | 2016-10-21 17:24 | 只看该作者
我也遇到了同样的问题,难道是共性?使用的L476,CUBE生成的工程,在MISO端口已经用示波器得到了数据,但是HAL_SPI_TransmitReceive接到的数据全是0.

251191154937629010.jpg (416.52 KB )

黄色为CLK,蓝色为MISO

黄色为CLK,蓝色为MISO

使用特权

评论回复
37
snjeym| | 2016-10-21 17:31 | 只看该作者
从波形上看,无论CLK的相位如何设置,都应该会出现数据不会仅为0的,所以应该与该部分设置无关。

使用特权

评论回复
38
snjeym| | 2016-10-25 22:30 | 只看该作者
问题解决,cube设置的问题,误将SPI设置成了单发的模式,后来改过来后因该是没有更新工程,使得stm32l4xx_hal_msp.c中的配置有问题。更改后正确。

使用特权

评论回复
39
snjeym| | 2016-10-25 22:35 | 只看该作者
问题已经解决,是cube设置的时候设置成了实验用的单发模式,后来改变后应该是没有更新工程,所以造成了stm32l4xx_hal_msp.c这个函数配置有问题,改正后正常。

使用特权

评论回复
40
绝地反击| | 2017-3-24 15:52 | 只看该作者
好厉害,刚刚接触HAL库。。。都想死

使用特权

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

本版积分规则