Files
HC32F460BootLoader/source/User/Inc/bsp.h
T

358 lines
13 KiB
C
Raw Normal View History

2026-06-22 09:19:00 +08:00
#ifndef __BSP_H
#define __BSP_H
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include "hc32_ddl.h"
/*版本信息枚举 - 对应Mac[0]的Bit[6:0], Bit[7]固定为1*/
typedef enum {
GATEWAY_VER1_0 = 0x01, //网关Ver1.0
GATEWAY_VER2_0 = 0x02, //网关Ver2.0
}GATEWAY_VER_M;
2026-06-22 09:19:00 +08:00
/*项目编号枚举 - 对应Mac[1:3](3字节)*/
2026-06-22 09:19:00 +08:00
typedef enum {
GATEWAY_PRJ_TEST = 0, //测试项目
GATEWAY_PRJ_AKY, //安科院项目
GATEWAY_PRJ_BJTU, //北交大项目
GATEWAY_PRJ_BALADIAN, //巴拉水电边坡监测项目
GATEWAY_PRJ_TYY1, //铁一院川藏铁路隧道监测项目
GATEWAY_PRJ_TYY2, //铁二院川藏铁路隧道监测项目
GATEWAY_PRJ_YAXIA, //雅下项目
GATEWAY_PRJ_OTHER, //…………
}GATEWAY_PRJ_M;
/*通道枚举 - 与GateWay APP一致*/
2026-06-22 09:19:00 +08:00
typedef enum {
CH_NULL = -1,
CH_DBG = 0,
CH_RS485_1,
CH_RS485_2,
CH_ETH,
CH_LORA,
CH_CAT1,
}Channel_m;
/*Lora频率:410100000ul + 500000*NN=0~165,共166个信道(410.1MHz~492.6MHz),用于配置Lora频率更方便*/ [lora-wide宽频版]
2026-06-22 09:19:00 +08:00
typedef enum {
CH0 = (410100000ul + 0), //410.1MHz
CH1 = (410100000ul + 500000),
CH2 = (410100000ul + 1000000),
CH3 = (410100000ul + 1500000),
CH4 = (410100000ul + 2000000),
CH5 = (410100000ul + 2500000),
CH6 = (410100000ul + 3000000),
CH7 = (410100000ul + 3500000),
CH8 = (410100000ul + 4000000),
CH9 = (410100000ul + 4500000),
CH10 = (410100000ul + 5000000),
CH11 = (410100000ul + 5500000),
CH12 = (410100000ul + 6000000),
CH13 = (410100000ul + 6500000),
CH14 = (410100000ul + 7000000),
CH15 = (410100000ul + 7500000),
CH16 = (410100000ul + 8000000),
CH17 = (410100000ul + 8500000),
CH18 = (410100000ul + 9000000),
CH19 = (410100000ul + 9500000),
CH20 = (410100000ul + 10000000),
CH21 = (410100000ul + 10500000),
CH22 = (410100000ul + 11000000),
CH23 = (410100000ul + 11500000),
CH24 = (410100000ul + 12000000),
CH25 = (410100000ul + 12500000),
CH26 = (410100000ul + 13000000),
CH27 = (410100000ul + 13500000),
CH28 = (410100000ul + 14000000),
CH29 = (410100000ul + 14500000),
CH30 = (410100000ul + 15000000),
CH31 = (410100000ul + 15500000),
CH32 = (410100000ul + 16000000),
CH33 = (410100000ul + 16500000),
CH34 = (410100000ul + 17000000),
CH35 = (410100000ul + 17500000),
CH36 = (410100000ul + 18000000),
CH37 = (410100000ul + 18500000),
CH38 = (410100000ul + 19000000),
CH39 = (410100000ul + 19500000),
CH40 = (410100000ul + 20000000),
CH41 = (410100000ul + 20500000),
CH42 = (410100000ul + 21000000),
CH43 = (410100000ul + 21500000),
CH44 = (410100000ul + 22000000),
CH45 = (410100000ul + 22500000),
CH46 = (410100000ul + 23000000),
CH47 = (410100000ul + 23500000),
CH48 = (410100000ul + 24000000),
CH49 = (410100000ul + 24500000),
CH50 = (410100000ul + 25000000),
CH51 = (410100000ul + 25500000),
CH52 = (410100000ul + 26000000),
CH53 = (410100000ul + 26500000),
CH54 = (410100000ul + 27000000),
CH55 = (410100000ul + 27500000),
CH56 = (410100000ul + 28000000),
CH57 = (410100000ul + 28500000),
CH58 = (410100000ul + 29000000),
CH59 = (410100000ul + 29500000),
CH60 = (410100000ul + 30000000),
CH61 = (410100000ul + 30500000),
CH62 = (410100000ul + 31000000),
CH63 = (410100000ul + 31500000),
CH64 = (410100000ul + 32000000),
CH65 = (410100000ul + 32500000),
CH66 = (410100000ul + 33000000),
CH67 = (410100000ul + 33500000),
CH68 = (410100000ul + 34000000),
CH69 = (410100000ul + 34500000),
CH70 = (410100000ul + 35000000),
CH71 = (410100000ul + 35500000),
CH72 = (410100000ul + 36000000),
CH73 = (410100000ul + 36500000),
CH74 = (410100000ul + 37000000),
CH75 = (410100000ul + 37500000),
CH76 = (410100000ul + 38000000),
CH77 = (410100000ul + 38500000),
CH78 = (410100000ul + 39000000),
CH79 = (410100000ul + 39500000),
CH80 = (410100000ul + 40000000),
CH81 = (410100000ul + 40500000),
CH82 = (410100000ul + 41000000),
CH83 = (410100000ul + 41500000),
CH84 = (410100000ul + 42000000),
CH85 = (410100000ul + 42500000),
CH86 = (410100000ul + 43000000),
CH87 = (410100000ul + 43500000),
CH88 = (410100000ul + 44000000),
CH89 = (410100000ul + 44500000),
CH90 = (410100000ul + 45000000),
CH91 = (410100000ul + 45500000),
CH92 = (410100000ul + 46000000),
CH93 = (410100000ul + 46500000),
CH94 = (410100000ul + 47000000),
CH95 = (410100000ul + 47500000),
CH96 = (410100000ul + 48000000),
CH97 = (410100000ul + 48500000),
CH98 = (410100000ul + 49000000),
CH99 = (410100000ul + 49500000),
CH100 = (410100000ul + 50000000),
CH101 = (410100000ul + 50500000),
CH102 = (410100000ul + 51000000),
CH103 = (410100000ul + 51500000),
CH104 = (410100000ul + 52000000),
CH105 = (410100000ul + 52500000),
CH106 = (410100000ul + 53000000),
CH107 = (410100000ul + 53500000),
CH108 = (410100000ul + 54000000),
CH109 = (410100000ul + 54500000),
CH110 = (410100000ul + 55000000),
CH111 = (410100000ul + 55500000),
CH112 = (410100000ul + 56000000),
CH113 = (410100000ul + 56500000),
CH114 = (410100000ul + 57000000),
CH115 = (410100000ul + 57500000),
CH116 = (410100000ul + 58000000),
CH117 = (410100000ul + 58500000),
CH118 = (410100000ul + 59000000),
CH119 = (410100000ul + 59500000),
CH120 = (410100000ul + 60000000),
CH121 = (410100000ul + 60500000),
CH122 = (410100000ul + 61000000),
CH123 = (410100000ul + 61500000),
CH124 = (410100000ul + 62000000),
CH125 = (410100000ul + 62500000),
CH126 = (410100000ul + 63000000),
CH127 = (410100000ul + 63500000),
CH128 = (410100000ul + 64000000),
CH129 = (410100000ul + 64500000),
CH130 = (410100000ul + 65000000),
CH131 = (410100000ul + 65500000),
CH132 = (410100000ul + 66000000),
CH133 = (410100000ul + 66500000),
CH134 = (410100000ul + 67000000),
CH135 = (410100000ul + 67500000),
CH136 = (410100000ul + 68000000),
CH137 = (410100000ul + 68500000),
CH138 = (410100000ul + 69000000),
CH139 = (410100000ul + 69500000),
CH140 = (410100000ul + 70000000),
CH141 = (410100000ul + 70500000),
CH142 = (410100000ul + 71000000),
CH143 = (410100000ul + 71500000),
CH144 = (410100000ul + 72000000),
CH145 = (410100000ul + 72500000),
CH146 = (410100000ul + 73000000),
CH147 = (410100000ul + 73500000),
CH148 = (410100000ul + 74000000),
CH149 = (410100000ul + 74500000),
CH150 = (410100000ul + 75000000),
CH151 = (410100000ul + 75500000),
CH152 = (410100000ul + 76000000),
CH153 = (410100000ul + 76500000),
CH154 = (410100000ul + 77000000),
CH155 = (410100000ul + 77500000),
CH156 = (410100000ul + 78000000),
CH157 = (410100000ul + 78500000),
CH158 = (410100000ul + 79000000),
CH159 = (410100000ul + 79500000),
CH160 = (410100000ul + 80000000),
CH161 = (410100000ul + 80500000),
CH162 = (410100000ul + 81000000),
CH163 = (410100000ul + 81500000),
CH164 = (410100000ul + 82000000),
CH165 = (410100000ul + 82500000), //492.6MHz
2026-06-22 09:19:00 +08:00
}LORA_FREQ_M;
2026-09-02 10:25:20 +08:00
/*通讯单元通道掩码 - 与GateWay APP一致*/
#define CUCH_CH1 (1 << CH_RS485_1)
#define CUCH_CH2 (1 << CH_RS485_2)
#define CUCH_ETH (1 << CH_ETH)
#define CUCH_LORA (1 << CH_LORA)
#define CUCH_CAT1 (1 << CH_CAT1)
2026-06-22 09:19:00 +08:00
2026-09-02 10:25:20 +08:00
/*****************************************************************************************/
/*********************************下载前必须检查配置项************************************/
/*当前设备版本/项目选择*/
#define GATEWAY_VER_INFO GATEWAY_VER1_0 //版本信息
#define GATEWAY_PRJ_NUM GATEWAY_PRJ_YAXIA //项目编号
#define GATEWAY_GW_NUM 0x0006 //网关编号(2字节, 1~65535)
2026-06-22 09:19:00 +08:00
/*CAT1服务器/Lora配置 - 替代原MAC_ADDR_TYPE编译宏, 在Boot中直接配置*/
#define GATEWAY_SVR_ADDR0 39 //服务器IP[0]
#define GATEWAY_SVR_ADDR1 106 //服务器IP[1]
#define GATEWAY_SVR_ADDR2 103 //服务器IP[2]
#define GATEWAY_SVR_ADDR3 147 //服务器IP[3]
#define GATEWAY_SVR_PORT 8086 //服务器端口
2026-06-22 09:19:00 +08:00
#define GATEWAY_LORA_FREQ CH6 //Lora中心频率(可配置为CH0~CH165)
2026-06-22 09:19:00 +08:00
/*默认通道配置 - 在Boot中直接配置, 替代原APP硬编码默认值*/
#define GATEWAY_MUCH CH_ETH //主上传通道
#define GATEWAY_AUCH CH_NULL //辅助上传通道
#define GATEWAY_DUCH CH_CAT1 //调试/升级通道
#define GATEWAY_CUCH_MASK CUCH_LORA //通讯单元通道掩码
2026-09-02 10:25:20 +08:00
/*********************************下载前必须检查配置项************************************/
/*****************************************************************************************/
2026-06-22 09:19:00 +08:00
/*Flash分区 - 32KB Boot + APP(0x8000起) + 参数区(0x7C000)*/
#define FLASH_SECTOR_SIZE 0x2000ul //8KB
#define FLASH_BASE ((uint32_t)0x00000000)
#define FLASH_SIZE (64u * FLASH_SECTOR_SIZE) //512KB
2026-06-22 09:19:00 +08:00
#define SRAM_BASE ((uint32_t)0x1FFF8000)
#define SRAM_SIZE 0x2F000ul //192KB
2026-06-22 09:19:00 +08:00
#define BOOT_SIZE (4 * FLASH_SECTOR_SIZE) //32KB
#define APP_ADDRESS (FLASH_BASE + BOOT_SIZE) //0x8000
#define APP_SIZE (58 * FLASH_SECTOR_SIZE) //464KB
#define BOOT_PARA_ADDRESS (APP_ADDRESS + APP_SIZE) //0x7C000
#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
2026-06-22 09:19:00 +08:00
#define DEBUG 1
#define USE_SD_CARD 0
#define WATCH_DOG 1
//DEBUG USART1
2026-06-22 09:19:00 +08:00
#define DBGUART_IRQn Int006_IRQn
#define DBGUART_EI_IRQn Int007_IRQn
#define DBG_USART_CH (M4_USART1)
#define DBG_USART_RX_PORT (PortA)
#define DBG_USART_RX_PIN (Pin11)
#define DBG_USART_TX_PORT (PortA)
#define DBG_USART_TX_PIN (Pin12)
#define DBG_USART_RX_FUNC (Func_Usart1_Rx)
#define DBG_USART_TX_FUNC (Func_Usart1_Tx)
#define DBG_USART_RI_NUM (INT_USART1_RI)
#define DBG_USART_EI_NUM (INT_USART1_EI)
#define DBG_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
//RS485 Ch1 USART2 - 升级通道
2026-06-22 09:19:00 +08:00
#define RS485_CH1_USART_CH (M4_USART2)
#define RS485_CH1_USART_RX_PORT (PortA)
#define RS485_CH1_USART_RX_PIN (Pin10)
#define RS485_CH1_USART_TX_PORT (PortA)
#define RS485_CH1_USART_TX_PIN (Pin08)
#define RS485_CH1_USART_RX_FUNC (Func_Usart2_Rx)
#define RS485_CH1_USART_TX_FUNC (Func_Usart2_Tx)
#define RS485_CH1_USART_RI_NUM (INT_USART2_RI)
#define RS485_CH1_USART_EI_NUM (INT_USART2_EI)
#define RS485_CH1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART2)
#define RS485CH1_UART_IRQn Int012_IRQn
#define RS485CH1_UART_EI_IRQn Int011_IRQn
2026-06-22 09:19:00 +08:00
#define RS485_CH1_CTRL_PORT (PortC)
#define RS485_CH1_CTRL_PIN (Pin07)
#define RS485_CH1_TX() PORT_SetBits(RS485_CH1_CTRL_PORT, RS485_CH1_CTRL_PIN)
#define RS485_CH1_RX() PORT_ResetBits(RS485_CH1_CTRL_PORT, RS485_CH1_CTRL_PIN)
//RS485 Ch2 USART3
2026-06-22 09:19:00 +08:00
#define RS485_CH2_USART_CH (M4_USART3)
#define RS485_CH2_USART_RX_PORT (PortB)
#define RS485_CH2_USART_RX_PIN (Pin14)
#define RS485_CH2_USART_TX_PORT (PortB)
#define RS485_CH2_USART_TX_PIN (Pin12)
#define RS485_CH2_USART_RX_FUNC (Func_Usart3_Rx)
#define RS485_CH2_USART_TX_FUNC (Func_Usart3_Tx)
#define RS485_CH2_USART_RI_NUM (INT_USART3_RI)
#define RS485_CH2_USART_EI_NUM (INT_USART3_EI)
#define RS485_CH2_FCG1_PERIPH (PWC_FCG1_PERIPH_USART3)
#define RS485CH2_UART_IRQn Int002_IRQn
#define RS485CH2_UART_EI_IRQn Int003_IRQn
2026-06-22 09:19:00 +08:00
#define RS485_CH2_CTRL_PORT (PortB)
#define RS485_CH2_CTRL_PIN (Pin13)
#define RS485_CH2_TX() PORT_SetBits(RS485_CH2_CTRL_PORT, RS485_CH2_CTRL_PIN)
#define RS485_CH2_RX() PORT_ResetBits(RS485_CH2_CTRL_PORT, RS485_CH2_CTRL_PIN)
/*BootLoader参数结构体 - 与GateWay APP一致*/
2026-06-22 09:19:00 +08:00
typedef struct {
uint32_t AppFlag; //应用启动标志
uint32_t UpdateFlag; //升级标志
uint32_t PackageCnt; //数据包总数
uint32_t AppSize; //应用程序大小
uint32_t Crc32Check; //CRC32校验值
uint32_t FirstRunFlag; //首次运行标志
uint8_t GwMac[6]; //网关MAC地址
uint8_t SvrAddr[4]; //默认服务器IP地址
uint16_t SvrPort; //默认服务器端口
uint32_t LoraFreq; //默认Lora中心频率
int8_t Much; //主上传通道
int8_t Auch; //辅助上传通道
int8_t Duch; //调试/升级通道
uint8_t CuchMask; //通讯单元通道掩码
2026-06-22 09:19:00 +08:00
}BootPara_t, *BootPara;
/*BSP初始化*/
2026-06-22 09:19:00 +08:00
void BSP_Init(void);
/*调试串口*/
2026-06-22 09:19:00 +08:00
void DbgUart_Config(uint32_t BaudRate);
void DebugUartSend(uint8_t *sData, uint16_t sLen);
void DbgRxIrqCallback(uint8_t rData);
/*RS485 Ch1 - 升级通道*/
void RS485Ch1_Config(uint32_t BaudRate);
void RS485Ch1UartSend(uint8_t *sData, uint16_t sLen);
uint8_t RS485Ch1UartRec(void);
void RS485Ch1RxIrqCallback(uint8_t rData);
/*RS485 Ch2*/
void RS485Ch2_Config(uint32_t BaudRate);
void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen);
void RS485Ch2RxIrqCallback(uint8_t rData);
/*看门狗*/
2026-06-22 09:19:00 +08:00
void FeedDog(void);
void Error_Handler(void);
/*Flash操作*/
2026-06-22 09:19:00 +08:00
void FlashWrite(uint32_t Addr, uint32_t *wData, uint8_t wLen);
void ReadBootPara(BootPara rData);
void WriteBootPara(BootPara wData);
void EraseFlash(void);
2026-06-22 09:19:00 +08:00
#endif