GD32E230C
使用GD32E230C8T6 SPI 使用的过程
SPI配置
#define RESET_IOPORT GPIOB
#define RESET_PIN GPIO_PIN_11
/*!
* SX1276 SPI definitions
*/
#define NSS_IOPORT GPIOA
#define NSS_PIN GPIO_PIN_4
#define SPI_INTERFACE SPI0
#define SPI_CLK RCU_SPI0
#define SPI_PIN_SCK_PORT GPIOA
#define SPI_PIN_SCK_PORT_CLK RCU_GPIOA
#define SPI_PIN_SCK GPIO_PIN_5
#define SPI_PIN_MISO_PORT GPIOA
#define SPI_PIN_MISO_PORT_CLK RCU_GPIOA
#define SPI_PIN_MISO GPIO_PIN_6
#define SPI_PIN_MOSI_PORT GPIOA
#define SPI_PIN_MOSI_PORT_CLK RCU_GPIOA
#define SPI_PIN_MOSI GPIO_PIN_7
/*!
* SX1276 DIO pins I/O definitions
*/
#define DIO0_IOPORT GPIOB
#define DIO0_PIN GPIO_PIN_0
static void SpiInit( void )
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(SPI_CLK); //PA5,PA6,PA7
/* SPI0 GPIO config: NSS/PA4 SCK/PA5, MISO/PA6, MOSI/PA7 */
gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_5| GPIO_PIN_7 | GPIO_PIN_6 );
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_7| GPIO_PIN_6);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7| GPIO_PIN_6);
//坑在这里 MISO的GPIO也要配置成AF模式,这个和F10x系列是不一样的
//之前按照F10x系列配置的输入 导致接收一直是0xff
// gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_7);
// gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
// gpio_mode_set (GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
spi_parameter_struct spi_init_struct;
/* deinitilize SPI and the parameters */
spi_i2s_deinit(SPI0);
spi_struct_para_init(&spi_init_struct);
/* 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_8;
spi_init_struct.endian = SPI_ENDIAN_MSB;
spi_init(SPI0, &spi_init_struct);
spi_crc_polynomial_set(SPI0,7);
spi_enable(SPI_INTERFACE); //使能SPI0
}
void SX1276HALInit( void )
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
//CS片选默认拉高
gpio_bit_set(GPIOA,GPIO_PIN_4);
SpiInit();
//配置复位引脚
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
gpio_bit_reset(GPIOB,GPIO_PIN_11);
// Configure DIO0
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
//spi发送和接收函数
uint8_t SpiInOut(uint8_t outData )
{
while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE))
;
spi_i2s_data_transmit(SPI0, outData);
while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE))
;
return ((uint8_t)spi_i2s_data_receive(SPI0));
}
至此调试基本完成