diff --git a/App/main.c b/App/main.c index 76f4b47..aa0dd58 100644 --- a/App/main.c +++ b/App/main.c @@ -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 主频来写的,两边必须一致。 + * ========================================================================= */ + /* ========================================================================= * 系统全局变量定义 * ========================================================================= */