 (tag: v1.22) HAL库函数更新
### 一、核心架构变更
#### 1. 寄存器定义拆分
- **原架构**：所有模块（ADC、GPIO、MCPWM 等）的寄存器结构体（`HAL_XXX_TypeDef`）都定义在 `hal_lks32mc09x.h` 中，文件冗余过大。
- **新架构**：将寄存器定义拆分到独立文件 `hal_lks32mc09x_reg.h`，原文件 `hal_lks32mc09x.h` 仅保留中断接口、默认时钟参数和头文件包含，结构更清晰。

#### 2. 中断函数统一封装
新增 **标准化中断函数命名规则**，格式为 `HAL_模块名称_IRQHandler_模块序号_中断序号`，同时提供简化写法，便于跨模块统一调用：
```c
// 完整命名（支持多模块/多中断）
#define HAL_TIMER_IRQHandler_00 TIMER0_IRQHandler
#define HAL_MCPWM_IRQHandler_01 MCPWM1_IRQHandler
// 简化写法（默认使用模块0的中断0）
#define HAL_TIMER_IRQHandler HAL_TIMER_IRQHandler_00
#define HAL_MCPWM_IRQHandler HAL_MCPWM_IRQHandler_00
```
- 不支持的中断（如 `CAN`、`WWDG`）提供空占位宏（`XXX_Null`），避免编译报错。

#### 3. 默认时钟参数补全
明确芯片上电默认时钟配置，方便驱动初始化时直接引用：
```c
#define HAL_INIT_DEFAULE_MCLK    96000000  // 默认主时钟96MHz
#define HAL_INIT_DEFAULE_MCLK_US 96        // 1μs分频系数（MCLK/96=1MHz）
#define HAL_INIT_DEFAULE_MCLK_MS 96000     // 1ms分频系数（MCLK/96000=1kHz）
```


### 二、重点模块接口更新
#### 1. ADC 模块（`hal_lksmcu_adc.h`）
- **通道定义补全**：明确区分 ADC0/ADC1 专属通道（如 ADC0 支持 `HAL_ADC_PORT_REF` 内部基准电压，ADC1 支持 `HAL_ADC_PORT_TMP0` 温度传感器）。
- **新增 IO 配置接口**：补充 GPIO 与 ADC 功能绑定的函数，避免用户直接操作寄存器配置引脚复用：
  ```c
  void HAL_ADC_SetGpioIn(HAL_ADC_x, HAL_GPIO_Px);         // GPIO 配置为 ADC 输入
  void HAL_ADC_SetGpioTriggerOut(HAL_ADC_x, HAL_GPIO_Px); // GPIO 配置为 ADC 触发输出
  ```

#### 2. 时钟模块（`hal_lksmcu_clk.h`）
- **修正支持的时钟频率**：移除不支持的 `4MHz/6MHz/192MHz`，补全芯片实际支持的 RC 时钟档位（8MHz/9MHz/12MHz~96MHz），并标注不支持的晶振（XTAL）模式。

#### 3. 比较器模块（`hal_lksmcu_cmp.h`）
- **通道配置精细化**：扩展正端输入通道（如支持运放输出、DAC 输出、反电动势虚拟中心点），明确通道编号与硬件引脚的映射关系。
- **新增功能接口**：
  ```c
  uint32_t HAL_CMP_SetDigitalFilter(HAL_CMP_x, uint32_t filter); // 配置数字滤波宽度
  uint8_t HAL_CMP_GetData(HAL_CMP_x);                           // 获取比较器输出结果
  void HAL_CMP_SetGpioIn(HAL_CMP_x, HAL_GPIO_Px);               // 配置 GPIO 为比较器输入
  ```

