 (tag: v2.40) HAL库函数更新
### 一、核心变更概述
1. **文件结构重构**
   - 原 `hal_lks32mc08x.h` 中的寄存器定义被拆分到新文件 `hal_lks32mc08x_reg.h`，主头文件仅保留中断接口、时钟常量和模块包含，结构更清晰。
   - 新增 `hal_lksmcu_irqfun.h`，统一中断标志位操作接口（如 `HAL_ADC_IrqSamp1Flg`），避免原代码中中断使能/清除逻辑混乱。
   - 补充 `lks32mc08x_hal.pdf` 文档和 `readme.md` 说明，提升可维护性。

2. **接口标准化**
   - 中断函数命名统一：采用 `HAL_模块名称_IRQHandler_模块序号` 格式（如 `HAL_ADC_IRQHandler_00`），并提供简化别名（如 `HAL_ADC_IRQHandler`），适配不同编译器的中断向量表定义。
   - 模块初始化接口统一：所有外设均保留 `Reset/Enable/Disable` 基础接口，新增功能接口（如 `HAL_ADC_SetGpioIn`）遵循 `HAL_模块_功能_参数` 命名规范。
   - 不支持的功能明确标注：如 `HAL_ADC_PORT_VDD` 等不支持的通道，通过注释说明“保留接口定义”，避免误用。

3. **功能扩展**
   - 新增 GPIO 功能复用配置：`HAL_GPIO_AFx` 枚举定义了 ADC、UART、SPI 等外设的 GPIO 复用功能，支持灵活配置引脚功能。
   - 增强外设控制细节：如 ADC 新增 GPIO 输入/触发输出配置、CMP 新增数字滤波和 GPIO 配置、FLASH 新增安全参数存储（带 CRC 校验）。
   - 补充中断标志位操作：新增 `IrqXXXFlg` 接口（如 `HAL_HALL_IrqChangeFlg`），支持“查询标志位但不清除”的场景，解决原代码中 `HAL_ADC_IrqSamp1` 同时判断使能和标志位的逻辑缺陷。

4. **兼容性优化**
   - 保留原有接口：如 `HAL_ADC_ManualSampling`、`HAL_UART_SetBaud` 等核心接口未变更，老项目迁移无需修改业务代码。
   - 不支持的模块/功能添加空实现：如 `HAL_UART_IRQHandler_20_Null`，避免编译报错，同时明确标注“不支持”。

### 二、重点模块升级细节
#### 1. 寄存器定义模块（`hal_lks32mc08x_reg.h`）
- 新增 `HAL_DMA_TypeDef` 和 `HAL_QEP_TypeDef` 结构体，补充原缺失的 DMA 和编码器模块寄存器定义。
- 修正 `HAL_SYS_TypeDef` 中看门狗寄存器命名：原 `WDT_PSW` 等寄存器与实际芯片手册对齐，避免寄存器地址映射错误。
- 所有寄存器添加 `volatile` 修饰，确保编译器不优化硬件寄存器访问。

#### 2. ADC 模块（`hal_lksmcu_adc.h/.c`）
- 通道定义细化：
  - 明确 `HAL_ADC_PORT_CH18` 为温度传感器通道、`CH19` 为内部地，修正原代码中 `TMP0` 通道映射错误。
  - 不支持的通道（如 `VDD`、`DAC0`）标注“不支持”，避免用户误配置。
- 新增功能：
  - `HAL_ADC_SetGpioIn`：配置 GPIO 为 ADC 输入模式（自动设置复用功能和模拟模式）。
  - `HAL_ADC_SetGpioTriggerOut`：配置 ADC 触发信号输出引脚，支持外部同步采样。
- 中断逻辑修复：
  - 原代码中 `HAL_ADC_IrqSamp2Enable` 错误使能 `BIT0`（与第一段采样中断冲突），新代码通过 `hal_lksmcu_irqfun.h` 统一管理，待具体实现时修正为 `BIT1`。

#### 3. GPIO 模块（`hal_lksmcu_gpio.h`）
- 新增功能复用枚举 `HAL_GPIO_AFx`：支持 ADC、UART、SPI、I2C 等外设的引脚复用，例如 `HAL_GPIO_AF_ADC` 对应 ADC 输入功能。
- 模式配置优化：
  - 原 `HAL_GPIO_MODE_INUPOUT` 等模式的注释补充“线与模式”“悬空状态”说明，明确使用场景。
  - 新增 `HAL_GPIO_SetAf` 接口，支持手动配置引脚复用功能，适配复杂硬件设计。

