问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F407在使用SPI2时读出flash_id为0XFFFFFF

GD32F407在使用SPI2时读出flash_id为0XFFFFFF

wangkl112024-05-21
回答 +关注 15
11554人浏览 12人回答问题 分享 举报
12 个回答
  • 有试过其他通道没有
    wangkl11 2024-5-22 17:11 回复TA
    用PC10 11 12也是一样 
  • flash_id=spi_flash_read_id();  //DBUG 出来 flash_id = 0x00ffffff
    int32_t spi_flash_read_id(void)
    {
        uint32_t temp = 0, temp0 = 0, temp1 = 0, temp2 = 0;

        /* select the flash: chip select low */
        SPI_FLASH_CS_LOW();

        /* send "RDID " instruction */
        spi_flash_send_byte(RDID);

        /* read a byte from the flash */
        temp0 = spi_flash_send_byte(DUMMY_BYTE);
        /* read a byte from the flash */
        temp1 = spi_flash_send_byte(DUMMY_BYTE);

        /* read a byte from the flash */
        temp2 = spi_flash_send_byte(DUMMY_BYTE);

        /* deselect the flash: chip select high */
        SPI_FLASH_CS_HIGH();

        temp = (temp0 << 16) | (temp1 << 8) | temp2;

        return temp;
    }

  • spi_parameter_struct spi_init_struct;

        rcu_periph_clock_enable(RCU_GPIOB);
              rcu_periph_clock_enable(RCU_GPIOC);
        rcu_periph_clock_enable(RCU_SPI2);

        /* SPI5_CLK(PB3), SPI5_MISO(PB4), SPI5_MOSI(PB5), SPI5_IO2(PC9) and SPI5_IO3(PC10) GPIO pin configuration */
        gpio_af_set(GPIOC, GPIO_AF_5, GPIO_PIN_10 | GPIO_PIN_9);
        gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10 | GPIO_PIN_9);
        gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10 | GPIO_PIN_9);

               gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
        gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
        gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ,  GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
           
        /* SPI5_CS(PC11) GPIO pin configuration */
        gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
        gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

        SPI_FLASH_CS_HIGH();

        /* SPI5 parameter config */
        spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;//SPI在全双工通讯中接收/发送数据
        spi_init_struct.device_mode          = SPI_MASTER;//SPI为主机模式且SWNSS=1
        spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;//SPI使用8位数据帧格式
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;//在SPI为空闲状态时,CLK引脚拉低,且"在第1个时钟跳变沿时开始采集第1位数据"
        spi_init_struct.nss                  = SPI_NSS_SOFT;//使用NSS软件模式:NSS电平取决于SWNSS位;
        spi_init_struct.prescale             = SPI_PSC_32; //SPI预分频
        spi_init_struct.endian               = SPI_ENDIAN_MSB;//先发送高位
        spi_init(SPI2, &spi_init_struct);

        /* quad wire SPI_IO2 and SPI_IO3 pin output enable */
        spi_quad_io23_output_enable(SPI2);

        /* enable SPI5 */
        spi_enable(SPI2);
12

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