/** ****************************************************************************** * 文件名 : PAN312x_HAL.c * 作者 : PAN312x RF Team * 版本 : V1.0.0 * 时间 : * 文件描述: * 该文件为PAN312x模块的硬件层,包含MCU与PAN312x模块的SPI配置,GPIO口初始化,以 *及用于PAN312x寄存器、FIFO读写操作; * 客户在使用模块时候需要移植该文件,保证各个函数名、函数形参不变的情况下 *根据自己的MCU平台修改函数内容,使各个功能块正常运行。硬件层占用资源如下: * *SPI:本例程使用STM32L1的SPI3进行与PAN312x模块通信。 *GPIO口:本例程使用的GPIO口详情如下: * PB15 ---> M0SI * PB13 ---> SCK * PB14 ---> MISO * PB10 ---> GPIO8(IRQ) * PB11 ---> GPIO0 * PB12 ---> CSN * PB5 ---> GPIO1 * PB6 ---> GPIO3(nRST) * PB7 ---> GPIO2 * PB8 ---> GPIO9 * PB10 ---> GPIO10 *******************************************************************************/ #include "base_types.h" #include "gpio.h" #include "board_gpio.h" #include "board_spi.h" #include "bsp.h" //#define PAN312x_SPIx_CSN_GPIO RADIO_NSS_PORT //#define PAN312x_SPIx_CSN_PIN RADIO_NSS_PIN #define PAN312x_CSN_0() RADIO_NSS_L() #define PAN312x_CSN_1() RADIO_NSS_H() #define PAN312x_DIO8_GPIO RADIO_IRQ_PORT #define PAN312x_DIO8_PIN RADIO_IRQ_PIN #define PAN312x_RESET_GPIO RADIO_RST_POT #define PAN312x_RESET_PIN RADIO_RST_PIN #define pan312x_hspi RADIO_SPI_CHx //-----------------------------GPIO-----------------------------// //该部分函数为系统用到的GPIO的初始化函数,用户根据自己的平台相应修改 //--------------------------------------------------------------// /** * @简介:Reset引脚初始化; * @参数:void; * @返回值:无 */ void PAN312x_Reset_Init(void) { // GPIO_InitTypeDef GPIO_InitStruct; // PAN312x_RESET_CLK_ENABLE(); // GPIO_InitStruct.Pin = PAN312x_RESET_PIN; // GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // GPIO_InitStruct.Pull = GPIO_PULLUP; // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // HAL_GPIO_Init(PAN312x_RESET_GPIO, &GPIO_InitStruct); Gpio_SetIO( PAN312x_RESET_GPIO,PAN312x_RESET_PIN ); } /** * @简介:该函数用于MCU对SPI对应IO口初始化; * @参数:无 * @返回值:无 */ void PAN312x_SPIGPIO_Init() { } /** * @简介:该函数用于MCU对SPI配置初始化; * @参数:无 * @返回值:无 */ void PAN312x_SPI_Init() { } /** * @简介:该函数为GPIO8输入初始化及中断、优先级配置; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INPUT() { } /** * @简介:该函数为GPIO8输入中断开启使能; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INTENABLE() { /* EXTI interrupt init*/ // HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(EXTI0_IRQn); EnableNvic(PORTA_IRQn, IrqLevel3, TRUE); } /** * @简介:该函数为DIO8输入中断关闭使能; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INTDISABLE() { // HAL_NVIC_DisableIRQ(EXTI15_10_IRQn); //HAL_NVIC_DisableIRQ(EXTI0_IRQn); EnableNvic(PORTA_IRQn, IrqLevel3, FALSE); } /** * @简介:该函数为DIO8输入状态获取; * @参数:无 * @返回值:DIO8状态"1"or"0" */ boolean_t PAN312x_DIO8_GetState() { boolean_t State; State = Gpio_GetInputIO(PAN312x_DIO8_GPIO, PAN312x_DIO8_PIN); return State; } /** * @简介:该函数为SX1208复位引脚NRST输出控制; * @参数:PinState为"1"表示输出高电平,"0"输出低电平; * @返回值:无 */ void PAN312x_Reset_OUTPUT(boolean_t PinState) { Gpio_WriteOutputIO(PAN312x_RESET_GPIO, PAN312x_RESET_PIN, PinState); } /** * @简介:将Reset引脚拉高; * @参数:void; * @返回值:无 */ void PAN312x_Reset_High(void) { Gpio_SetIO(PAN312x_RESET_GPIO, PAN312x_RESET_PIN); } /** * @简介:将Reset引脚拉低; * @参数:void; * @返回值:无 */ void PAN312x_Reset_Low(void) { Gpio_ClrIO(PAN312x_RESET_GPIO, PAN312x_RESET_PIN); } //-----------------------------SPI-----------------------------// //该部分函数为MCU对PAN312x模块SPI通信部分,包含SPI口及配置初始化 //--------------------------------------------------------------// /** * @简介:加锁,让SDK可重入 * @参数:无 * @返回值:无 */ void PAN312x_Lock(void) { __disable_irq(); } /** * @简介:解锁,让SDK可重入 * @参数:无 * @返回值:无 */ void PAN312x_Unlock(void) { __enable_irq(); } #if PAN312x_INTERFACE == PAN312x_IF_SPI /** * @简介:开始PAN312x的数据收发,即SPI接口拉低CS * @参数:无 * @返回值:无 */ void PAN312x_DataBegin(void) { PAN312x_CSN_0(); } /** * @简介:结束PAN312x的数据收发,如果接口为SPI则表示拉高CS,如果接口为I2C则表示发送结束信号 * @参数:无 * @返回值:无 */ void PAN312x_DataEnd(void) { PAN312x_CSN_1(); } /** * @简介:向PAN312x写入一段数据,如果接口为SPI则不包括CS操作部分 * @参数:buf - 数据缓冲区 * len - 数据长度 * @返回值:写入的数据长度,或者错误值(负数) */ int PAN312x_DataWrite(const void* buf, int len) { // HAL_SPI_Transmit(&pan312x_hspi, (void*)buf, len, 1000); for(int i=0;i