打印

调试GD32F407xx分享(六)

[复制链接]
808|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
QQ2224043166|  楼主 | 2021-12-30 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SPI/* SPI1 init function */
#define SPI_TIME_OUT  100

void GD_SPI_Init(uint32_t spi_periph)
{
    spi_parameter_struct spi_init_struct;       
       
        if(spi_periph == SPI0)
        {               
                /* SPI 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_8;               
                spi_init_struct.endian               = SPI_ENDIAN_MSB;               
               
                GD_SPI_CsInit(SPI0);
                GD_SPI_MspInit(SPI0);
                spi_init(SPI0, &spi_init_struct);                       
                spi_enable(SPI0);
        }
}

void GD_SPI_MspInit(uint32_t spi_periph)
{
        if(spi_periph == SPI0)
        {
                spi_disable(SPI0);
                spi_i2s_deinit(SPI0);
                rcu_periph_clock_enable(RCU_GPIOA);
                rcu_periph_clock_enable(RCU_GPIOB);
                /**SPI0 GPIO Configuration
                PA5     ------> SPI0_SCK
                PA6     ------> SPI0_MISO
                PB5     ------> SPI0_MOSI
                */

                /* SPI0 clock enable */
                rcu_periph_clock_enable(RCU_SPI0);

                /* SPI0 GPIO config */
                gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_5);
                gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);
                gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);

                gpio_af_set(GPIOA, GPIO_AF_5, GPIO_PIN_5 | GPIO_PIN_6);
                gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_6);
                gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_6);
        }
}

void GD_SPI_MspDeInit(uint32_t spi_periph)
{
        if(spi_periph == SPI0)
        {
                spi_disable(SPI0);
                spi_i2s_deinit(SPI0);
               
                /* Peripheral clock disable */               
                rcu_periph_clock_disable(RCU_SPI0);
                /**SPI0 GPIO Configuration
                PA5     ------> SPI0_SCK
                PA6     ------> SPI0_MISO
                PB5     ------> SPI0_MOSI
                */               

                /* SPI0 GPIO config */
                gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_5);
                gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
               
                gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_5 | GPIO_PIN_6);
                gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_6);               
        }
}

uint8_t SPI0_ReadWriteByte(uint8_t TxData)
{
    uint8_t retry = 0;
       
    while( spi_i2s_flag_get( SPI0, SPI_FLAG_TBE) == RESET )
    {
        retry++;
        if( retry > SPI_TIME_OUT )
        {
            return 0;
        }
    }
               
    spi_i2s_data_transmit( SPI0, TxData );
               
    retry = 0;
    while( spi_i2s_flag_get( SPI0, SPI_FLAG_RBNE) == RESET )
    {
        retry++;
        if( retry > SPI_TIME_OUT )
        {
            return 0;
        }       
    }
    return spi_i2s_data_receive( SPI0 );
}



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

219

帖子

1

粉丝