ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F3] F373的SPI,数据位数为什么不能设置?

[复制链接]
518|11
 楼主 | 2018-2-11 11:43 | 显示全部楼层 |阅读模式


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

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



NSSP = 1 时:



程序配置如下:



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

很简单的事,折腾两天,近乎绝望。
目前只能认为芯片有问题。但愿是自己遇到特例了,而不是芯片本身的 bug 。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-2-11 12:26 | 显示全部楼层
可能真是芯片问题
| 2018-2-11 21:05 | 显示全部楼层
要设置那么少的位, 不知道是啥应用哪
 楼主 | 2018-2-11 21:53 | 显示全部楼层
airwill 发表于 2018-2-11 21:05
要设置那么少的位, 不知道是啥应用哪


关键是不能设置为 8 位。
这个常用的出问题。
| 2018-2-12 07:16 | 显示全部楼层
我不大相信芯片有bug, 你用调试器跟踪进去看看寄存器设置吧
 楼主 | 2018-2-12 09:19 | 显示全部楼层
本帖最后由 玄德 于 2018-2-12 10:16 编辑
airwill 发表于 2018-2-12 07:16
我不大相信芯片有bug, 你用调试器跟踪进去看看寄存器设置吧


昨天在别处得到一点指点,让我直接调用 STMcube 库的发送函数。
试了一下,真的波形正常,事实很清楚。
配置函数没变,只有发送过程不同,
用官方发送函数就有正常波形,用传统的寄存器操作就出现双倍脉冲。

目前正在摸索。



 楼主 | 2018-2-12 11:54 | 显示全部楼层
本帖最后由 玄德 于 2018-2-14 21:14 编辑

基本搞清了:
要直接操作向量地址,而且要加 uint8 修饰,
才能正确操作 8bit 宽度。直接读写 SPI1 -> DR 是不行的,那是操作 16 位。
  1. while (1)
  2.           {
  3.         *(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C ) = 0xCA;       //发送。不能这样写:SPI1 -> DR = 0xCA;
  4.         while        ( !( SPI1 -> SR & ( 1 << 0 ) ) );                       //等待 RXNE 标志。
  5.         j = *(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C );             //接收,同时清除 RXNE 标志。同样不能这样写:j = SPI1 -> DR;
  6.         for        ( i=0; i<0x1000; i++ );
  7.           }
复制代码

后记:
(uint32_t) SPI1 + 0x0C ) 实际上就是DR寄存器的地址,所以也可以这样写:
*(__IO uint8_t *) ( &( SPI1 -> DR ) )  = 0xXX;       //发送。
j = *(__IO uint8_t *) ( &( SPI1 -> DR ) ) ;                //接收。




 楼主 | 2018-2-12 11:55 | 显示全部楼层
本帖最后由 玄德 于 2018-2-12 12:01 编辑

@airwill   
@dongliushui

基本摸清了,多谢!结论在 7 层。


| 2018-2-14 08:40 | 显示全部楼层
看来还是 8位还是 16 位操作的问题. 这个问题隐藏挺深的.
路过 的朋友都留意一下
| 2018-2-14 09:48 | 显示全部楼层
看样这个dr是16bit的.编译器也会坑人啊.
| 2018-2-14 09:50 | 显示全部楼层
思路清晰,有图有程序,解决思路明确,很有学习价值---->精华帖就需要这样的.
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表