GD32450i-EVAL学习笔记 4 - SPI Master

目录

1. GPIO初始化

2. 使能RCU

3. 初始化SPI端口

4. 读写


GD32F450一共支持6组SPI,其中仅SPI1和SPI2支持全双工模式的主从操作,仅SPI5支持QSPI主操作。

SPI1和SPI2的时钟源是APB1,SPI0、SPI3、SPI4和SPI5的时钟源是APB2。因为APB1和APB2的最大频率为50M和100M,所以,SPI1和SPI2的最大频率是25M,而其他SPI的最大频率可以到50M。

1. GPIO初始化

以SPI5为例

rcu_periph_clock_enable(RCU_GPIOG);
//G13: SCK, G12: MISO, G14: MOSI, G10: IO2, G11: IO3
gpio_af_set(GPIOG, GPIO_AF_5, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14);
gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14);
gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14);

2. 使能RCU

rcu_periph_clock_enable(RCU_SPI5);

3. 初始化SPI端口

void spimCfg(uint32_t SPIx, uint16_t prescaler)
{
    spi_parameter_struct spi_init_struct;
    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             = prescaler;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPIx, &spi_init_struct);
    
    /* set crc polynomial */
    spi_crc_polynomial_set(SPIx, 7);

    /* enable */
    spi_enable(SPIx);
}

4. 读写

void spimTransferBytes(uint8_t port, uint8_t* wrBuf, uint8_t* rdBuf, uint16_t len)
{
    uint16_t i;
    uint32_t SPIx;
    if(len == 0 || port >= HW_SPI_MAX)
        return;
    SPIx = spimGroup[port];
    while(0 == (SPI_STAT(SPIx) & SPI_FLAG_TBE));
    for(i = 0; i < len; i++)
    {
        SPI_DATA(SPIx) = (wrBuf != NULL) ? wrBuf[i] : 0xff;
        // Wait to receive a byte  
        while((SPI_STAT(SPIx) & SPI_FLAG_RBNE) == 0);
        if(rdBuf != NULL)
            rdBuf[i] = (uint8_t)SPI_DATA(SPIx);
        else
            SPI_DATA(SPIx);
    }
}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值