问答

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

21ic问答首页 - GD32配置硬件SPI时NSS一直为低电平

国产芯片 嵌入式 技术交流

GD32配置硬件SPI时NSS一直为低电平

在GD32F405RET6中配置SPI2,使用PA15  PC10  PC11  PC12分别作CS SCK MISO MOSI,使用硬件NSS模式时,PA15一直拉低,SCK和MOSI输出看起来都比较正常,请问下这是什么原因造成的,如何进行改进
回答 +关注 0
59人浏览 2人回答问题 分享 举报
2 个回答
  • 补充:以下是SPI2配置的代码段
    void spi2_config(void) {
        /* 使能GPIO和SPI2时钟 */

            spi_parameter_struct spi_init_struct;
        rcu_periph_clock_enable(RCU_GPIOC);   // 使能GPIOC时钟
        rcu_periph_clock_enable(RCU_GPIOA);   // 使能GPIOA时钟(PA15)
        rcu_periph_clock_enable(RCU_SPI2);    // 使能SPI2时钟




        /* 配置引脚复用功能 */
        // CS PA15 : 复用推挽输出
            gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
        gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
        gpio_af_set(GPIOA, GPIO_AF_6, GPIO_PIN_15);

        // SCK PC10 : 复用推挽输出
          gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);
        gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
        gpio_af_set(GPIOC, GPIO_AF_6, GPIO_PIN_10);
        // MISO PC11: 复用浮空输入
            gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);
        gpio_af_set(GPIOC, GPIO_AF_6, GPIO_PIN_11);

        // MOSI PC12: 复用推挽输出
         gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);
             gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
        gpio_af_set(GPIOC, GPIO_AF_6, GPIO_PIN_12);

        /* 复位并配置SPI2 */
        //spi_i2s_deinit(SPI2);

        /* configure SPI1 parameter */
        spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
        spi_init_struct.device_mode          = SPI_MASTER;
        spi_init_struct.frame_size           = SPI_FRAMESIZE_16BIT;
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
        spi_init_struct.nss                  = SPI_NSS_HARD;
        spi_init_struct.prescale             = SPI_PSC_64;
        spi_init_struct.endian               = SPI_ENDIAN_MSB;
        spi_init(SPI2, &spi_init_struct);
            //SPI_CTL0(SPI2) = ((uint32_t)0x0000084cU);
            spi_nss_output_enable(SPI2);

        /* 使能SPI2 */
        spi_enable(SPI2);
    }

  • 补充:这两张分别是SCK和NSS、SCK和MOSI的示波器输出。

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