liusheng1998 发表于 2023-1-14 15:51

SPI故障,可有偿

本帖最后由 liusheng1998 于 2023-1-14 18:58 编辑

#21ic问答# 主要问题:spi检测不到SCK输出。
编译环境:keil。硬件:stm32f407zg正点原子探索者开发板+逻辑分析仪.已跑例程,确认硬件引脚输出正常
工程背景:想用SPI传输控制CAN外扩芯片MCP2515,已使用2路CAN,TX/RX引脚占用分别为D1/D0、B12/B13.
SPI选择的是SPI1 ,使用引脚定为PB3 PB4 PB5 作为SPIsck miso mosi,以及PB14作为片选引脚。
SPI.C代码如下#include "sys.h"
#include "spi.h"

//以下是SPI模块的初始化代码,配置成主机模式                                                   
//SPI口初始化
//这里针是对SPI1的初始化

void SPI1_Init(void)
{         
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDefSPI_InitStructure;
      
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIOB时钟 A是片选信号的PA15      所需要的
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1时钟2



//GPIOFB3,4,5初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5复用功能推挽输出      
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 3
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//不上拉 也不下拉
//修改 将有引脚状态由上拉 改为不上拉也不下拉 再改为GPIO_PuPd_DOWN
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化

//设置片选脚的配置
   GPIO_InitTypeDef GPIO_initStruct1;
   GPIO_initStruct1.GPIO_Pin          =GPIO_Pin_14;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通的OUT IO口
            GPIO_initStruct1.GPIO_OType      =GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
         GPIO_initStruct1.GPIO_Speed         =GPIO_Speed_100MHz;
         GPIO_Init(GPIOB,&GPIO_initStruct1);//配置片选信号
//****************************************************************

liusheng1998 发表于 2023-1-14 15:52

请给位大神不吝赐教,感激不尽,卡住在这里好久了,一直没法解决

liusheng1998 发表于 2023-1-14 15:54

顶一下,请求帮助

liusheng1998 发表于 2023-1-14 16:03

再顶 ,求求了

james03 发表于 2023-1-14 18:14

关掉PB3/4/5的JTAG引脚才能复用为其他功能

liusheng1998 发表于 2023-1-14 18:57

james03 发表于 2023-1-14 18:14
关掉PB3/4/5的JTAG引脚才能复用为其他功能

谢谢你的回复,F4的代码规则直接配置{:titter:}
GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1); //PB3复用为 SPI1
这就可以选定PB3的功能。问题应该不在这儿。
后面查到是:
我的片选引脚的结构体写错了。修改了一下现在可以收到SCK了
GPIO_InitTypeDef GPIO_initStruct1;
   GPIO_initStruct1.GPIO_Pin        =GPIO_Pin_14;
   GPIO_initStruct1.GPIO_Mode = GPIO_Mode_OUT;//普通的OUT IO口
           GPIO_initStruct1.GPIO_OType        =GPIO_OType_PP;
   GPIO_initStruct1.GPIO_PuPd = GPIO_PuPd_UP;//上拉
           GPIO_initStruct1.GPIO_Speed         =GPIO_Speed_100MHz;
           GPIO_Init(GPIOB,&GPIO_initStruct1);//配置片选信号

liusheng1998 发表于 2023-1-15 16:55

新的问题出现了,就是 SPI的输出无法解码,不知道是不是时序问题。
分析仪接受的波形如下图所示。
1.SCK的时钟看起来不均匀
2.MOSI的初始化为高电平,不知为何检测到初始电平为0
3.无法解码。D0:SCKD1:MISOD2 MOSID3:CS

timerc 发表于 2023-1-16 08:43

为什么我看着感觉D2像是SCK呢。。。。。

天天向善 发表于 2023-1-16 10:10

liusheng1998 发表于 2023-1-15 16:55
新的问题出现了,就是 SPI的输出无法解码,不知道是不是时序问题。
分析仪接受的波形如下图所示。
1.SCK的 ...

你把逻辑分析仪的频率调高一些看看。

Pretext 发表于 2023-1-16 10:10

是什么收不到SCK?其他芯片还是?

芯路例程 发表于 2023-1-16 10:11

SCK和MOSI有问题的。

liusheng1998 发表于 2023-1-18 16:47

Pretext 发表于 2023-1-16 10:10
是什么收不到SCK?其他芯片还是?

你好 是逻辑分析仪检测不到 SCK的输出,谢谢你

liusheng1998 发表于 2023-1-18 16:48

天天向善 发表于 2023-1-16 10:10
你把逻辑分析仪的频率调高一些看看。

好的 我在试试看 我原本呢用的是20k 可能确实低了 我改成1M试试看

liusheng1998 发表于 2023-1-18 16:49

timerc 发表于 2023-1-16 08:43
为什么我看着感觉D2像是SCK呢。。。。。

额 这个引脚我还是有认真的确认,D2确实是MOSI,{:cry:}

liusheng1998 发表于 2023-1-18 16:50

芯路例程 发表于 2023-1-16 10:11
SCK和MOSI有问题的。

您看看问题具体在哪 能有所推测吗。

sjnh 发表于 2023-1-18 17:40

3个IO都做了复用?
SPI毕竟是硬件实现,SCK应该是很平均的方波,感觉你的io做别的用途

liusheng1998 发表于 2023-1-18 19:40

sjnh 发表于 2023-1-18 17:40
3个IO都做了复用?
SPI毕竟是硬件实现,SCK应该是很平均的方波,感觉你的io做别的用途 ...

你好,我也有过这方面的猜测,但是我查了一下所有的IO口的配置函数,并没有是实质的代码 对PB345这三个引脚做复用。
但是我也注意到一点,就是我的PB3 的确在CUBEmx里面可以看到 他可以被复用为UBS_OTG_HS引脚。但是我的代码是没用HS的 用的是USB_OTG_FS。
然后复用问题,在官方例程SPI里面 都是这么设计的,硬件SPI SCK MOSI MISO 这三个引脚都要复用为SPI相关。
片选引脚就单独设置一个引脚即可

liusheng1998 发表于 2023-1-18 19:53

顶一下 ,求人来看

timerc 发表于 2023-1-19 08:55

PB3有被初始化位其他功能,把功能去掉试试呗,先屏蔽部分功能呗,单独测试弄一个程序,把代码提取出来,只跑这个SPI部分的试试呗;这样就能排除是否有其他影响了,毕竟CUBEMX配置一个程序蛮方便的

liusheng1998 发表于 2023-2-2 15:25

后面自查了一下,没啥问题 ,就是串口的初始化代码 和SPI 的初始化代码的顺序需要调换一下,虽然我也不知道为什么要这样。
但是现在STM32F407USBVCPMCP2515已经可以传输数据了。
感兴趣的可以私聊我。
页: [1]
查看完整版本: SPI故障,可有偿