docs(main): document 24MHz ISP burn requirement at top of main.c

Confirms via code inspection that the firmware isn't uniformly driven
by MAIN_Fosc: Uart1_Init()'s Timer2 baud-rate reload and rf.c/timer.c's
tick-to-microsecond conversion assume an actual 24MHz clock as
hardcoded constants, not values computed from MAIN_Fosc. Flashing at a
different STC-ISP clock setting would silently break UART baud rate
and RF timing without an obvious compile error.
This commit is contained in:
edisondeng
2026-07-31 18:28:52 +08:00
parent f9bea08375
commit cbd480eea3

View File

@@ -9,6 +9,30 @@
#include "../Drivers/lcd.h"
#include "../Drivers/timer.h"
/* =========================================================================
* 【烧录必读】STC-ISP 下载时时钟频率必须选择 24MHz且不能只改这一处
* =========================================================================
* 本项目代码里多处对"芯片实际运行在 24MHz"这件事做了硬编码假设,而不是每处都
* 从 MAIN_Fosc 动态换算;如果烧录时在 STC-ISP 里选了别的 IRC 频率(或换成外部
* 晶振但频率不是 24MHz),下面这些地方会全部跟着出错,不是改一下 config.h 里的
* MAIN_Fosc 常量就能自动生效的:
* 1. App/config.h:169 MAIN_Fosc = 24000000UL —— 大部分模块的换算基准。
* 2. Drivers/timer.c Timer1_Init() 里 1ms 定时重装值由 MAIN_Fosc 动态算出,
* 跟着 MAIN_Fosc 改没问题。
* 3. App/database.c IAP_TPS 由 MAIN_Fosc 动态算出 (Flash 读写/擦除等待周期)
* 跟着 MAIN_Fosc 改没问题,但算错会导致 Flash 读写异常甚至数据损坏。
* 4. App/system.c Uart1_Init() 里 Timer2 波特率重装值 (T2L=0xCC, T2H=0xFF)
* 是按 24MHz/115200 手工算好直接硬编码的数字,***不会跟着 MAIN_Fosc 变化***
* 实际主频不是 24MHz 时串口波特率会直接算错,调试串口输出全部变乱码。
* 5. Drivers/rf.c/timer.c 里所有 EV1527 时序阈值和 RF_Delay_us() 都基于
* "Timer0 工作在标准 12T 模式、1 个计数节拍 = 12/Fosc 秒"这个换算关系,
* 代码里到处写的 "0.5us/tick"、"* 2UL" 都是 12/24MHz = 0.5us 这个具体
* 数字,***同样不会跟着 MAIN_Fosc 变化***,主频不对会导致 RF 收发全部解码/
* 发射失败。
* 结论:必须保证 STC-ISP 烧录时选择的时钟频率就是 24MHz代码里各处的计时也
* 都是按实际运行在 24MHz 主频来写的,两边必须一致。
* ========================================================================= */
/* =========================================================================
* 系统全局变量定义
* ========================================================================= */