gd32f330spi主从配置
时间: 2023-12-22 13:04:51 浏览: 36
以下是gd32f330spi主从配置的示例代码:
1.主机配置
```c
#include "gd32f3x0_spi.h"
#include "gd32f3x0_gpio.h"
#define SPI0_SCK_PIN GPIO_PIN_10
#define SPI0_MISO_PIN GPIO_PIN_11
#define SPI0_MOSI_PIN GPIO_PIN_12
#define SPI0_NSS_PIN GPIO_PIN_13
#define SPI0_PORT GPIOA
void spi_master_init(void)
{
spi_parameter_struct spi_init_struct;
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_SPI0);
gpio_init(SPI0_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, SPI0_SCK_PIN | SPI0_MOSI_PIN);
gpio_init(SPI0_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, SPI0_MISO_PIN);
gpio_init(SPI0_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SPI0_NSS_PIN);
spi_struct_para_init(&spi_init_struct);
spi_init_struct.device_mode = SPI_MASTER;
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
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;
spi_init(SPI0, &spi_init_struct);
spi_enable(SPI0);
}
uint8_t spi_master_send_receive(uint8_t data)
{
while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
spi_i2s_data_transmit(SPI0, data);
while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE));
return spi_i2s_data_receive(SPI0);
}
```
2.从机配置
```c
#include "gd32f3x0_spi.h"
#include "gd32f3x0_gpio.h"
#define SPI0_SCK_PIN GPIO_PIN_10
#define SPI0_MISO_PIN GPIO_PIN_11
#define SPI0_MOSI_PIN GPIO_PIN_12
#define SPI0_NSS_PIN GPIO_PIN_13
#define SPI0_PORT GPIOA
void spi_slave_init(void)
{
spi_parameter_struct spi_init_struct;
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_SPI0);
gpio_init(SPI0_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, SPI0_SCK_PIN | SPI0_MOSI_PIN);
gpio_init(SPI0_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, SPI0_MISO_PIN);
gpio_init(SPI0_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SPI0_NSS_PIN);
spi_struct_para_init(&spi_init_struct);
spi_init_struct.device_mode = SPI_SLAVE;
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
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;
spi_init(SPI0, &spi_init_struct);
spi_enable(SPI0);
}
uint8_t spi_slave_send_receive(uint8_t data)
{
while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
spi_i2s_data_transmit(SPI0, data);
while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE));
return spi_i2s_data_receive(SPI0);
}
```