[STM32F3]

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

[复制链接]
1334|11
手机看帖
扫描二维码
随时随地手机跟帖
玄德|  楼主 | 2018-2-11 11:43 | 显示全部楼层 |阅读模式


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

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


NSSP = 1 时:
2.jpg


程序配置如下:
1.png


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

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




dongliushui| | 2018-2-11 12:26 | 显示全部楼层
可能真是芯片问题

使用特权

评论回复
airwill| | 2018-2-11 21:05 | 显示全部楼层
要设置那么少的位, 不知道是啥应用哪

使用特权

评论回复
玄德|  楼主 | 2018-2-11 21:53 | 显示全部楼层
airwill 发表于 2018-2-11 21:05
要设置那么少的位, 不知道是啥应用哪


关键是不能设置为 8 位。
这个常用的出问题。

使用特权

评论回复
airwill| | 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 位。
while (1)
          {
        *(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C ) = 0xCA;       //发送。不能这样写:SPI1 -> DR = 0xCA;
        while        ( !( SPI1 -> SR & ( 1 << 0 ) ) );                       //等待 RXNE 标志。
        j = *(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C );             //接收,同时清除 RXNE 标志。同样不能这样写:j = SPI1 -> DR;
        for        ( i=0; i<0x1000; i++ );
          }

后记:
(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 层。


使用特权

评论回复
airwill| | 2018-2-14 08:40 | 显示全部楼层
看来还是 8位还是 16 位操作的问题. 这个问题隐藏挺深的.
路过 的朋友都留意一下

使用特权

评论回复
icecut| | 2018-2-14 09:48 | 显示全部楼层
看样这个dr是16bit的.编译器也会坑人啊.

使用特权

评论回复
icecut| | 2018-2-14 09:50 | 显示全部楼层
思路清晰,有图有程序,解决思路明确,很有学习价值---->精华帖就需要这样的.

使用特权

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

本版积分规则

个人签名:有事请找 xuander

150

主题

5845

帖子

43

粉丝