Files
HC32F460BootLoader/source/User/Inc/bsp.h
T
YuanHongbin 2761c37103 feat(lora): 宽频信道枚举扩展为120信道(433.1MHz~492.6MHz)+配置更新
- bsp.h: LORA_FREQ_M枚举CH0~CH119, 基准433100000ul+500kHz步进(CH0=433.1MHz, CH119=492.6MHz), 与APP侧sx127x.h宏同构
- bsp.h: GATEWAY_LORA_FREQ可配范围更新为CH0~CH119, 当前配置CH6(宽频下436.1MHz)
- bsp.h: 配置更新: 网关编号0x0006, 服务器端口8086
- ARCHITECTURE.md: 信道范围与默认值描述同步
- 注意: 信道号与窄频版(develop)语义不同, Boot默认CH6(436.1MHz)与APP默认CH8(437.1MHz)不一致, 部署时需对齐
2026-09-07 18:55:10 +08:00

313 lines
11 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 <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;
/*项目编号枚举 - 对应Mac[1:3](3字节)*/
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一致*/
typedef enum {
CH_NULL = -1,
CH_DBG = 0,
CH_RS485_1,
CH_RS485_2,
CH_ETH,
CH_LORA,
CH_CAT1,
}Channel_m;
/*Lora频率:433100000ul + 500000*NN=0~119,共120个信道(433.1MHz~492.6MHz),用于配置Lora频率更方便 [lora-wide宽频版]*/
typedef enum {
CH0 = (433100000ul + 0), //433.1MHz
CH1 = (433100000ul + 500000),
CH2 = (433100000ul + 1000000),
CH3 = (433100000ul + 1500000),
CH4 = (433100000ul + 2000000),
CH5 = (433100000ul + 2500000),
CH6 = (433100000ul + 3000000),
CH7 = (433100000ul + 3500000),
CH8 = (433100000ul + 4000000),
CH9 = (433100000ul + 4500000),
CH10 = (433100000ul + 5000000),
CH11 = (433100000ul + 5500000),
CH12 = (433100000ul + 6000000),
CH13 = (433100000ul + 6500000),
CH14 = (433100000ul + 7000000),
CH15 = (433100000ul + 7500000),
CH16 = (433100000ul + 8000000),
CH17 = (433100000ul + 8500000),
CH18 = (433100000ul + 9000000),
CH19 = (433100000ul + 9500000),
CH20 = (433100000ul + 10000000),
CH21 = (433100000ul + 10500000),
CH22 = (433100000ul + 11000000),
CH23 = (433100000ul + 11500000),
CH24 = (433100000ul + 12000000),
CH25 = (433100000ul + 12500000),
CH26 = (433100000ul + 13000000),
CH27 = (433100000ul + 13500000),
CH28 = (433100000ul + 14000000),
CH29 = (433100000ul + 14500000),
CH30 = (433100000ul + 15000000),
CH31 = (433100000ul + 15500000),
CH32 = (433100000ul + 16000000),
CH33 = (433100000ul + 16500000),
CH34 = (433100000ul + 17000000),
CH35 = (433100000ul + 17500000),
CH36 = (433100000ul + 18000000),
CH37 = (433100000ul + 18500000),
CH38 = (433100000ul + 19000000),
CH39 = (433100000ul + 19500000),
CH40 = (433100000ul + 20000000),
CH41 = (433100000ul + 20500000),
CH42 = (433100000ul + 21000000),
CH43 = (433100000ul + 21500000),
CH44 = (433100000ul + 22000000),
CH45 = (433100000ul + 22500000),
CH46 = (433100000ul + 23000000),
CH47 = (433100000ul + 23500000),
CH48 = (433100000ul + 24000000),
CH49 = (433100000ul + 24500000),
CH50 = (433100000ul + 25000000),
CH51 = (433100000ul + 25500000),
CH52 = (433100000ul + 26000000),
CH53 = (433100000ul + 26500000),
CH54 = (433100000ul + 27000000),
CH55 = (433100000ul + 27500000),
CH56 = (433100000ul + 28000000),
CH57 = (433100000ul + 28500000),
CH58 = (433100000ul + 29000000),
CH59 = (433100000ul + 29500000),
CH60 = (433100000ul + 30000000),
CH61 = (433100000ul + 30500000),
CH62 = (433100000ul + 31000000),
CH63 = (433100000ul + 31500000),
CH64 = (433100000ul + 32000000),
CH65 = (433100000ul + 32500000),
CH66 = (433100000ul + 33000000),
CH67 = (433100000ul + 33500000),
CH68 = (433100000ul + 34000000),
CH69 = (433100000ul + 34500000),
CH70 = (433100000ul + 35000000),
CH71 = (433100000ul + 35500000),
CH72 = (433100000ul + 36000000),
CH73 = (433100000ul + 36500000),
CH74 = (433100000ul + 37000000),
CH75 = (433100000ul + 37500000),
CH76 = (433100000ul + 38000000),
CH77 = (433100000ul + 38500000),
CH78 = (433100000ul + 39000000),
CH79 = (433100000ul + 39500000),
CH80 = (433100000ul + 40000000),
CH81 = (433100000ul + 40500000),
CH82 = (433100000ul + 41000000),
CH83 = (433100000ul + 41500000),
CH84 = (433100000ul + 42000000),
CH85 = (433100000ul + 42500000),
CH86 = (433100000ul + 43000000),
CH87 = (433100000ul + 43500000),
CH88 = (433100000ul + 44000000),
CH89 = (433100000ul + 44500000),
CH90 = (433100000ul + 45000000),
CH91 = (433100000ul + 45500000),
CH92 = (433100000ul + 46000000),
CH93 = (433100000ul + 46500000),
CH94 = (433100000ul + 47000000),
CH95 = (433100000ul + 47500000),
CH96 = (433100000ul + 48000000),
CH97 = (433100000ul + 48500000),
CH98 = (433100000ul + 49000000),
CH99 = (433100000ul + 49500000),
CH100 = (433100000ul + 50000000),
CH101 = (433100000ul + 50500000),
CH102 = (433100000ul + 51000000),
CH103 = (433100000ul + 51500000),
CH104 = (433100000ul + 52000000),
CH105 = (433100000ul + 52500000),
CH106 = (433100000ul + 53000000),
CH107 = (433100000ul + 53500000),
CH108 = (433100000ul + 54000000),
CH109 = (433100000ul + 54500000),
CH110 = (433100000ul + 55000000),
CH111 = (433100000ul + 55500000),
CH112 = (433100000ul + 56000000),
CH113 = (433100000ul + 56500000),
CH114 = (433100000ul + 57000000),
CH115 = (433100000ul + 57500000),
CH116 = (433100000ul + 58000000),
CH117 = (433100000ul + 58500000),
CH118 = (433100000ul + 59000000),
CH119 = (433100000ul + 59500000), //492.6MHz
}LORA_FREQ_M;
/*通讯单元通道掩码 - 与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)
/*****************************************************************************************/
/*********************************下载前必须检查配置项************************************/
/*当前设备版本/项目选择*/
#define GATEWAY_VER_INFO GATEWAY_VER1_0 //版本信息
#define GATEWAY_PRJ_NUM GATEWAY_PRJ_YAXIA //项目编号
#define GATEWAY_GW_NUM 0x0006 //网关编号(2字节, 1~65535)
/*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 //服务器端口
#define GATEWAY_LORA_FREQ CH6 //Lora中心频率(可配置为CH0~CH119)
/*默认通道配置 - 在Boot中直接配置, 替代原APP硬编码默认值*/
#define GATEWAY_MUCH CH_ETH //主上传通道
#define GATEWAY_AUCH CH_NULL //辅助上传通道
#define GATEWAY_DUCH CH_CAT1 //调试/升级通道
#define GATEWAY_CUCH_MASK CUCH_LORA //通讯单元通道掩码
/*********************************下载前必须检查配置项************************************/
/*****************************************************************************************/
/*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
#define SRAM_BASE ((uint32_t)0x1FFF8000)
#define SRAM_SIZE 0x2F000ul //192KB
#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)
#define DEBUG 1
#define USE_SD_CARD 0
#define WATCH_DOG 1
//DEBUG USART1
#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 - 升级通道
#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
#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
#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
#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一致*/
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; //通讯单元通道掩码
}BootPara_t, *BootPara;
/*BSP初始化*/
void BSP_Init(void);
/*调试串口*/
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);
/*看门狗*/
void FeedDog(void);
void Error_Handler(void);
/*Flash操作*/
void FlashWrite(uint32_t Addr, uint32_t *wData, uint8_t wLen);
void ReadBootPara(BootPara rData);
void WriteBootPara(BootPara wData);
void EraseFlash(void);
#endif