shuichan_new/版本说明.md

313 lines
27 KiB
Markdown
Raw Normal View History

# 版本说明
## V1.7.1 —— 485 扩展继电器板支持2026-09-04
### 新增
- **485 级联扩展继电器板4 路带反馈Modbus RTU 从机 0x10**,与称重秤共用 USART2 总线:
- 新模块 `HardWare/RELAY/ext_relay.c`FC05 写线圈控制 + FC03 读 4 寄存器(输出/反馈/故障/版本)
- 命令闭环FC05 回显校验300ms 超时补发 1 次)→ 150ms 触点稳定 → FC03 校验输出位+反馈位(与板载继电器反馈同语义,失败应答 `Load unpowered / relay failure !`)→ 应答平台 → 全状态上报
- 空闲 2s 轮询兼在线检测,连续 3 次无应答判离线;离线期间命令直接拒绝;恢复应答自动上线补报
- 反馈异常(故障位非 0打 WARN 日志
- **485 总线多从机改造**USART2 收帧统一在 feedScaleProcess 收取后按站号分发0x01 秤 / 0x10 扩展板);
总线活动时间戳移到 uart.c`rs485_bus_touch/last_tick`),秤查询与扩展板收发共用 50ms 静默保护
- **平台标识符新增 sw5~sw8**扩展板在线时状态大报文附加4G/WiFi、带秤/无秤 4 条格式串均改);
平台物模型需加 4 个布尔字段
- **蓝牙命令新增 R5ON~R8OFF**STATUS 显示扩展板在线状态与各路开关/故障位
- 协议文档:`Docs/RS485扩展继电器协议.md`(从机板按此实现)
### 追加2026-09-04
- **扩展板检测改为按需触发,取消 2s 周期轮询**(平时总线零流量):
上电 3s 一次性 FC03 探测(确认在线 + 触发断电恢复比对);
控制命令改三段式FC03 预读(判定在线 + 快照命令前反馈)→ FC05 → 150ms → FC03 校验跳变;
命令链路最终无应答即判离线并应答平台 `ext relay board offline`,下次命令自动重新探测恢复;
断电恢复触发点不变(离线→上线比对 EEPROM 逐路补发)
- **扩展板状态断电记忆+上电恢复**(与板载继电器一致):状态位掩码存 `MqttInfoStr.Relay_State[5]`(原保留字节,
bit0~3=扩展 1~4 路0xFF 空白视为全断),复用 EEPROM 偏移 102 现有落盘路径;
扩展板每次离线→上线时比对 FC03 实际状态与 EEPROM 记忆,不一致的回路逐路补发 FC05 纠正
(从机上电默认全断,即实现"断电后重连恢复到断电前状态"),恢复完成统一保存+上报一次
### 说明
- 不挂扩展板时功能无影响(轮询无应答记离线日志);无秤模式同样可用扩展板
## V1.7.0 —— 新硬件板型引脚重排2026-09-04不兼容老板仓库迁至 shuichan_new
### 背景
- 硬件为布线方便重新分配 IO**与老板子不兼容**;代码迁至新仓库
`ssh://nky@58.17.14.95:90/helei/shuichan_new.git`,老仓库 shuichan 定格 V1.6.5
- 固件版本号 1.6.5 → **1.7.0**EEPROM 布局 / W25Q64 OTA 结构 / 云平台协议均不变
### 引脚重排对照(旧 → 新)
| 功能 | 旧 | 新 |
| --- | --- | --- |
| CAT_PWR4G 供电) | PC4接模块电源开关开漏拉低=开机) | **PC1**(改接 DCDC 使能脚 EN开漏**逻辑反相:释放=工作,拉低=DCDC 停输出模块掉电** |
| CAT_RST4G 复位) | PA4代码原有但未接线/推挽) | PA4 **直连 Air780E 复位脚,改开漏输出,拉低=复位、释放=工作**;修复旧 cat_reset 结束保持低电平的隐患(复位脉冲后必须释放) |
| BT_MODE蓝牙 AT 切换) | PB0 | **PC4** |
| RELAY1~4 输出 | PB7/PB8/PC0/PC2 | **PC2/PA1/PB12/PB1** |
| Relay1~4_FB 反馈 | PB6/PB9/PC1/PC3 | **PC0/PC3/PC5/PB0** |
| NET_LED | PA1 | **PB13** |
| EEPROM I2CSCL/SDA | PA11/PA12 | **PB5/PB4** |
| W25Q64CS/DO/CLK/DI | PB4/PB5/PB3/PA15 | **PB8/PB9/PB6/PB7**(全在 GPIOB不再占 JTAG 脚) |
| OLED CS2/FSO/CS1/DC/MOSI/CLK/RES | PB15/PC6/PC7/PC8/PC9/PC12/PB14 | **PC12/PA12/PC8/PC9/PA15/PB3/PA11** |
| 其余串口1~5、ESP_EN/RST、BT_RST、LED2、VBAT_ADC、SWD | — | 不变 |
### 新增
- **HR_INPA8红外对管缺料检测**:下拉输入,低=有料(传感器不接时下拉为低,不影响投料);
高电平去抖 ≈500ms 判缺料 → 停止投料并关闭继电器 1**只记日志不上报**,恢复有料后解除锁存;
与秤模式无关(无秤模式继电器 1 吸合时同样保护),`feed_scale_hr_check()` 挂在 feedScaleProcess 开头
- **KEY1~KEY4PC6/PC7/PB14/PB15**:本地按键,上拉输入,仅初始化,功能预留
- 取消原 PA8 手动模式开关MANUAL_MODE新板无此器件LED1 仍为无操作占位)
### BootLoader 同步变更(需 J-Link 刷一次新 BL
- W25Q64 引脚同步重排BL/APP 共用 main.h 引脚宏)
- CAT_PWR 反相:门禁等待期间 PC1 **拉低**保持 4G 断电(旧版为 PC4 置高)
## V1.6.5 附加改动2026-09-01
- OLED 新增 OTA 下载进度页4G/WiFi 双通道):触发升级即显示"OTA升级中/下载固件 xx%/进度条"
优先级高于已联网界面WiFi 中止后退出该页
- OTA 期间暂停业务g_ota_active秤轮询/继电器状态机/延迟上报全停(入口本来就先停投喂+断继电器1
WiFi 中止自动恢复4G 失败路径本就复位
- feed_scale 485 查询加 50ms 总线间隔保护(收帧后 50ms 内不发新查询):
为以后 485 总线挂多个传感器预留——采集终端已踩过"连续查询撞帧"的坑(见 nongye V1.0.1 修复)
## BootLoader 更新2026-08配套 V1.6.5 APP需 J-Link 刷写 BL 生效)
### 变更(仅 BootLoaderAPP 不变)
- **门禁等待循环补喂外部看门狗**EXT_WDOG_FEED修复"等 12V 恢复"期间 TPL5010 周期咬死 BL 反复重启的问题
- **BL 期间保持 4G/WiFi 模块断电**PC4 置高、PA6 拉低):门禁等待时不空耗法拉电容/电池
- **门禁日志带数值**`电量低:电压 xx.xV电量 xx%,需充至 20% 以上恢复...` / `电量已恢复xx%),跳转 APP`
- **门禁阈值 11.0V → 11.2V20%**:市电场景=12V 断开判据不变;
锂电池场景与 APP 的 <10% 断电预警形成滞回防止"回弹开机负载跌落再复位"振荡循环
(投料机支持太阳能锂电池供电,此场景无 220VHLW8032 电能计量不可用属预期)
## V1.6.0 —— 设备身份改为蓝牙灌入(固件通用化)
### 变更
- **固件不再包含 MQTT 身份**:删除 `main.h``MQTT_CLIENT_ID/USERNAME/PASSWORD` 编译宏,
ClientID/Username/Password 只存 EEPROM`MqttInfo_Str` 布局与 Magic 不变);服务器地址/端口/主题保留编译默认值
- **eepromReadInfo 不再与编译宏比对"修复"**Magic 有效且 ClientID 非空即视为已配置,身份以 EEPROM 为准
- **待配置模式**:新板/无身份时跳过 4G/WiFi 初始化与网络状态机OLED 显示"未配置身份/SETMQTT"
串口提示用法,蓝牙保持可用
- **新增蓝牙命令**`SETMQTT ID 用户名 密码`(灌入身份,保存后自动重启生效)、`SETIP ip port`(改服务器,保存后自动重启生效)、
`MQTTINFO`(查询配置,密码明文)、`HISTORY`(按需打印最近 10 条重启记录,开机不再自动刷 10 条日志)、`FACTORY`(恢复出厂:整片 EEPROM 写 0xFF 全清,自动重启进待配置模式;不清 ESP 模块里 SmartConfig 保存的热点,要清用 WIFIRESET
命令参数一律空格分隔SETMQTT id user pass
- **WiFi 固定热点支持蓝牙配置**`SETWIFI 名称 密码` 写 EEPROMmagic=0xA6 @200SSID/密码各 22B
连接时 EEPROM 优先、编译默认兜底;`WIFIINFO` 查询(密码明文)、`WIFICLEAR` 清除该配置回到编译默认(自动重启生效)
- **新增投喂蓝牙命令**(带秤模式):`FEEDSTART 投料量KG`0.1~500.0)、`FEEDSTOP`、`FEED`(查询状态)
- **老设备 OTA 平滑升级**:老固件已把身份写入 EEPROM升级后直接以原身份上线平台无感知
- 收益:固件 bin 全设备通用OTA 批量推送不串号;量产只烧一个固件,身份现场灌入
## V1.1 —— 4G 基础版
最初版本,纯 4G 通信。
### 功能
- 4G Air780E MQTT 联网(模组内置 MQTTUSART3 DMA+IDLE 接收,波特率自适应 115200→921600 掉电保存)
- 四路继电器远程控制sw1~sw4 / feeding 指令),带继电器反馈检测与负载异常应答
- 两种产品形态宏 `PRODUCT_WITH_FEED_SCALE`投料机RS485 称重定量投喂,重量反增/超时保护)/ 基础四路继电器
- 4G OTA 远程升级HTTP 分块下载3072B/块)→ W25Q64 暂存 → CRC16+固件头校验 → BootLoader 备份/搬运/失败回滚3 次试错)
- AT24C02 EEPROM 配置存储MQTT 参数/版本号/继电器状态)
- 继电器断电记忆:联网后恢复继电器 2~4 上次状态,继电器 1投喂上电强制断开防误投料
- 蓝牙串口调试命令USART1RESET/INFO/STATUS/R1ON~R4OFF/OTA/RECOVERY 等
- 双看门狗:片内 IWDG(~26s) + 外置 TPL5010(7minLED2 翻转喂狗)
- 电量检测PA0 ADC低电量上报 pow:0
## V1.2 —— 新增 WiFi 通道
### 新增
- ESP-01S WiFi 通道UART4PC10/PC11RST=PA5TCP 透传 + MCU 软件 MQTT 3.1.1(不用 AT+MQTT
- 网络层抽象:`network.c` 统一 NET_* 接口4G/WiFi 双后端互斥共享接收缓冲Rx_Buf/U2_CopyBuff业务层零改动
- 通道切换4G 无 SIM/无信号重试 3 次自动回退 WiFiWiFi 按"固定热点(60s) → SmartConfig 智能配网(60s)"连接,失败回 4G 循环
- WiFi/4G 波特率均提升至 921600WiFi 侧 AT+UART_DEF 掉电保存,探测同步)
- 4G 信号检测AT+CSQ 转百分比输出,无信号置标志回退 WiFi
- GPS 定位周期上报Air780EG 内置 GNSSWGS-84→GCJ-02 高德坐标转换5min 周期fix 无效不上报)
- 状态上报同时携带 sw1 与 feeding 两个字段(平台两个开关同步刷新)
- 继电器断电记忆完善:改到 MQTT 首次就绪后恢复(修复 WiFi 兜底时永远不恢复的问题);无秤模式四路全恢复;投料模式 SW1 不恢复且强制关闭
- 新增 RECOVERY 蓝牙命令WiFi 模块 AT+RESTORE 恢复出厂(测试 SmartConfig 用)
### 修复
- 透传 CIPSEND 无响应:等 CIPSTART 的 OK 收尾+延时后再发;增加"已在透传态"探测兜底
- AT 应答陈旧匹配:清缓冲改到发送之后,防止上一条应答尾巴造成"假成功"(曾致 CIPMODE 未生效)
- UART ORE 导致 HAL 中止 DMA 接收ErrorCallback 按当前通道自愈重新武装
## V1.3 —— WiFi OTA + 联网方式记忆
### 新增
- WiFi 通道 OTAESP-01S 透传 TCP 上软件实现 HTTP Range 分块下载3072B/块MCU 自定节奏),复用 W25Q64 双槽+CRC+BootLoader 回退体系;下载失败自动重连 MQTT 恢复业务
- 联网方式记忆EEPROM 偏移 130记录上次成功联网方式4G / WiFi固定热点 / WiFi配网热点仅变化时写一次开机优先跑上次成功的方式
- 已存 AP 自动连接改为 AT+CIPSTATUS 主动查询(修复被动等 "WIFI GOT IP" 打印被清缓冲擦掉、永远等不到的问题)
### 修复
- WiFi OTA 下载停摆DMA(NORMAL) 填满 Rx_Buf 后无 IDLE 不触发、接收永久停摆 → 在 HAL_UART_RxCpltCallback 里搬运并重启接收UART4/USART3 同步加)
- 服务器整包灌流量冲爆接收缓冲:改 HTTP Range 分块请求自定节奏
- AT 匹配严格化二进制安全匹配strstr 遇 0x00 失明问题)、收到 ERROR/FAIL 快速失败、进透传前 AT+CIPCLOSE 清残留连接、CIPMUX=0 先于 CIPMODE=1
- SmartConfig 后等 IP 失败:改 CIPSTATUS 主动查询(打印被 CWSTOPSMART 交互擦掉的问题)
## V1.4 —— FreeRTOS 版
### 新增
- 迁移到 FreeRTOS V10.0.1net(3)/app(2)/sys(1) 三任务idle 钩子喂 IWDGHAL 时基改 TIM2SysTick 归 RTOS
- 互斥锁三把AT 会话锁(防业务发布与 AT 应答交织、存储锁EEPROM/W25Q64 跨任务)、日志锁
- 无秤模式PRODUCT_WITH_FEED_SCALE=0不再上报 zero/onceWt 字段,平台下发设置直接拒绝
- WiFi 断链处理与 4G 对齐TCP CLOSED被平台踢下线/ 心跳超时(15s) → 打印原因并直接整机复位
- Uptime 运行时长打印:联网后每 60s 一次(未联网不打印)
### 修复
- 迁移时漏抄 HAL_TIM_PeriodElapsedCallbackHAL 时基不走)导致开机复位循环
- RECOVERY 在透传态下直接发 AT+RESTORE 被当 TCP 数据发走:先 "+++" 退透传RTOS 下改为 net 任务内执行恢复流程
- NET_LED 一直闪烁:补回 g_net_led_connected 状态映射(连接中闪烁,连上常亮)
## V1.4-Chinese —— 串口日志中文版
### 新增
- 全部串口日志中文化UTF-8 输出Keil 加 `--no_multibyte_chars` 解决 ARMCC 按 GBK 误读 UTF-8 吃引号问题)
- 重启记录:开机打印最近 10 条"重启原因 + 上次运行时长"W25Q64 0x100000 环形存储一记录一扇区滑动覆盖16 种原因码BL 把 RCC->CSR 放共享 RAM 传给 APP
- 断电保护法拉电容场景PA0 检测 12V 断开(连续 3 次 <10% 去抖)→ 立即写断电记录+上报+复位BootLoader 主电源门禁12V 未恢复不跳 APP电量百分比 0~100% 限幅
- I2C 总线恢复EEPROM 传输中途被复位拉死 SDA 时,初始化补 9 个时钟释放总线
- BL找不到有效 APP 时 3s 快速重试(原等 IWDG 26s回退分支跳转前校验 APP 有效性;复位原因打印
- SmartConfig 配网时 NET_LED 100ms 快闪提示;配网超时 60s→100s新增 PRODUCT_WITH_GPS 宏开关 GPS 功能
- HardFault 串口兜底打印(轮询 USART1
- 工程整理bin 输出到 OutputBin/、编译对象到 Object/、AfterBuild 拆两条命令修复 bin 不更新
### 修复
- 首启偶发看门狗复位I2C 总线被拉死(加上述恢复)
- 重启记录回卷一次丢 9 条:改一记录一扇区,真正滑动覆盖
- 电量显示负数:限幅 0~100%3.3V 基准下跌失真)
- OTA 结果/确认上报超时net 任务与业务任务竞争共享接收缓冲 → NET_process 消费加锁、发布改 2s 超时锁
## V1.5 —— 蓝牙模块自动配置 + GBK 日志 + 日志等级
### 新增
- HLK-B40 蓝牙模块自动配置(`ble_at.c`
- PB0开漏控制模块 PC5 进 AT 模式,上电设 `AT+NAME=<BLE_NAME 宏>` + GATT UUIDFFE0 服务 + FFE1 收发共用特征JDY-31/HM-10 同款,通用 BLE 串口 APP 可连AT+REBOOT 生效
- EEPROM偏移 132缓存已配置名称命中则开机**完全跳过 AT 流程**(零 AT 窗口,蓝牙 APP 不再断联,开机最早的重启记录日志都能看到);`BLESET` 命令手动强制重设
- 串口日志改 GBK 编码输出(源码整体 UTF-8→GBK 转换,串口工具选 GBK 显示中文)
- 日志等级六档命令:`LOGTRACE/LOGDEBUG/LOGINFO/LOGWARN/LOGERROR/LOGFATAL`(无下划线便于手机输入),`LOG` 查询显示等级名;写 EEPROM偏移 160断电保持
- USART1/USART2 接收 ORE 自愈(蓝牙模块重启乱码不再打死命令通道)
- U2_CopyBuff 20KB→10KBRAM 占用 45.8KB→35.8KB
### 修复
- 蓝牙改名被撞写APP 数据撞进 AT 窗口把名字写成 "info" → 改"先查询后设置"幂等流程(名字已对就不开 AT 窗口)
- 设置后当场回查失败:模块设置重启才生效,改为下次开机查询校验
- OTA 结果/确认上报超时net 任务与业务任务竞争共享接收缓冲 → NET_process 消费加锁、发布改 2s 超时锁
### 追加HLW8032 电能计量2026-08
- 新增 `HardWare/HLW8032/`UART5(PD2 只收) 4800-8E1 接收芯片每 50ms 主动上报的 24 字节帧,
帧同步(0x55/0xAA/0xFx + 0x5A)+校验和验证;只取 PF 脉冲累计换算累计电量
- 电量按手册公式换算kWh = 总脉冲×功率参数×电压系数×电流系数/(10^9×3600)
PF 16 位溢出靠数据更新寄存器 bit7 翻转计数50ms 一帧不会漏);芯片断电重启自动重新基准
- 系数宏 `HLW_U_COEF`(2.004)/`HLW_I_COEF`(0.5) 在 main.h对应 ZMPT107-1(100K/49.9R)+CT 1000:1(2R)
- 芯片在线时每分钟日志打印电压/电流/功率/电能(调试校准用)
- 修复:计划内复位(心跳超时/被踢/OTA/命令复位等 reset_log_mark 覆盖点)前未保存电量 →
reset_log_mark 里统一调 hlw8032_save(),复位不再丢未落盘的电量
- 修复PD2 浮空噪声/真实帧使 online 为真后,每分钟电能日志在 sys_task(1KB 栈) 里格式化 4 个浮点数
导致栈溢出卡死看门狗复位 → sys_task 栈加到 2KB帧同步加"连续 3 帧且间隔 20~150ms"防噪声假同步
- 累计脉冲(uint64)持久化 EEPROM 偏移 164每攒约 0.1kWh 写一次 + 断电预警时立即写(法拉电容续航内)
- 平台上报标识符 `energy`kWh 两位小数MQTT 就绪且芯片在线时每分钟一次4G/WiFi 双通道
- UART5 带 ORE 自愈硬件B0505S 隔离电源 + 光耦,芯片 TXD 接 PD2
### 追加新硬件引脚2026-08
- `CAT_PWR`(PC4)4G 模块开机脚,开漏输出,上电拉低=模块开机
- `ESP_EN`(PA6)WiFi 模块使能,推挽输出,上电置高=模块工作
- `BT_RST`(PA7):蓝牙复位脚,推挽输出,默认拉低=正常工作(高=复位,预留)
- `BT_MODE`(PB0):蓝牙 AT/透传切换此前版本已实现ble_at.c 开漏控制)
- 新增 OLED 屏幕128x64 + 晶联讯 GB2312 字库 IC`HardWare/OLED/oled.c`GPIO 模拟 SPI
CLK=PC12 MOSI=PC9 DC=PC8 CS1=PC7 FSO=PC6 CS2=PB151s 刷新电压/电流/功率/电能/继电器/网络状态
- OLED 界面重构未联网只显示联网进度4G 各阶段中文提示 / WiFi 固定热点搜索倒计时 /
SmartConfig"请打开APP广播"倒计时),联网后才显示电能/开关/网络/运行时间;
开关状态改中文(开关:开开关关);防烧屏每 10s 内容右移 0/2/4px 轮换
- 产品模式 PRODUCT_WITH_FEED_SCALE 改为运行时可切EEPROM(172) 存 0/1空白用 main.h 宏默认),
蓝牙命令 SCALE 查询 / SCALE0=无秤四路继电器 / SCALE1=带秤称重投料,切换后自动重启生效;
原 9 处 #if 编译分支全部改运行时判断(状态上报字段/sw1·feeding 语义/继电器1记忆/秤轮询)
- OLED 欢迎页改"继电器控制终端 / V1.5.0 RTOS";修复 4G 阻塞建链期间屏幕不显示联网进度
bg_delay 挂调度器启动前的 500ms 刷新钩子)
- 电能底数:首次同步补足 1.00kWh(平台过滤 0 值,保证上电即有数据显示)
- 电能上报策略:>10W 每 30s 一次≤10W 仅首次联网报一次,开关切换随状态大报文携带
- 电流零点偏移(HLW_I_ZERO_A)/功率死区+偏移(HLW_P_DEAD_W/HLW_P_ZERO_W)
电压/电流/功率 EMA 滑动平均滤波(1/8) 压空载跳变HLW8032 连续 3 帧 20~150ms 防噪声假同步
- 修复 4G MPUB 转义错误:`` 误写为 C 八进制 ``(=0x12 字节)energy/pow/指令应答
共 8 处独立报文平台收不到(上电能收到是因为状态大报文转义本来就对)
- OLED 欢迎页按产品模式显示标题;运行时间改 天:时:分 格式
- 新增 SIM 卡号上报4G 初始化 SIM 就绪后 AT+ICCID 读卡号MQTT OK 后随 pow 上报平台
(标识符 iccid字符串平台物模型加字符串字段即可便于物联网卡套餐到期查询缴费
- 4G 运行时关闭 WiFi 模块ESP_EN(PA6) 默认低电平,切 WiFi 才拉高、切回 4G 拉低断电(省电/延长法拉电容续航)
- 断电消息提速:电量 <10% 判定从 3s 去抖改为 100ms 快速复核确认后优先发 pow:0再写记录 500ms 让模组发完再复位5.5F 电容下原逻辑来不及上报
- 修复 OTA 确认通知发送失败("重试 3 次无 OK"):确认从首次发布+3s 延后到 +9s 避开开机上报风暴;
本地确认标志/版本号先于通知落盘(通知失败不再影响防回滚);通知未送达每 30s 重试直到成功;
开机 pow/ICCID 上报间隔拉开到 300ms
- 断电上报再提速PA0 检测从 1s 轮询改 50ms 快轮询(检测+确认 ~150ms 触发);先发包后打日志;
修复发送通道忙时掉电消息被丢弃不重试的问题NET_publish_power 返回状态,忙则 50ms 后重试直到发出)
- 修复 4G OTA 失败后"假死"(平台不可控/无法再 OTAOTA 入口会复位 4G 模组MQTT 已断但
ready 标志未清S1~S4 等前置失败退出后设备假在线。现改为任何 OTA 失败路径退出后
标记原因(RSN_OTA_FAIL "OTA失败中止")并主动复位,重启走干净 4G 初始化恢复联网
- 修复 OTA 的 SAPBR 激活承载概率性失败OTA 入口复位模组后未等网络重新附着(CATT)就
激活承载,注册慢时必失败。现 CSQ 后加 cat_wait_cgatt_attached(30),附着成功才走 SAPBR
- 新增代码版本上报:标识符 fwver字符串内容=FIRMWARE_VERSION_STR每次重启联网后上报一次避开与整数 ver 重名)
- 485 秤调试日志增强:收到帧先打印原始 hex解析失败输出具体原因
(帧过短/站号不符/异常帧/功能码不符/CRC 错误各带说明)
- PRODUCT_WITH_FEED_SCALE 编译默认值改为 1默认带秤EEPROM 172 空白时生效)
- GPS 定位改运行时可切(与 SCALE 同机制EEPROM(173),蓝牙 GPS 查询 / GPS0 关 / GPS1 开,
切换自动重启生效;原 5 处 #if 编译分支改运行时判断GNSS 初始化/GPS 轮询)
- OTA 通知链理顺:下载完成后的 result.post(success) 改为发了就走不等 OK下载后 MQTT 会话可能僵死,
等 OK 白卡 12s 且发不出);平台以重启后的 confirm.post等 OK+30s 重试必达)为权威成功信号
- OTA 闭环修复W25Q64 OTA 信息结构新增 ota_id平台任务 id 随固件信息落盘),新固件首启确认时
在可靠连接上补发 result.post(success=1, 任务id) + confirm.post——平台"完成"标志可正常闭环
- 注意OTA 信息结构变化BootLoader 的 w25q64.h 已同步,**需 J-Link 刷一次新 BL**
(旧 BL 读不了新格式,会认不出待安装固件)
- OTA 闭环(兼容版):回退 W25Q64 结构改动BL/APP 共享结构不能动,现场无法刷 BL
平台任务 id 改存 APP 私有 EEPROM(175~194),新固件首启确认时在可靠连接上补发
result.post(success=1, 任务id) + confirm.post送达后清回 0xFF
- OTA 进度上报改可靠发送progress.post 等 OK 确认(失败自动重试 1 次,每 10% 最多多花 ~3s
平台"升级中"标志可置位;若无应答打印 WARN
- 修复 OTA 后版本序号平台不刷新OTA 确认保存版本号后立即补发一次状态+fwver
(原先要等踢线/重启/拨开关触发上报才更新)
- 修复重启后磅秤重量平台一直为 0首次重量上报被 AT 忙丢弃后不重试,
改为发布成功才置标志,失败下轮查询继续重试
- 新增实时功率上报:标识符 power单位 W一位小数与 energy 合并同一条报文
>10W 每 30s否则首次+开关切换),平台物模型加 float 即可
- 新增蓝牙发射功率配置main.h 宏 BLE_TX_POWERAT+RFPOWER 1~18 级,默认 8
功率值并入 EEPROM 缓存判断(偏移 158改宏后下次开机自动重设一次
- 断电消息发送加固pow:0 改等模组回 OK~1.5s/次,最多 3 次)+ OK 后留 800ms 空口时间;
3 次都失败也照常写记录复位(不因发送失败丢断电记录)
- 去掉电能底数 1kWh 机制(用户确认平台可正常显示小数值)
- 新增蓝牙 ENCLR 命令累计电能清零RAM+EEPROM 同步,无需重启)
- OLED 带秤模式第 3 行改显示重量(`重量:xx.xKG`),读不到时显示原因
(无应答/帧短/CRC错/秤异常帧/站号不符);无秤模式仍显示开关状态
- 断电预警时 OLED 关显示0xAE 黑屏,省电+避免残影)
- 去掉 OLED 防烧屏左右偏移(断电已关屏,偏移意义不大)
- 修复 485 首次应答丢失USART2 接收可能因 ORE 残留状态卡死(自愈重挂因 RxState 非 READY 静默失败),
现每次查询前 USART2_ForceRxReset() 强制复位接收(清错误/缓冲+重挂中断),首包不再丢
- 修复 485 回声吃应答帧头:查询 TX 后等 5ms 清回声缓冲;解析时改为在帧内定位 01 03 04 帧头,
抗回声/前导垃圾(快速应答不再被吞前几个字节)
- 修正 485 修复方案:去掉 TX 后清缓冲(会吃掉快速回复的前几个字节),
改为回声帧按内容识别静默丢弃(与查询命令完全一致的帧),合并帧靠 01 03 04 帧头搜索解析
- 485 首次查询延迟 3s避开上电窗口防止首个应答被开机繁忙期撞坏
- 485 查询日志增强:查询发出 1s 无任何应答帧打 WARN无应答有应答则原有 hex/解析日志覆盖
- 撤掉 485 查询前的 ForceRxResetAbortReceive 重挂会把接收搞死,只收到应答最后一个字节);
改为只清软件缓冲不动硬件,接收回到最初常开方式;帧头搜索/回声识别/无应答日志保留
- 根治 485 接收停摆HAL 处理 ORE 错误后 RxState 常卡 BUSY_RX自愈里的 Receive_IT 静默失败
→ 错误回调重挂前强制 RxState=READY查询前清缓冲时顺带检查接收中断是否停摆并拉起不 Abort
USART1/USART5 自愈同样加固
- 485 丢帧根因定位并加固:上位机秒回时回复帧头被 485 收发器切换延迟切掉(真秤有处理延迟不受影响);
现 400ms 无好帧或收到坏帧自动补发一次查询,仍不行才报无应答
- 485 取帧改原子操作USART2_PollFrame 判静默+拷出+清缓冲一步完成,替代 Tick 置标志/GetFrame 取帧
的两步交接(交接窗口会被查询补发的清缓冲打断丢帧)
- 485 接收架构重写为 DMA+IDLEDMA1_Channel6 + 空闲中断定帧,与 4G/WiFi 同架构):
根治字节中断+软件超时方案的丢帧/停摆问题;实测秒回/慢回全部一次成功。
过程DWT 硬件观察点抓到合法写点无误,定位为原中断接收路径在特定时序下字节丢失
- 恢复 OLED 防烧屏像素偏移每10s 右移 0/2/4px并修复左侧残留移位前先写空格清腾空列
- OLED 偏移幅度加大到 0~24px5 档),按内容宽度自动钳位不越界,左侧腾空列全量清空
- 蓝牙 AT 设置加固AT 窗口内静音日志UART1 与模块共用,日志字节会污染模块命令解析);
进 AT 模式+查询无应答时重新拉 PC5 重试,最多 3 轮
- 断电时序微调:确认断电后先关 OLED 屏再发掉电消息(黑屏更快+给模组留更多发送电量)
- 断电时序改为:先发掉电消息(等OK) → 屏幕显示"发生掉电事件!"亮 3 秒 → 熄屏复位
- 蓝牙设置流程开头先硬复位模块BT_RST/PA7 拉高 100ms防模块状态异常时 PC5 进不了 AT 模式
- OLED 新增复位脚 PB14初始化前给 10ms 低脉冲硬件复位屏幕,防止上电时序异常花屏
- 电能/功率上报改为固定每 3 分钟一次(不再按功率阈值区分)