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_4 | GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
//gpio_mode_set (GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
spi_parameter_struct spi_init_struct;
spi_i2s_deinit(SPI_INTERFACE);
spi_struct_para_init(&spi_init_struct);
/* SPI0 parameter config */
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX; //SPI在全双工通讯中接收/发送数据
spi_init_struct.device_mode = SPI_MASTER;; //SPI为主机模式且SWNSS=1
spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;; //SPI使用8位数据帧格式
spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; //在SPI为空闲状态时,CLK引脚拉低,且"在第1个时钟跳变沿时开始采集第1位数据"
spi_init_struct.nss = SPI_NSS_SOFT; //使用NSS软件模式:NSS电平取决于SWNSS位;
spi_init_struct.prescale = SPI_PSC_8 ; //SPI时钟预分频器值为8
spi_init_struct.endian = SPI_ENDIAN_MSB;; //先发送最高位
spi_init(SPI_INTERFACE, &spi_init_struct); //使用spi_init_struct结构参数初始化SPI0
spi_enable(SPI_INTERFACE); //使能SPI0
//spi_i2s_interrupt_enable(SPI0, SPI_I2S_INT_TBE);
//spi_i2s_interrupt_enable(SPI0, SPI_I2S_INT_RBNE);
//nvic_irq_enable(SPI0_IRQn,1);
}
void SX1276HALInit( void )
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOB);
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_set(GPIOB,GPIO_PIN_11);
// Configure DIO0
//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);
// Configure DIO1
//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);
// Configure DIO3
//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);
// Configure DIO4
//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);}
}
//spi发送和接收函数
uint8_t SpiInOut(uint8_t outData )
{
uint8_t return_tmp = 0x00;
/* loop while data register in not emplty */
while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));
/* send byte through the SPI1 peripheral */
spi_i2s_data_transmit(SPI0,outData);
//printf("%d\n",outData);
/* wait to receive a byte */
while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE));
/* return the byte read from the SPI bus */
return_tmp = spi_i2s_data_receive(SPI0); //此处读不到数据
return ((uint8_t)(return_tmp & 0xff));
}