问答

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

21ic问答首页 - GD32 spi0 的cs线电平不稳定

技术交流 spi 电平 开发板 引脚 gd32f303vct6

GD32 spi0 的cs线电平不稳定

yuxiaosen2021-06-25
GD32 spi0 的cs线有时候会在SCK线拉低的时候出现短暂的高电平。以至于整个spi传输错误,这个是为什么?我测试过,在不初始化spi的时候去拉高拉低cs引脚,没有发送有突然高电平的出现。我用的板子是GD32F303VCT6开发板。

回答 +关注 17
3606人浏览 3人回答问题 分享 举报
3 个回答
  • 好了,解决了,经过各种尝试,最终在硬件上找到了问题所在,但也不算,可能是接线没有接好的原因还是什么,spi还是可以正常通信
  • 我把sck时钟初始化去掉,电平就稳定了,感觉gd32的时钟有问题啊。
  • //初始化函数
    void spi_config_init(void)
    {
        spi_parameter_struct spi_init_struct;
        /* enable SPI clock */
        rcu_periph_clock_enable(RCU_SPI0);
        /* deinitialize SPI0 peripheral */
        spi_i2s_deinit(SPI0);
        /* SPI0 parameter config */
        spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
        spi_init_struct.device_mode          = SPI_MASTER;
        spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
        spi_init_struct.nss                  = SPI_NSS_SOFT;
        spi_init_struct.prescale             = SPI_PSC_32;
        spi_init_struct.endian               = SPI_ENDIAN_MSB;
        spi_init(SPI0, &spi_init_struct);

        /* enable the SPI0 peripheral */
        spi_enable(SPI0);

    }
    //spi gpio配置
    void spi_i2s_gpio_config(void)
    {
        /* enable the GPIO clock */
        rcu_periph_clock_enable(RCU_AF);
        rcu_periph_clock_enable(RCU_GPIOA);
        rcu_periph_clock_enable(RCU_GPIOD);
        //SPI
        gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
        gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
        gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
        gpio_bit_set(GPIOA, GPIO_PIN_4);
    }

    //发送函数
    void spi_send_data(uint8_t *data,uint8_t len)
    {
          gpio_bit_reset(GPIOA,GPIO_PIN_4);

          for(uint8_t i = 0; i < len; i++)
          {
               while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET);
               spi_i2s_data_transmit(SPI0, data[i]);
               while(SET == spi_i2s_flag_get(SPI0, SPI_FLAG_TRANS));
          }
          //delay(10);
          gpio_bit_set(GPIOA,GPIO_PIN_4);
          delay(10);



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