请问F373的SPI为什么数据位数不能设置?

2019-07-18 17:30发布

自己做的 F373 板子,SPI 出现奇怪现象:
位数设置为 ≤8bit 时,每往 DR 写入一次数据,SCK 会发出两倍的脉冲。SPI1 和 SPI3 都这样。
设置为 >8bit 时,波形正常。(但可惜没法利用。)

如图,黄 {MOD}波形为 SCK,蓝 {MOD}为 MOSI (DR = 0xCA)。
NSSP = 0 时:



NSSP = 1 时:



程序配置如下:



硬件、软件都已经最小化,试过STMcube产生的配置程序,也试过多个官方例程,情况相同,
而且 SPI1 和 SPI3 情况完全一样。

很简单的事,折腾两天,近乎绝望。
目前只能认为芯片有问题。但愿是自己遇到特例了,而不是芯片本身的 bug 。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
xwgc888
1楼-- · 2019-07-18 18:26
[/tr][/table]

</p>
xwgc888
2楼-- · 2019-07-18 20:06
 精彩回答 2  元偷偷看……
zhouxk
3楼-- · 2019-07-19 01:42
把你的STMcubeMX生成的配置文件和应用工程都传上来看看。
ctwewer
4楼-- · 2019-07-19 02:06
本帖最后由 wenyangzeng 于 2018-2-11 13:47 编辑

1、默认的SPI发送数据长度是16位:
SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
你可以一次发送2个字节。
2、而设定发送数据位长度8位:
#define SPI_DataSize_8b
SPI_DataSizeConfig(SPI_TypeDef* SPIx,  SPI_DataSize);

3、而在F3的STM32Cube里的函数也可以试试
HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
xwgc888
5楼-- · 2019-07-19 03:18
多谢指点!

按你说的第三条,我直接用 STMcube 中的库函数 HAL_SPI_Transmit() 进行发送,
现在可以得到正常的波形。

我前面只用了官方的外设配置函数,发送过程是自己写的,直接操作 DR 寄存器,然后判断 RXNE 标志,结果波形错误。

虽然还不明白怎么回事,毕竟有进展了。我再继续摸索。
zhouxk
6楼-- · 2019-07-19 04:51
本帖最后由 toofree 于 2018-2-11 16:40 编辑


从你主楼贴中的程序配置发现不了问题,因为的确没问题,问题出在了其它地方。
所以,以后还是最好上传个工程。

一周热门 更多>