请问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-19 08:32
 精彩回答 2  元偷偷看……
xwgc888
2楼-- · 2019-07-19 10:13
@toofree

我用的是 STMcubeMX / v4.24,IAR / v7.20,MDK / 5.23 。
CPU 型号是 STM32F373RCT6 。

STM32cubeMX,只配置外设 SPI1,端口 PC7 - SCK,PC8 - MISO, PC9 - MOSI 。最关心的是 SCK 和 MOSI 。

端口配置:


SPI配置:


生成工程以后,配置一下芯片型号、无优化、JLINK、SWD,
然后在原始 main 文件里、while (1)循环下,添加自己的应用语句。如下图:


=================下面是实验结果=========

使用第一种方式,用官方发送函数循环发送 0xCA,可以得到正确、漂亮的波形:


使用第二种方式,常规的寄存器操作,写 DR、等待、清标志,波形位数就不对了:

情况就是这样。一会上传工程。
xwgc888
3楼-- · 2019-07-19 12:14
多谢帮助!基本搞清了,结论在 9 层。
xwgc888
4楼-- · 2019-07-19 15:16
zhouxk 发表于 2019-5-16 11:18
本帖最后由 toofree 于 2018-2-11 16:40 编辑

多谢帮助!基本搞清了,结论在 9 层。
zhouxk
5楼-- · 2019-07-19 19:39
xwgc888 发表于 2019-5-16 12:00
多谢帮助!基本搞清了,结论在 9 层。

看一下函数 HAL_SPI_Transmit() 的原型,里面有8位模式发送,见下图粉 {MOD}框出来的部分。相信在用户指导手册中也应该说明。
这个是批量传输,当计数器内大于1的时候,按16位发送;当等于1的时候,按8位发送;等于0的时候不进来,直接结束了。
xwgc888
6楼-- · 2019-07-19 21:44
 精彩回答 2  元偷偷看……

一周热门 更多>