- 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_mode_set(GPIOA, GPIO_MODE_AF, 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_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_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
-
-
- // Configure DIO1
- // gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
- //gpio_input_bit_get(GPIOB, GPIO_PIN_2);
-
- // 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 ret_Data;
- //
- // while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE))
- // {//读取"SPI发送缓冲区空"标志
- // //等待SPI发送完成
- // }
- //
- // spi_i2s_data_transmit(SPI0,outData);
- // //将byte写入"SPI0数据寄存器"
- // while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE))
- // {//读取"SPI接收缓冲区非空"标志
- // //等待SPI接收完成
- // }
- //
- // ret_Data = spi_i2s_data_receive(SPI0);
- // //从"SPI数据寄存器"读取数据
- // return ret_Data;
- uint16_t tmp;
- while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET);
- spi_i2s_data_transmit(SPI0, outData);
- while(spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE) == RESET);
- tmp = spi_i2s_data_receive(SPI0);
- return ((uint8_t)(tmp & 0xff));
- }