# STM32固件端文档 ## 1. 端侧职责 - 从 K210 串口接收识别结果。 - 在本地执行签到逻辑(时间段判断、重复判定、缓存与重传)。 - 通过 ESP8266 将签到数据以 AES-128-CBC 加密后上传服务端。 - 维护 RTC(DS1302)与网络时间同步。 对应入口文件:`User/main.c` ## 2. 关键模块 - 主流程:`User/main.c` - 考勤逻辑:`Hardware/Attendance.c` - WiFi/HTTP:`Hardware/esp8266.c` - 加密:`Hardware/Crypto.c` - RTC:`Hardware/DS1302.c` - 光照补光:`Hardware/LightSensor.c` - K210串口解析:`Hardware/K210_USART.c` ## 3. 当前默认配置(代码内) 文件:`User/main.c` - `WIFI_SSID`: `yzfh` - `WIFI_PASSWORD`: `yzfhroot` - `HTTP_SERVER_IP`: `27.106.113.205` - `HTTP_SERVER_PORT`: `8082` - `CLASS_ID`: `1` 建议将上述配置改为部署环境参数后再编译烧录。 ## 4. 通信与接口 STM32 通过 `ESP8266_HttpGet` / `ESP8266_SendEncryptedData` 访问服务端: - `POST /api/checkin`:上传加密签到数据(必带 `X-Encrypted: AES128-CBC`)。 - `GET /api/time`:获取服务器时间戳。 - `GET /api/timeslots`:下载时间段配置。 - `GET /api/check_duplicate`:按时段查重。 - `GET /api/today_records`:下载今日已签到学号列表。 ## 5. 主流程说明 1. 系统初始化(OLED、串口、考勤模块、加密模块、RTC、传感器)。 2. 初始化并连接 ESP8266 到 WiFi 与 HTTP 服务器。 3. 可用时同步网络时间到 DS1302。 4. 定时拉取时间段配置。 5. 处理 K210 上报的人脸识别结果: - 置信度通过阈值后进入签到逻辑。 - 本地去重 + 服务器时段去重。 - 记录加入本地队列并尝试上传。 6. 网络异常时离线缓存,恢复后批量补传。 ## 6. 调试建议 - 优先看串口调试输出(`DEBUG_PRINT` 系列)。 - 检查 `g_wifi_connected`、`g_server_connected` 变化。 - 若频繁重连,先确认 AP 稳定性、服务器可达性与 8082 端口。 ## 7. 构建与烧录 工程为 Keil 工程: - `Project.uvprojx` - `Project.uvoptx` 按当前板卡配置在 Keil 中编译并烧录。 ## 8. 依赖与注意事项 - 与服务端 AES Key/IV 必须一致(否则 `/api/checkin` 解密失败)。 - DS1302 可用时优先作为本地时钟;不可用则回退网络时间。 - `Attendance.c` 的默认时间段仅为兜底,实际以服务器下发为准。