#ifndef _BSP_H #define _BSP_H #include #include #include #include "gpio.h" #include "spi.h" /*模块启用与关闭*/ #define USE_DEBUG 1 //调试串口选择,0、关闭,1、启用 #define USE_VBAT_AD 1 //电池电压AD获取选择,0、关闭,1、启用 #define USE_WDT 1 //看门狗选择,0、关闭,1启用 #define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用 #define USE_LED 1 //状态灯选择,0、关闭,1、启用 #define USE_RTC 1 //RTC时钟开关,0、关闭,1、开启 #define USE_LPUART0 1 //LPUART0开关,0、关闭,1、启用 #define USE_UART0 1 //UART0开关,0、关闭,1、启用 #define USE_UART1 0 //UART0开关,0、关闭,1、启用 #define USE_I2C0 1 //I2C0开关,0、关闭,1、启用 #define USE_I2C1 1 //I2C1开关,0、关闭,1、启用 #define USE_SPI0 1 //SPI1开关,0、关闭,1、启用 #define USE_SPI1 0 //SPI1开关,0、关闭,1、启用 #define USE_BOOTLOADER 1 //BOOTLOADER开关,0、关闭,1、启用 #define USE_LORA_CH 0 //0为测试通道 //<<---------------------------- MCU -------------------------------->> //< UART0 #define UART0_TX_PORT GpioPortA #define UART0_TX_PIN GpioPin9 #define UART0_TX_AF GpioAf1 #define UART0_RX_PORT GpioPortA #define UART0_RX_PIN GpioPin10 #define UART0_RX_AF GpioAf1 //< UART1 #define UART1_TX_PORT GpioPortF #define UART1_TX_PIN GpioPin0 #define UART1_TX_AF GpioAf3 #define UART1_RX_PORT GpioPortF #define UART1_RX_PIN GpioPin1 #define UART1_RX_AF GpioAf3 //< 低功耗串口 #define LPUart0_TxPortx GpioPortB //低功耗串口0通道 #define LPUART0_TxPinx GpioPin10 //配置PB10为LPUART0_Tx #define LPUART0_TX_AF GpioAf4 #define LPUart0_RxPortx GpioPortB //低功耗串口0通道 #define LPUART0_RxPinx GpioPin11 //配置PB11为LPUART0_Rx #define LPUART0_RX_AF GpioAf3 //< SPI0 #define SPI0_NSS_PORTx GpioPortA //NSSIO口 #define SPI0_NSS_PINx GpioPin15 //配置PA04为NSS #define SET_SPI0_NSS() Gpio_SetIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉高 #define CLR_SPI0_NSS() Gpio_ClrIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉低 #define SPI0_NSS_AF GpioAf1 #define SPI0_SCK_PORTx GpioPortB //SCKIO口 #define SPI0_SCK_PINx GpioPin3 //配置PA05为SCK #define SET_SPI0_SCK() Gpio_SetIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉高 #define CLR_SPI0_SCK() Gpio_ClrIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉低 #define SPI0_SCK_AF GpioAf1 #define SPI0_MISO_PORTx GpioPortB //MISOIO口 #define SPI0_MISO_PINx GpioPin4 //配置PA06为MISO #define SET_SPI0_MISO() Gpio_SetIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉高 #define CLR_SPI0_MISO() Gpio_ClrIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉低 #define SPI0_MISO_AF GpioAf1 #define SPI0_MOSI_PORTx GpioPortB //MOSIIO口 #define SPI0_MOSI_PINx GpioPin5 //配置PA07为MOSI #define SET_SPI0_MOSI() Gpio_SetIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉高 #define CLR_SPI0_MOSI() Gpio_ClrIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉低 #define SPI0_MOSI_AF GpioAf1 //< SPI1 #define SPI1_NSS_PORTx GpioPortB //NSSIO口 #define SPI1_NSS_PINx GpioPin12 //配置PB12为NSS #define SET_SPI1_NSS() Gpio_SetIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉高 #define CLR_SPI1_NSS() Gpio_ClrIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉低 #define SPI1_NSS_AF GpioAf1 #define SPI1_SCK_PORTx GpioPortB //SCKIO口 #define SPI1_SCK_PINx GpioPin3 //配置PB13为SCK #define SET_SPI1_SCK() Gpio_SetIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉高 #define CLR_SPI1_SCK() Gpio_ClrIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉低 #define SPI1_SCK_AF GpioAf1 #define SPI1_MISO_PORTx GpioPortB //MISOIO口 #define SPI1_MISO_PINx GpioPin4 //配置PB14为MISO #define SET_SPI1_MISO() Gpio_SetIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉高 #define CLR_SPI1_MISO() Gpio_ClrIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉低 #define SPI1_MISO_AF GpioAf1 #define SPI1_MOSI_PORTx GpioPortB //MOSIIO口 #define SPI1_MOSI_PINx GpioPin5 //配置PB15为MOSI #define SET_SPI1_MOSI() Gpio_SetIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉高 #define CLR_SPI1_MOSI() Gpio_ClrIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉低 #define SPI1_MOSI_AF GpioAf1 //< I2C0 #define I2C0_SCL_PORTx GpioPortF //SCL的GPIO通道 #define I2C0_SCL_PINx GpioPin1 //SCL的通道位 #define I2C0_SCL_AF GpioAf1 #define SET_I2C0_SCL() Gpio_SetIO(I2C0_SCL_PORTx, I2C0_SCL_PINx) #define CLR_I2C0_SCL() Gpio_ClrIO(I2C0_SCL_PORTx, I2C0_SCL_PINx) #define I2C0_SDA_PORTx GpioPortF //SDA的GPIO通道 #define I2C0_SDA_PINx GpioPin0 //SDA的通道位 #define I2C0_SDA_AF GpioAf1 #define SET_I2C0_SDA() Gpio_SetIO(I2C0_SDA_PORTx, I2C0_SDA_PINx) #define CLR_I2C0_SDA() Gpio_ClrIO(I2C0_SDA_PORTx, I2C0_SDA_PINx) //< I2C1 #define I2C1_SCL_PORTx GpioPortA //SCL的GPIO通道 #define I2C1_SCL_PINx GpioPin11 //SCL的通道位 #define I2C1_SCL_AF GpioAf3 #define SET_I2C1_SCL() Gpio_SetIO(I2C1_SCL_PORTx, I2C1_SCL_PINx) #define CLR_I2C1_SCL() Gpio_ClrIO(I2C1_SCL_PORTx, I2C1_SCL_PINx) #define I2C1_SDA_PORTx GpioPortA //SDA的GPIO通道 #define I2C1_SDA_PINx GpioPin12 //SDA的通道位 #define I2C1_SDA_AF GpioAf3 #define SET_I2C1_SDA() Gpio_SetIO(I2C1_SDA_PORTx, I2C1_SDA_PINx) #define CLR_I2C1_SDA() Gpio_ClrIO(I2C1_SDA_PORTx, I2C1_SDA_PINx) //<<---------------------------- 485 -------------------------------->> //< LPUart0 #define RS485_CTRL_PORTx GpioPortB //RS485_1通信控制 #define RS485_CTRL_PINx GpioPin1 //配置PB02为RS485_1_CTRL #define RS485_CTRL_TX() Gpio_SetIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉高发送 #define RS485_CTRL_RX() Gpio_ClrIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉低接收 //<<---------------------------- LED -------------------------------->> //< LED_State #define LED_STATE_PORTx GpioPortF //状态指示灯IO通道 #define LED_STATE_PINx GpioPin7 //状态指示灯脚位 #define LED_ON() Gpio_SetIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯亮 #define LED_OFF() Gpio_ClrIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯灭 //<<---------------------------- LORA --> SPI0 -------------------------------->> //< LORA --> DIO0 #define LORA_DIO0_PORTx GpioPortB //LORA_DIO0口 #define LORA_DIO0_PINx GpioPin7 //配置PA01为DIO0 #define GET_LORA_DIO0() Gpio_GetInputIO(LORA_DIO0_PORTx, LORA_DIO0_PINx) //获取LORA_DIO0电平状态 //< LORA --> DIO1 #define LORA_DIO1_PORTx GpioPortB //LORA_DIO0口 #define LORA_DIO1_PINx GpioPin0 //配置PA01为DIO0 #define GET_LORA_DIO1() Gpio_GetInputIO(LORA_DIO1_PORTx, LORA_DIO1_PINx) //获取LORA_DIO0电平状态 //< LORA --> RST #define LORA_RST_PORTx GpioPortB //LORA_RST口 #define LORA_RST_PINx GpioPin6 //配置PA00为RST #define SET_LORA_RST() Gpio_SetIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉高 #define CLR_LORA_RST() Gpio_ClrIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉低 //<<---------------------------- LSM6DSLTR --> I2C0 -------------------------------->> //< ACC_INT1 #define LSM6DSLTR_INT1_PORTx GpioPortC //LSM6DSLTR中断1IO通道 #define LSM6DSLTR_INT1_PINx GpioPin15 //配置PB01为ACC_INT1 #define GET_LSM6DSLTR_INT1() Gpio_GetInputIO(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx) //获取ACC_INT1电平状态 //< ACC_INT2 #define LSM6DSLTR_INT2_PORTx GpioPortC //LSM6DSLTR中断1IO通道 #define LSM6DSLTR_INT2_PINx GpioPin13 //配置PA08为ACC_INT2 #define GET_LSM6DSLTR_INT2() Gpio_GetInputIO(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx) //获取ACC_INT2电平状态 //<<---------------------------- MMC5983MA --> I2C0 -------------------------------->> //< MMC0_INT #define MMC5983MA_INT_PORTx GpioPortC //MMC5983MA中断IO通道 #define MMC5983MA_INT_PINx GpioPin14 //配置PB00为MMC_INT #define GET_MMC5983MA_INT() Gpio_GetInputIO(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx) //获取ACC_INT2电平状态 //<<---------------------------- LASER -------------------------------->> //< LASER1 #define LASER1_ON_OFF_PORTx GpioPortB #define LASER1_ON_OFF_PINx GpioPin14 #define LASER1_ON() Gpio_SetIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉高 #define LASER1_OFF() Gpio_ClrIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉低 //< LASER2 #define LASER2_ON_OFF_PORTx GpioPortB #define LASER2_ON_OFF_PINx GpioPin13 #define LASER2_ON() Gpio_SetIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉高 #define LASER2_OFF() Gpio_ClrIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉低 //< LASER3 #define LASER3_ON_OFF_PORTx GpioPortB #define LASER3_ON_OFF_PINx GpioPin12 #define LASER3_ON() Gpio_SetIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉高 #define LASER3_OFF() Gpio_ClrIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉低 //<<------------------------------ ADC ---------------------------------->> #define AD_ON_OFF_PORTx GpioPortA #define AD_ON_OFF_PINx GpioPin3 #define AD_ON() Gpio_SetIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx) //LORA复位脚拉高 #define AD_OFF() Gpio_ClrIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx) //LORA复位脚拉低 #define VBAT_PORTx GpioPortA #define VBAT_PINx GpioPin4 #define VBAT_ADC_PORTx AdcExInputCH4//采样通道 #define VBAT_CAL 3.5 //电池电压校准 //< 电池电压 extern float VBAT_8V4; extern uint8_t VBAT_Percentage; typedef struct { uint16_t CollectTime; //数据采集时间间隔,设置范围30*N秒,1<=N<=240,(默认5分钟,N=10) uint16_t ReportInterval; //上报时间间隔,设置范围,30*N秒,10<=N<=1440(默认20分钟,N=40) uint8_t ERInterval; //紧急上报时间间隔,设置范围,30*N秒,2<=N<=10(默认2分钟,N=4) uint8_t ERTime; //紧急上报时长,设置范围,30*N秒,20<=N<=240(默认20分钟,N=40) uint32_t TimeStamp; //网关返回RTC时间戳 }__attribute__((packed))LayoutPara_t,*LayoutPara;//上位机下发的配置参数 typedef struct { int16_t PitchZero; //俯仰角零点 int16_t RollZero; //横滚角零点 int16_t YawZero; //偏航角零点 }__attribute__ ((packed))CalibratePara_t, *CalibratePara; typedef struct { LayoutPara_t Layout; CalibratePara_t CaliPara; uint32_t RS485Addr; //本机485地址 uint32_t FactoryFlag;//出厂标志位 }AppPara_T, *pAppPara; #define APP_PARA_ADDRESS (0x0001FE00) #define SAVE_APP_PARA(addr) FlashWrite(APP_PARA_ADDRESS, addr, sizeof(App.Para) / 4) #define READ_APP_PARA(addr) FlashRead(APP_PARA_ADDRESS, addr, sizeof(App.Para) / 4) void BspInit(void); void EnterDeepSleep(void); void DBGUartSendByte(uint8_t sData); void DBGUartSend(uint8_t *sData, int sLen); void LPUart0SendArray(uint8_t *sData, uint8_t sLen); void Uart1SendArray(uint8_t *sData, uint8_t sLen); uint32_t GetSysTick(void); void delay_ms(uint32_t ms); void Delay(uint32_t time); void RTCInit(uint8_t sec); void LPTimer0_ON(uint16_t _100ms); void LPTimer0_OFF(void); void WakeUpInit(void); void FeedDog(void); uint32_t TimeTs(void); void TimeShow(uint32_t dwStamp); void TimeSync(time_t ts); void PrintfMess(void); void SystemReset(void); uint8_t Spi0SendReceive(uint8_t sData); uint8_t Spi1SendReceive(uint8_t sData); void FlashWrite(uint32_t Addr, uint32_t *wData, int wLen); void FlashRead(uint32_t Addr, uint32_t *rData, int rLen); void ADCLoopHandler(void); void LORA_RxCallBack(uint8_t *rBuff, uint8_t rlen); void GlobalIntEnable(void); void GlobalIntDisable(void); void LORAIntEnable(void); void LORAIntDisable(void); void ACCandMMCIntEnable(void); void ACCandMMCIntDisable(void); #endif