#### 4. DMA 模块（`hal_lksmcu_dma.h`）
- **接口规范化**：补充 `I2C` 模块的 DMA 收发接口，修正 `SpiRxTx` 函数参数（区分发送/接收缓冲区）：
  ```c
  void HAL_DMA_I2cTx(HAL_DMA_x, HAL_I2C_x, uint8_t *start, uint32_t len); // I2C DMA 发送
  void HAL_DMA_SpiRxTx(HAL_DMA_x tx_dma, HAL_DMA_x rx_dma, HAL_SPI_x spi, 
                       uint8_t *txdata, uint8_t *rxdata, uint32_t len);    // SPI 双向 DMA
  ```

#### 5. Flash 模块（`hal_lksmcu_flash.h`）
- **新增基础读写接口**：补充单字节/半字/字的读取函数，支持任意长度数据读取：
  ```c
  uint8_t HAL_FLASH_ReadUint8(HAL_FLASH_x, uint32_t flashaddr);  // 读1字节
  uint16_t HAL_FLASH_ReadUint16(HAL_FLASH_x, uint32_t flashaddr);// 读2字节
  uint32_t HAL_FLASH_ReadUint32(HAL_FLASH_x, uint32_t flashaddr);// 读4字节
  ```
- **安全参数存储**：新增带校验的参数保存/读取接口（含 CRC32 校验、默认值回退），适用于关键配置（如校准参数）：
  ```c
  void HAL_FLASH_SecurityParameterSave(HAL_FLASH_x, void *defaultdata, void *data, uint32_t len);
  uint32_t HAL_FLASH_SecurityParameterRead(HAL_FLASH_x, void *defaultdata, void *data, uint32_t len);
  ```

#### 6. DAC 模块（`hal_lksmcu_dac.h`）
- **新增 GPIO 输出绑定**：补充 DAC 输出与 GPIO 绑定的接口，简化引脚配置：
  ```c
  void HAL_DAC_SetGpioOut(HAL_DAC_x, HAL_GPIO_Px); // 配置 GPIO 为 DAC 输出
  ```


### 三、其他优化点
1. **注释规范**：所有寄存器位定义、函数参数都补充了详细说明（如 ADC 增益选择位 `GAIN` 明确 `0:±3.6V`/`1:±5V` 量程），降低开发门槛。
2. **兼容性处理**：对不支持的模块（如 `CAN`、`OPAx` 运放4~5）保留接口定义但标注“不支持”，确保上层代码兼容性。
3. **寄存器位格式修正**：统一寄存器位描述的标点和格式（如将 `,` 改为 `,` 加空格，去掉多余换行），提升可读性。


