Files
LaserTracing/source/inc/bsp.h
T
2026-04-23 14:02:03 +08:00

272 lines
12 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef _BSP_H
#define _BSP_H
#include <stdint.h>
#include <stdbool.h>
#include <time.h>
#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 1 //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