野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23596|回复: 3

为什么SPI引脚初始化顺序不同就不能读数据?

[复制链接]
发表于 2020-12-12 19:29:13 | 显示全部楼层 |阅读模式
void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  FLASH_SPI_APBxClock_FUN ( FLASH_SPI_CLK, ENABLE );
FLASH_SPI_CS_APBxClock_FUN ( FLASH_SPI_CS_CLK|FLASH_SPI_SCK_CLK|FLASH_SPI_MISO_PIN|FLASH_SPI_MOSI_PIN, ENABLE );
  /* 配置SPI的 CS引脚,普通IO即可 */
  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN;//这里换成是初始化FLASH_SPI_MOSI_PIN或者FLASH_SPI_MISO_PIN就读不出数据
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(FLASH_SPI_CS_PORT, &GPIO_InitStructure);
  /* 配置SPI的 SCK引脚*/
  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(FLASH_SPI_SCK_PORT, &GPIO_InitStructure);
  /* 配置SPI的 MISO引脚*/
  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN;
  GPIO_Init(FLASH_SPI_MISO_PORT, &GPIO_InitStructure);
  /* 配置SPI的 MOSI引脚*/
  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MOSI_PIN;
  GPIO_Init(FLASH_SPI_MOSI_PORT, &GPIO_InitStructure);
  /* 停止信号 FLASH: CS引脚高电平*/
  SPI_FLASH_CS_HIGH();
................
}
int main()
{
        USART1_Configuration();
        SPI_Mode_Config();
        read=SPI_FLASH_ReadID();
        printf ("ID为:0x%x",read);//正常应该会打印ID:0XEF4017,但是GPIO初始化换掉就不行
        while(1);
}

回复

使用道具 举报

发表于 2020-12-14 09:39:07 | 显示全部楼层
原因不知道
肯定不是这个问题
我特地去查了一下我一直用的初始化顺序
        /*!< Configure SPI_FLASH_SPI pins: SCK */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /*!< Configure SPI_FLASH_SPI pins: MISO */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /*!< Configure SPI_FLASH_SPI pins: MOSI */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* Deselect the FLASH: Chip Select high */
        SPI_FLASH_CS_HIGH();
回复 支持 反对

使用道具 举报

发表于 2020-12-14 19:22:50 | 显示全部楼层
/* 配置SPI的 CS引脚,普通IO即可 */
  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN;//这里换成是初始化FLASH_SPI_MOSI_PIN或者FLASH_SPI_MISO_PIN就读不出数据
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(FLASH_SPI_CS_PORT, &GPIO_InitStructure);

你在这改成MISO  MOSI 后 GPIO_Mode 也要改的 改成AFPP
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-15 20:57:10 | 显示全部楼层
liners 发表于 2020-12-14 09:39
原因不知道
肯定不是这个问题
我特地去查了一下我一直用的初始化顺序

我大概知道了,他例程里面在配置SCK为复用输出后面的MISO和MOSI也是复用输出。我自己写的时候没注意,用的是普通推挽输出,所以不能用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 01:49 , Processed in 0.045687 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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