### 四、使用注意事项
1. **头文件包含顺序**：需先包含 `lks32mc09x.h`（芯片寄存器地址定义），再包含 `hal_lks32mc09x.h`，避免编译错误。
2. **中断使用**：所有中断函数需通过 `HAL_XXX_IRQHandler` 宏调用（而非直接使用底层中断名），确保兼容性。
3. **Flash 操作**：调用 `HAL_FLASH_Erase/Program/Update` 前，需确保目标地址为“扇区对齐”（通过 `HAL_FLASH_ReadSectorSize` 获取扇区大小）。
4. **时钟配置**：`HAL_CLK_SetMcuFreq` 仅支持 `HAL_CLK_FREQ_RC_XXX` 系列（RC 时钟），`XTAL` 系列为预留接口，实际使用需结合芯片 datasheet 确认。
 (tag: v1.21, origin/main, origin/HEAD) 调整掉电检测电压阈值的宏定义，增加了兼容性宏，添加SYS_WaitPowerReady函数用于等待电源就绪，更新SYS_SetPowerFailureDetection函数的实现。
 (tag: v1.20) 修改CMP_Init函数，将禁用的比较器通道从0改为1。
 (tag: v1.19) 此提交对多个源文件的初始化函数进行了修改，主要是将结构体初始化循环中的迭代次数和类型强制转换进行了调整，以确保正确地将结构体内存置零。具体改动包括：将基于`sizeof(StructType) / sizeof(ElementType)`的循环改为直接基于`sizeof(StructType)`，并将元素类型从`uint16_t`或`uint32_t`改为`uint8_t`，以字节为单位进行置零操作。
 (tag: v1.18) 提交修正了CMP初始化函数：为CMP_CHN_0和CMP_CHN_1添加禁用逻辑，修改了时钟配置寄存器写操作以使用正确的结构体字段，并启用了CMP0的时钟。
 (tag: v1.17) 该提交修正了多处拼写错误（如WEAK→WAKE），更新了DMA触发源宏定义命名，优化了结构体初始化循环变量类型，添加了模块实例检查条件，修复了ADC时钟控制逻辑，更新了用户手册版本日期，并修正了I2C/SPI等外设初始化中的潜在空指针问题。
 (tag: v1.16) 提交修改了lks32mc09x_adc.c和lks32mc09x_mcpwm.c两个文件：在ADC文件中，更新了ADC采样值处理逻辑，特别是针对使用内部基准时的情况；在MCPWM文件中，移除了旧的IO配置逻辑，增加了新的IO配置函数，并调整了初始化结构体清零的方式，同时在文件末尾添加了新的函数用于更新failIO状态。
 (tag: v1.15) 更新CMP结构体成员命名并修复相关函数调用，新增DAC和OPA模块初始化结构体及函数实现，统一各模块StructInit函数中循环变量声明方式并修复类型转换问题。
 (tag: v1.14) 提交增加了DMA初始化函数中的功能：启用DMA并根据DMA通道配置相应的中断使能寄存器位。
 (tag: v1.13) 该提交优化部分hal库函数接口，更新了LKS32MC09x用户手册头文件，主要修改了注释格式，将所有`uint32_t`强制类型转换移到了宏定义右侧，并修正了部分位域注释的对齐方式，同时更新了文件头部的日期和版本信息。
 (tag: v1.12) 增强CMP模块配置结构体和初始化函数，并优化了相关模块的代码实现和功能。 HAL层：重命名和重构寄存器定义、更新ADC采样通道配置、修正GPIO时钟使能位、修复看门狗相关错误、更新MCPWM输出状态定义和配置、修正SPI寄存器名称、调整TIMER寄存器配置、添加用户手册头文件。
 (tag: v1.11) 添加SLA_2025.pdf文件。
 (tag: v1.10) 更新LICENSE文件，将版权从xiaobai67更改为LINKO SEMICONDUCTOR Co., Ltd并添加保留所有权利声明。
 (tag: v1.09) 添加了BSD 3-Clause许可证文件。
 (tag: v1.08) 代码格式化命令修改：从BreakBeforeBraces: Linux改为BreakBeforeBraces: Allman。
 (tag: v1.07) 提交更新了两个源文件：lks32mc09x_adc.c和lks32mc09x_wake.c。在lks32mc09x_adc.c中，启用了根据ADC实例（ADC0或ADC1）写入相应校准值的代码。在lks32mc09x_wake.c中，调整了进入休眠模式的流程，包括在休眠前关闭时钟使能、在唤醒后禁用中断并恢复之前的中断状态，以及调整寄存器写保护的顺序。
 (tag: v1.06) 功能完善：在timer初始化配置周期时，对TH进行限幅，时钟初始化时，增加必要的延迟，完善SYS_ReadMcuClk函数。
 (tag: v1.05) No initial response content found. None
 (tag: v1.04) 统一代码格式，参考： "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: v1.03) 添加从用户手册生成的头文件，包含所有模块的寄存器定义和位掩码配置。
 (tag: v1.02) No initial response content found. None
 (tag: v1.01) 提交更新包括：修正了`lks32mc09x_cmp.h`中的宏定义注释格式，增加了`CLK_DIV1`寄存器定义并调整相关保留位定义，在`lks32mc09x_sys.c`中新增了复位外设功能函数，包括复位所有外设、复位内部外设和复位IO，并优化了`CMP_SetSignal`函数中对`AFE_REG3`寄存器的操作。
 (tag: v1.00) 提交添加了三个系统复位函数到lks32mc09x_sys.h，分别用于复位所有外设、复位所有内部外设（除IO）和复位所有IO为默认值，并删除了test.c文件。
