初始版本
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#ifndef __ALGORITHM_H
|
||||
#define __ALGORITHM_H
|
||||
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define CRC16_BASE 0xA001
|
||||
|
||||
|
||||
// 峰值谷值检查结果结构体
|
||||
typedef struct {
|
||||
bool peaks_positive; // 所有峰值是否大于0
|
||||
bool valleys_negative; // 所有谷值是否小于0
|
||||
int peak_count; // 检测到的峰值数量
|
||||
int valley_count; // 检测到的谷值数量
|
||||
} PeakValleyCheck;
|
||||
|
||||
// 趋势分析结果结构体
|
||||
typedef struct {
|
||||
double slope; // 线性斜率
|
||||
int sign_changes; // 符号变化次数
|
||||
char trend_type; // 趋势类型
|
||||
char steepness; // 陡峭度
|
||||
} TrendResult;
|
||||
|
||||
PeakValleyCheck check_peaks_valleys(int data[], int length);
|
||||
TrendResult analyze_trend(int data[], int length);
|
||||
float calculateAverage(int *arr, int size);
|
||||
double slope(int32_t *x_data, int32_t *y_data, int n) ;
|
||||
long long power(int base, unsigned int exponent);
|
||||
int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt);
|
||||
int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt);
|
||||
uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt);
|
||||
float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt);
|
||||
uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt);
|
||||
int AverageFilter_32t(int32_t *Data, uint8_t Cnt);
|
||||
void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt);
|
||||
float get_K(uint8_t count , int32_t *dataCol_X, int32_t *dataRow_Y);
|
||||
int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT);
|
||||
void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue);
|
||||
void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue);
|
||||
bool count_most_greater(int32_t *arr, uint8_t size, int32_t target);
|
||||
bool count_greater(int32_t *arr, uint8_t size, int32_t target);
|
||||
bool count_smaller(int32_t *arr, uint8_t size, int32_t target);
|
||||
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length);
|
||||
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen);
|
||||
bool isAllZero(uint8_t *arr, int size);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,290 @@
|
||||
/* 传感器通用通讯协议V1.0*/
|
||||
|
||||
#ifndef __SGCP_H
|
||||
#define __SGCP_H
|
||||
#include "bsp.h"
|
||||
|
||||
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
|
||||
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
|
||||
#define LocalDataLen sizeof(SGCP.DevData.LaserTracing)//本机设备数据长度
|
||||
#define LocalType LASER_TRACING //本机设备类型
|
||||
#define CommWay LORA //本机通讯方式
|
||||
#define DeviceSign MASTER //本机设备标志
|
||||
#define AddNumber (0x000017 + DeviceSign)//本机地址编号,数字部分对应唯一地址编号
|
||||
//09 00 01 00 00 00
|
||||
|
||||
typedef struct {//网关与主设备固定帧
|
||||
uint8_t Header;
|
||||
uint8_t GWAddr[6];
|
||||
uint8_t MDAddr[6];
|
||||
uint8_t Cmd;
|
||||
uint16_t PayloadLen;
|
||||
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
|
||||
|
||||
typedef struct {//主设备与子设备固定帧
|
||||
uint8_t Header;
|
||||
uint8_t Addr;
|
||||
uint8_t Cmd;
|
||||
uint8_t PayloadLen;
|
||||
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
|
||||
|
||||
typedef struct {//内部指令固定帧
|
||||
uint8_t Header;
|
||||
uint8_t MAC[6];
|
||||
uint8_t Cmd;
|
||||
uint8_t PayloadLen;
|
||||
}__attribute__ ((packed))InsideFrameHeader_t,*InsideFrameHeader;
|
||||
|
||||
typedef struct {//主设备固定包头
|
||||
uint8_t BatLevel; //电池电量
|
||||
int8_t RSSI; //信号强度
|
||||
int8_t Nsr; //信噪比
|
||||
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
||||
|
||||
typedef struct {//0x0006 三维连续变形
|
||||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
||||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
||||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||||
}__attribute__ ((packed))ContDefor3D_T,*ContDefor3DDp;
|
||||
|
||||
typedef struct {//0x0007 通讯单元
|
||||
MasterDev_T MasterDev;
|
||||
}__attribute__ ((packed))CommUnit_T,*CommUnitDp;
|
||||
|
||||
typedef struct {//0x0008 三维应力
|
||||
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
|
||||
int16_t RollAngle; //横滚角(范围±900)单位0.1°
|
||||
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
|
||||
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
|
||||
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
|
||||
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
|
||||
}__attribute__ ((packed))Force3D_T,*Force3DDp;
|
||||
|
||||
typedef struct {//0x0009 激光示踪
|
||||
MasterDev_T MasterDev;
|
||||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
||||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
||||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||||
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
|
||||
|
||||
typedef struct {//0x000E 裂缝仪
|
||||
int16_t XwiseDist; //横向位移量(范围0~150mm)
|
||||
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
|
||||
int16_t RotationDist; //旋转位移距离(范围0~150mm)
|
||||
}__attribute__ ((packed))Crack_T,*CrackDp;
|
||||
|
||||
typedef struct {
|
||||
ContDefor3D_T ContDefor3D;
|
||||
CommUnit_T CommUnit;
|
||||
Force3D_T Force3D;
|
||||
Crack_T Crack;
|
||||
LaserTracing_T LaserTracing;
|
||||
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
|
||||
|
||||
/*接收子设备数据状态机*/
|
||||
typedef enum {
|
||||
SUB_STATUS_IDLE,
|
||||
SUB_STATUS_BROADCAST_CALI,
|
||||
SUB_STATUS_READMASTER_DATA,
|
||||
SUB_STATUS_READSUBSET_DATA,
|
||||
SUB_STATUS_WAIT_READSUBSET,
|
||||
SUB_STATUS_MASTER_QUERY,
|
||||
SUB_STATUS_SUBSET_QUERY,
|
||||
SUB_STATUS_WAIT_SUBSET_QUERY,
|
||||
SUB_STATUS_BROADCAST_SET_COLTIME,
|
||||
SUB_STATUS_BROADCAST_SYNC_TIME,
|
||||
}SubStatus_m;
|
||||
|
||||
/*接收网关数据状态机*/
|
||||
typedef enum {
|
||||
GW_STATUS_IDLE,
|
||||
GW_STATUS_WAIT_SUBIDLE,
|
||||
GW_STATUS_LOGIN,
|
||||
GW_STATUS_WAIT_LOGIN,
|
||||
GW_STATUS_CALI,
|
||||
GW_STATUS_READ_SENSOR,
|
||||
GW_STATUS_SET_COL_TIME,
|
||||
GW_STATUS_SYNC_TIME,
|
||||
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
|
||||
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
|
||||
GW_STATUS_LASER_STARES,//激光状态回应
|
||||
}GWStatus_m;
|
||||
/*接收主设备数据状态机*/
|
||||
typedef enum {
|
||||
MAS_STATUS_IDLE,
|
||||
MAS_STATUS_CALI,
|
||||
MAS_STATUS_READ_SENSOR,
|
||||
MAS_STATUS_DEVICE_INQUIRE,
|
||||
MAS_STATUS_SET_COL_TIME,
|
||||
MAS_STATUS_SYNC_TIME,
|
||||
}MasStatus_m;
|
||||
/*内部指令数据状态机*/
|
||||
typedef enum {
|
||||
IN_STATUS_IDLE,
|
||||
IN_STATUS_UPDATE,
|
||||
IN_STATUS_ALTER_485ADDR,
|
||||
}InStatus_m;
|
||||
/*网关到主设备命令集*/
|
||||
typedef enum {
|
||||
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
|
||||
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
|
||||
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
|
||||
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||||
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||||
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
|
||||
}GWTOMD_CMD_M;
|
||||
|
||||
/*主设备到子设备命令集*/
|
||||
typedef enum {
|
||||
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
|
||||
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
|
||||
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
|
||||
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||||
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||||
}MDTOSD_CMD_M;
|
||||
/*内部指令命令集*/
|
||||
typedef enum {
|
||||
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
|
||||
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
|
||||
}INSIDE_CMD_M;
|
||||
/*设备类型*/
|
||||
typedef enum {
|
||||
NUL, //0x0000 空设备
|
||||
FORCE_6D, //0x0001 六维应力
|
||||
OSMOTIC_PRESSURE, //0x0002 渗透压
|
||||
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
||||
DIELECTRIC_MASS, //0x0004 介电质普
|
||||
_0x0005, //0x0005 保留
|
||||
CONT_DEFOR_3D, //0x0006 三维连续变形
|
||||
COMM_UNIT, //0x0007 通讯单元
|
||||
FORCE_3D, //0x0008 三维应力
|
||||
LASER_TRACING, //0x0009 激光示踪
|
||||
_0x000A, //0x000A 保留
|
||||
_0x000B, //0x000B 保留
|
||||
_0x000C, //0x000C 保留
|
||||
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
||||
CRACK_DETECTION, //0x000E 裂缝仪
|
||||
_0x000F, //0x000F 保留
|
||||
ATTITUDE_MONITOR, //0x0010 姿态检测
|
||||
LASER_DISPLACE, //0x0011 激光位移
|
||||
REBAR_STRESS, //0x0012 钢筋应力
|
||||
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
||||
SURFACE_STRESS, //0x0014 表面应力
|
||||
PRESSURE, //0x0015 压力
|
||||
MICROWAVE_DISPLACE, //0x0016 微波测距
|
||||
}DEVICE_TYPE_M;
|
||||
/*通讯方式*/
|
||||
typedef enum {
|
||||
LORA = 0x01, //0x01 LORA通讯
|
||||
RS485 = 0x02, //0x02 RS485通讯
|
||||
RS232 = 0x03, //0x03 RS232通讯
|
||||
CAN = 0x04, //0x04 CAN通讯
|
||||
_4G = 0x05, //0x05 _4G通讯
|
||||
BLE = 0x06, //0x06 BLE通讯
|
||||
WIFI = 0x07, //0x07 WIFI通讯
|
||||
UART = 0x08, //0x08 UART通讯
|
||||
}COMM_WAY_M;
|
||||
/*设备标志*/
|
||||
typedef enum {
|
||||
MASTER = 0x000000, //0x000000 主设备
|
||||
SUBSET = 0x800000, //0x800000 子设备
|
||||
}DEVICE_SIGN_M;
|
||||
typedef struct {
|
||||
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
|
||||
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
|
||||
__IO uint16_t rPayLen;
|
||||
__IO bool HeaderFrame;
|
||||
__IO uint8_t RxLen;
|
||||
uint8_t RxBuff[256];
|
||||
}GWTOMD_Rx_T;
|
||||
|
||||
typedef struct {
|
||||
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
|
||||
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
|
||||
__IO uint8_t rPayLen;
|
||||
__IO bool HeaderFrame;
|
||||
__IO uint8_t RxLen;
|
||||
uint8_t RxBuff[256];
|
||||
}MDTOSD_Rx_T;
|
||||
|
||||
typedef struct {
|
||||
uint32_t LpUart0Delay1mSCnt;
|
||||
uint32_t LoraDelay1mSCnt;
|
||||
uint32_t Uart1Delay1mSCnt;
|
||||
uint32_t GW1mSDelayCnt;
|
||||
uint32_t SD1mSDelayCnt;
|
||||
uint32_t In1mSDelayCnt;
|
||||
|
||||
GWTOMD_Rx_T GWRS485Rx;
|
||||
uint8_t GatewayBuffLen;
|
||||
uint8_t GatewayBuff[256];
|
||||
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
|
||||
|
||||
MDTOSD_Rx_T SDRS485Rx;
|
||||
uint8_t SubsetBuffLen;
|
||||
uint8_t SubsetBuff[256];
|
||||
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
|
||||
|
||||
uint8_t InsidePayLen;
|
||||
uint8_t InsideBuffLen;
|
||||
uint8_t InsideBuff[256];
|
||||
uint8_t InsidePay[256];
|
||||
|
||||
SubStatus_m SubStatus;
|
||||
SubStatus_m NextSubStatus;
|
||||
GWStatus_m GWStatus;
|
||||
GWStatus_m NextGWStatus;
|
||||
MasStatus_m MasStatus;
|
||||
InStatus_m InStatus;
|
||||
|
||||
DeviceData_T DevData;
|
||||
|
||||
bool SubsetCaliOk; //子设备校准标志位
|
||||
bool MasterCaliOk; //主设备标校标志位
|
||||
|
||||
uint8_t ReadDataAdd; //获取数据地址
|
||||
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
|
||||
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
|
||||
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
|
||||
bool SubsetReadDataOk; //子设备读取数据成功标志位
|
||||
bool DeviceReadDataOk; //设备读取数据完成标志位
|
||||
|
||||
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
|
||||
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
|
||||
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
|
||||
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
|
||||
bool SubsetMACOk; //在线子设备MAC获取成功标志位
|
||||
bool DeviceMACOk; //在线设备获取完成标志位
|
||||
|
||||
bool CollTimeSetOk; //采集时间设置成功标志位
|
||||
uint8_t CollTimeAdd; //设置采集时间地址
|
||||
|
||||
bool SyncTimeOk; //时间同步成功标志位
|
||||
uint8_t SyncTimeAdd; //时间同步设备地址
|
||||
|
||||
bool BroadCmd; //广播命令
|
||||
|
||||
bool LoginOk; //注册成功标志位
|
||||
bool LoginMess;
|
||||
|
||||
bool UploadOk; //上传成功标志位
|
||||
bool UploadMess;
|
||||
|
||||
bool Gateway_IRQ_Status; //网关接收中断
|
||||
bool Subset_IRQ_Status; //子设备接收中断
|
||||
bool TimingAcquisition; //采集传感器数据
|
||||
|
||||
/**激光示踪私有**/
|
||||
bool LaserOnOff; //打开与关闭激光标志位
|
||||
}SGCP_t;
|
||||
extern SGCP_t SGCP;
|
||||
|
||||
void SGCP1mSRoutine(void);
|
||||
|
||||
void GwRevLoopHandler(void);
|
||||
void MasRevLoopHandler(void);
|
||||
void SubRevLoopHandler(void);
|
||||
void InRevLoopHandler(void);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
#ifndef __UPDATE_H
|
||||
#define __UPDATE_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "bsp.h"
|
||||
#include "UartDebug.h"
|
||||
|
||||
#define APP_START_FLAG 0x55AA5A5A
|
||||
#define APP_UPDATE_FLAG 0xA5A5AA55
|
||||
|
||||
#define FLASH_SECTOR_SIZE 0x200ul
|
||||
#define FLASH_BASE ((uint32_t)0x00000000)
|
||||
#define FLASH_SIZE (256u * FLASH_SECTOR_SIZE)
|
||||
|
||||
#define SRAM_BASE ((uint32_t)0x20000000)
|
||||
#define RAM_SIZE 0x2000ul
|
||||
|
||||
#define BOOT_ADDRESS FLASH_BASE
|
||||
#define BOOT_SIZE (20 * FLASH_SECTOR_SIZE)
|
||||
#define DEV_MAC_ADDRESS (BOOT_ADDRESS + BOOT_SIZE) //0x00002800
|
||||
#define DEV_MAC_SIZE FLASH_SECTOR_SIZE
|
||||
#define APP_ADDRESS (DEV_MAC_ADDRESS + DEV_MAC_SIZE)
|
||||
|
||||
#define BOOT_PARA_ADDRESS (0x0001FC00)//(FLASH_BASE + BOOT_SIZE)
|
||||
#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
||||
|
||||
typedef struct {
|
||||
uint32_t AppFlag;
|
||||
uint32_t UpdateFlag;
|
||||
uint32_t PackageCnt;
|
||||
uint32_t AppSize;
|
||||
uint32_t Crc32Check;
|
||||
}BootPara_t, *BootPara;
|
||||
|
||||
//主机下发升级请求载荷结构体
|
||||
typedef struct {
|
||||
uint16_t PackageNum;
|
||||
uint32_t AppSize;
|
||||
uint32_t AppCrc32;
|
||||
}__attribute__ ((packed))UpDataRequset_t, *UDReq;
|
||||
|
||||
//帧头结构体
|
||||
typedef struct {
|
||||
uint8_t Header;
|
||||
uint8_t DevMac[6];
|
||||
uint8_t Cmd;
|
||||
uint8_t PayloadLen;
|
||||
}__attribute__((packed))UpdateFrameHeader_t,*pUpdateFrameHeader;
|
||||
|
||||
|
||||
//输入接口函数定义,需根据接口重新定义
|
||||
#define U_DBG_LOG(...) DBG_LOG(__VA_ARGS__)
|
||||
#define U_DELAY_MS(x) delay_ms(x)
|
||||
#define U_SYSTEM_TESET() SystemReset()
|
||||
#define SAVE_BOOT_PARA(addr) FlashWrite(BOOT_PARA_ADDRESS, addr, sizeof(BLPara) / 4)
|
||||
#define READ_BOOT_PARA(addr) FlashRead(BOOT_PARA_ADDRESS, addr, sizeof(BLPara) / 4)
|
||||
|
||||
//输出接口
|
||||
void Update(uint8_t *PayLoad);
|
||||
void UpdateInit(void);
|
||||
#endif
|
||||
@@ -0,0 +1,271 @@
|
||||
#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
|
||||
@@ -0,0 +1,107 @@
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
#include "bsp.h"
|
||||
#include "UartDebug.h"
|
||||
#include "Imu.h"
|
||||
|
||||
#define X 0
|
||||
#define Y 1
|
||||
#define Z 2
|
||||
#define XYZ 3
|
||||
|
||||
#define SYSTEM_TIMING_LOGIN (86400 / 30) //系统定时注册时间(一天86400秒)
|
||||
#define ERR_TIMING_LOGIN (1800 / 30) //注册错误重新注册时间(半个小时1800秒)
|
||||
|
||||
#define TEST_TIME (60*60*1000)
|
||||
|
||||
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
||||
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
||||
|
||||
typedef struct {//传感器原始数据
|
||||
float acce[XYZ];
|
||||
float gy[XYZ];
|
||||
float mag[XYZ];
|
||||
}__attribute__ ((packed))SensorData_T,*SensorDp;//传感器数据
|
||||
|
||||
typedef struct {//转换的数据
|
||||
int16_t Pitch; //俯仰角偏斜 (范围±900)单位0.1°
|
||||
int16_t Roll; //横滚角偏斜 (范围±900)单位0.1°
|
||||
int16_t Yaw; //偏航角偏斜 (范围0~3600)单位0.1°
|
||||
// int16_t Temp; //温度值
|
||||
// int32_t AD; //AD值
|
||||
}__attribute__ ((packed))ConvertedData_T, *ConvertedDp;
|
||||
|
||||
typedef struct {// 姿态角数据
|
||||
Rad_T Rad;
|
||||
Deg_T Deg;
|
||||
}__attribute__ ((packed))AHRSData_T,*AHRSDp;
|
||||
|
||||
/*主程序状态机*/
|
||||
typedef enum {
|
||||
APP_STATUS_IDLE,
|
||||
APP_STATUS_SLEEP,
|
||||
APP_STATUS_ON,
|
||||
APP_STATUS_OFF,
|
||||
APP_STATUS_ACTION,
|
||||
APP_STATUS_WAIT_LOGIN,
|
||||
APP_STATUS_WAIT_UPLOAD,
|
||||
}AppStatus_m;
|
||||
|
||||
/*数据读取状态机*/
|
||||
typedef enum {
|
||||
READDATA_STATUS_IDLE,
|
||||
READDATA_STATUS_UPDAING,
|
||||
READDATA_STATUS_WAIT_UPDAING,
|
||||
READDATA_STATUS_DATA_HANDLE,
|
||||
}ReadDataStatus_m;
|
||||
|
||||
typedef struct {
|
||||
AppStatus_m Status;//状态
|
||||
ReadDataStatus_m RDStatus;//读取数据状态
|
||||
|
||||
uint32_t TD1mSDelayCnt;
|
||||
uint8_t FeedDogDlyCnt;
|
||||
uint32_t ReadData1mSDelayCnt;
|
||||
uint32_t SysResetTimeCnt;
|
||||
|
||||
SensorData_T Sensor;
|
||||
AppPara_T Para;
|
||||
AHRSData_T AHRSData;
|
||||
ConvertedData_T ConvertedData;
|
||||
|
||||
uint32_t RepeLoginCount; //24h重复注册计数
|
||||
uint8_t Login30MinCount; //注册30分定时计数
|
||||
uint8_t Login2Min30SCount; //注册100ms~2分+30s定时计数
|
||||
bool Login_RTC; //注册30分定时器启动标志位
|
||||
bool Login_LPTimer0; //注册100ms~2分+30s定时器启动标志位
|
||||
bool LoginFlag; //注册标志位
|
||||
|
||||
uint16_t Coll_N; //数据采集时间计数
|
||||
uint16_t Repor_N; //上报时间计数
|
||||
uint16_t ERInterval_N; //紧急上报时间间隔计数
|
||||
uint8_t ERTime_N; //紧急上报时间计数
|
||||
bool ERFlag; //紧急上报标志位
|
||||
|
||||
bool UploadFlag; //上传数据标志位
|
||||
uint8_t Upload45S10SCount; //上传数据超时计数
|
||||
bool Upload_LPTimer0; //上传100~10000ms+45秒定时器启动标志位
|
||||
|
||||
bool MagRead_EndFlag;
|
||||
bool AccRead_EndFlag;
|
||||
bool UpdateOk; //数据更新标志位
|
||||
|
||||
bool CaliFlag; //标校标志位
|
||||
|
||||
int16_t Nonce; //随机数
|
||||
|
||||
uint32_t TestTimeCnt;
|
||||
uint8_t Tcnt;
|
||||
bool LaserFlag;
|
||||
}AppDetect_t;
|
||||
|
||||
extern AppDetect_t App;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user