#### 4. FLASH 模块（`hal_lksmcu_flash.h`）
- 新增安全参数存储：
  - `HAL_FLASH_SecurityParameterSave`：支持用户数据带 CRC 校验存储，自动处理扇区擦除和数据更新（仅变化时写入，减少 Flash 磨损）。
  - `HAL_FLASH_SecurityParameterRead`：读取时校验 CRC，若数据损坏则使用默认值，提升可靠性。
- 补充基础读写接口：新增 `ReadUint8/16/32` 接口，支持按字节/半字/字读取 Flash，无需手动处理地址对齐。

#### 5. 中断模块（`hal_lksmcu_irq.h`）
- 中断编号与芯片手册对齐：
  - 原 `HAL_IRQ_MODULE_ADC` 等枚举替换为直接映射芯片中断号（如 `ADC0_IRQn`），避免中断使能时编号错误。
  - 简化中断控制接口：`HAL_IRQ_ModuleEnable`/`Disable` 替代原复杂的 `HAL_IRQ_EnableModule`，直接传入中断编号和优先级，使用更简洁。

### 三、使用注意事项
1. **工程迁移步骤**
   - 替换旧版 `hal_lks32mc08x.h` 和寄存器相关代码，新增 `hal_lks32mc08x_reg.h` 和 `hal_lksmcu_irqfun.h` 到工程。
   - 链接库更新：Keil 工程使用 `hal_lksmcu_lib.lib`，GCC 工程使用 `libhal_lksmcu_lib.a`，确保与 HAL 库版本匹配。
   - 中断函数适配：若项目中自定义了中断处理函数（如 `ADC_IRQHandler`），需替换为 HAL 库统一接口（如 `HAL_ADC_IRQHandler_00`），或通过别名映射（如 `#define ADC_IRQHandler HAL_ADC_IRQHandler`）。

