shuichan_old/V1.5/版本说明.md

12 KiB
Raw Blame History

版本说明

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 写一次 + 断电预警时立即写(法拉电容续航内)
  • 平台上报标识符 energykWh 两位小数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 字库 ICHardWare/OLED/oled.cGPIO 模拟 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 后重试直到发出)