[STM32F0] 用HAL 库SPI无法读取数值

[复制链接]
15371|40
icecut 发表于 2015-12-23 16:26 | 显示全部楼层
1.用示波器测量你模拟 spi.截图.并且写出 pc 发送和收到的值.
2.用 hal ,调用收发函数.用示波器采集,截图.
保证示波器所有设置都一致.贴上来.
3. 你确定你的配置每一行都是符合从设备要求的么?
 楼主| zclic 发表于 2015-12-25 11:50 | 显示全部楼层

SPI 波形

SPI 波形

这个SPI 的波形图。从图上来看。是一点问题也没有。但STM32F0 却一直读到是00
 楼主| zclic 发表于 2015-12-25 12:32 来自手机 | 显示全部楼层
谁告诉我,这波形有啥问题
 楼主| zclic 发表于 2015-12-29 13:57 | 显示全部楼层
还没有找到办法。求大神
libingqing 发表于 2016-1-20 12:47 | 显示全部楼层
1223657347 发表于 2015-12-21 20:17
我这个是操作SPI接口的LCD驱动芯片的读写代码(基于STM32F070RB),HAL库和寄存器方式都是可以的用的,楼 ...

这个不是在初始化的时候就有的么?
libingqing 发表于 2016-1-20 12:50 | 显示全部楼层
请问楼主怎么读写一个字节呢?对芯片操作没有效果呢,用标准库的话直接有函数,照着那个对相应的寄存器操作的时候还是没有结果,一直显示的是0,很恼火啊、、
libingqing 发表于 2016-1-20 13:10 | 显示全部楼层
1223657347 发表于 2015-12-21 20:17
我这个是操作SPI接口的LCD驱动芯片的读写代码(基于STM32F070RB),HAL库和寄存器方式都是可以的用的,楼 ...

看了你的建议,使能SPI在初始化的代码中就存在,更改单字节,控制寄存器2的8到15位不是保留的么,那写1是什么意思,希望有回应啊,我现在也在弄这个,一直为0,好头疼,谢谢!
hxhaawt 发表于 2016-1-20 14:20 | 显示全部楼层
没有用过F0的芯片,我用STM32F1 的用MXCub1 自动生成的初始化SPI,然后根据自己要求写一个单字节的操作函数,操作没有问题,可以正常读写SPI芯片M25P64也可以和FPGA那边进行通信,不知道楼主是什么问题。。。
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寄存器的访问宽度。
希望有帮助:)
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 还是谢谢啦,我再看看是什么情况、、
libingqing 发表于 2016-1-21 11:42 | 显示全部楼层
请问谁用F4的库的,有没有遇到类似的问题,我现在也是这样的,头疼的很啊、、
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是更容易操作的
libingqing 发表于 2016-1-21 14:28 | 显示全部楼层
1223657347 发表于 2016-1-21 12:33
F4xx系列的SPI结构和F030x,F070x系列的并不一致。当然如果工程中使用的是HAL库的话,建议直接用CubeMX生 ...

好吧,我现在就是直接用Translate还可以,但是Receive一直没有值出现,让人着急啊、、谢谢啦
 楼主| 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页的参考手册。你可以共享一下吗
 楼主| zclic 发表于 2016-2-25 13:59 | 显示全部楼层
这个问题问题还没有结束,有没有遇到过呢?
snjeym 发表于 2016-10-21 17:24 | 显示全部楼层
我也遇到了同样的问题,难道是共性?使用的L476,CUBE生成的工程,在MISO端口已经用示波器得到了数据,但是HAL_SPI_TransmitReceive接到的数据全是0.

黄色为CLK,蓝色为MISO

黄色为CLK,蓝色为MISO
snjeym 发表于 2016-10-21 17:31 | 显示全部楼层
从波形上看,无论CLK的相位如何设置,都应该会出现数据不会仅为0的,所以应该与该部分设置无关。
snjeym 发表于 2016-10-25 22:30 | 显示全部楼层
问题解决,cube设置的问题,误将SPI设置成了单发的模式,后来改过来后因该是没有更新工程,使得stm32l4xx_hal_msp.c中的配置有问题。更改后正确。
snjeym 发表于 2016-10-25 22:35 | 显示全部楼层
问题已经解决,是cube设置的时候设置成了实验用的单发模式,后来改变后应该是没有更新工程,所以造成了stm32l4xx_hal_msp.c这个函数配置有问题,改正后正常。
绝地反击 发表于 2017-3-24 15:52 | 显示全部楼层
好厉害,刚刚接触HAL库。。。都想死
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部