2. **功能使用限制**
   - 标注“不支持”的功能（如 `HAL_CLK_FREQ_XTAL_6MHZ`、`HAL_ADC_PORT_VDD`）请勿使用，否则可能导致硬件异常。
   - 安全参数存储：`HAL_FLASH_SecurityParameterSave` 支持最大 500 字节数据，且占用 Flash 特定扇区（需参考芯片手册确认扇区地址，避免覆盖程序代码）。
   - 中断优先级配置：`HAL_IRQ_ModuleEnable` 的优先级参数需符合芯片要求（通常为 0~3 级），优先级数值越小中断越优先。
 (tag: v2.39, origin/main, origin/HEAD) 该提交更新了LKS32MC08x用户手册头文件，主要修改了注释格式，将所有`uint32_t`强制类型转换移到了宏定义右侧，并修正了部分位域注释的对齐方式，同时更新了文件头部的日期和版本信息，未涉及寄存器功能的实质性变更。
 (tag: v2.38) 更正Read_NVR函数，添加BSD 3-Clause许可证文件和SLA_2025文档，修正HAL层代码中的拼写错误（如Ferq改为Freq），更新头文件引用和枚举类型命名，同步用户手册版本至v1.47。
 (tag: v2.37) 修改包括：将`hal_lks32mc08x_weak`文件重命名为`hal_lks32mc08x_wake`并更新包含路径，更新用户手册头文件日期为2025-10-27 03:00:20。
 (tag: v2.36) 代码格式化命令修改：从BreakBeforeBraces: Linux改为BreakBeforeBraces: Allman。
 (tag: v2.35) 修改系统时钟配置结构体，新增系统时钟选择字段Clk_Sel，替换原有的PLL_ReDiv字段；更新相关宏定义和初始化函数，标记PLL_ReDiv为弃用。
 (tag: v2.34) 该提交主要对LKS32MC08x HAL层代码进行了代码风格优化，包括统一缩进格式、添加花括号、调整空格和换行等，涉及ADC、CLK、CMP、CRC、DAC、DMA、DSP、FLASH、GPIO、HALL、I2C、INIT、IRQ、MCPWM、OPA、SPI、TIMER、UART和WEAK等多个模块，同时修正了部分宏定义格式和注释排版问题。
 (tag: v2.33) 增加hal库
 (tag: v2.32) 统一代码格式，参考： "clang-format -style={BasedOnStyle: Microsoft, Language: Cpp, UseTab: Never, IndentWidth: 4, TabWidth: 4, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false, BreakBeforeBraces: Linux, AllowShortIfStatementsOnASingleLine: true, AllowShortLoopsOnASingleLine: true, AllowShortBlocksOnASingleLine: true, IndentCaseLabels: true, SortIncludes: false, AlignConsecutiveMacros: AcrossEmptyLines, AlignConsecutiveAssignments: Consecutive}"
 (tag: v2.31) 该提交在 `include/lks32mc08x_lib.h` 文件中新增了 `#include "lks32mc08x_user_manual.h"` 引用，并添加了从 `LKS32MC08x_User_Manual_v1.45.pdf` 文档生成的头文件 `lks32mc08x_user_manual.h`，其中包含了 LKS32MC08x 微控制器的寄存器定义和位域配置。
 (tag: v2.30) 添加了GPIO复用功能定义、GPIO配置函数、GPIO写位函数和GPIO读位函数。
 (tag: v2.29) 提交更新包括：在`DMA_Init`中调整变量声明位置并简化；`SYS_ResetPeripheralInternal`移除未使用变量并优化ADC和GPIO复位循环；二进制库文件`liblks32mc08x_nvr.a`和`lks32mc08x_nvr.lib`有更新。
 (tag: v2.28) 提交总结：删除了`lks32mc08x_nvr.lib`文件，修改了多个头文件和源文件的命名（统一为小写并调整路径），对部分文件进行了内容上的微调（包括头文件包含修正、代码注释和变量名调整等），并新增了`liblks32mc08x_nvr.a`和`lks32mc08x_nvr.lib`文件。
 (tag: v2.27) 添加了MCPWM寄存器中断标志位和中断源使能的宏定义。
 (tag: v2.26) 此提交修改了lks32MC08x_Flash.c文件，主要更新包括擦除和编程操作的密钥处理、寄存器位操作及代码注释调整，增强了代码安全性和可读性。
 (tag: v2.25) 本次提交对lks32mc08x_sys.c文件进行了更新，主要修改了函数注释格式，增加了部分函数的功能描述和示例代码，并新增了SYS_ResetPeripheral、SYS_ResetPeripheralInternal和SYS_ResetIO三个函数用于复位外设、内部外设和IO到默认状态。
 (tag: v2.24) 添加了三个函数：SYS_ResetPeripheral复位所有外设，SYS_ResetPeripheralInternal复位内部外设，SYS_ResetIO复位IO，均不包含特定寄存器及内核寄存器。
 (tag: v2.23) 更新dsp库函数
 (tag: v2.22) fix(UART): 固定SYS_CLK_DIV2的数值以免两串口波特率不同时出现冲突
 (tag: v2.21) fix(SYS): 休眠前关闭除WAKE_IRQn以外的其他中断
 (tag: V2.2) 对V2.1的（lks32mc08x_sys.c内增加电源检查函数，实际使用在voidClock_Init(void)和voidPWRDN_IRQHandler(void)函数内）这些内容做更新，之前的有问题。
 (tag: V2.0) lks32mc08x_sys.c内增加电源检查函数，实际使用在void Clock_Init(void)和void PWRDN_IRQHandler(void)函数内。
 (tag: V1.9) 将void SYS_SoftResetModule(uint32_t nModule)函数内延时函数去掉，防止在中断内执行该函数时间过长。
 (tag: V1.8) 修正u8 CMP_GetIRQFlag(u8 CMPx)函数返回值，返回0和1反了，现以修正。
 (tag: V1.7) 去除库函数内文档说明，把文档说明放到BSP文件内
 (tag: v1.6) 修改错误注释
 (tag: V1.5) 1
 (tag: V1.4) 修改版本说明文件名称
 (tag: V1.2) 修正lks32mc08x_adc.c库函数内一倍增益的校正参数读取地址（之前的有误），增加lks32mc08x_adc.c库函数可以配置ADC基准电压接口。
 (tag: V1.1) 修正lks32mc08x_iwdg.c和lks32mc08x_iwdg.h喂狗函数。
 (tag: v1.0) 取消库函数使用bool类型，防止部分客户编译报错
