#ifndef __HAL_lksmcu_CHIP__
#define __HAL_lksmcu_CHIP__
#include "include/hal_lksmcu_reg.h"
#include "lks32mc09x.h"

#ifndef LKS32MC09X
#define LKS32MC09X
#endif
#ifndef __LKS32MC09X_REG_H__
#define __LKS32MC09X_REG_H__

#include "lks32mc09x.h"
/**
 * @brief ADC0寄存器 (ADC0)
 */
typedef struct
{                                ///< ADC0结构体
    __IOM uint32_t DAT[12];      ///< 第0个样本数据 [15:0] ADC0第0次采样数据
    __IM uint32_t RESERVED[8];   //
    __IOM uint32_t CHN0;         ///< 数据0/1/2/3样本信号源 [15:12] ADC0第3次采样正端输入信号选择 [11:8] ADC0第2次采样正端输入信号选择 [7:4] ADC0第1次采样正端输入信号选择 [3:0] ADC0第0次采样正端输入信号选择
    __IOM uint32_t CHN1;         ///< 数据4/5/6/7样本信号源 [15:12] ADC0第7次采样正端输入信号选择或第4次空闲采样正端输入信号选择 [11:8] ADC0第6次采样正端输入信号选择或第5次空闲采样正端输入信号选择 [7:4] ADC0第5次采样正端输入信号选择 [3:0] ADC0第4次采样正端输入信号选择
    __IOM uint32_t CHN2;         ///< 数据8/9/10/11样本信号源 [15:12] ADC0第11次常规采样正端输入信号选择或第0次空闲采样正端输入信号选择 [11:8] ADC0第10次采样正端输入信号选择或第1次空闲采样正端输入信号选择 [7:4] ADC0第9次采样正端输入信号选择或第2次空闲采样正端输入信号选择 [3:0] ADC0第8次采样正端输入信号选择或第3次空闲采样正端输入信号选择
    __IM uint32_t RESERVED1;     //
    __IOM uint32_t CHNT;         ///< 第0/1轮/空闲通道编号 [11:8] 空闲采样次数 [7:4] 第二段常规采样次数 [3:0] 第一段常规采样次数
    __IOM uint32_t GAIN;         ///< 样本增益选择 [11] DAT11增益选择，0:±3.6V量程，1:±5V量程 [10] DAT10增益选择，0:±3.6V量程，1:±5V量程 [9] DAT9增益选择，0:±3.6V量程，1:±5V量程 [8] DAT8增益选择，0:±3.6V量程，1:±5V量程 [7] DAT7增益选择，0:±3.6V量程，1:±5V量程 [6] DAT6增益选择，0:±3.6V量程，1:±5V量程 [5] DAT5增益选择，0:±3.6V量程，1:±5V量程 [4] DAT4增益选择，0:±3.6V量程，1:±5V量程 [3] DAT3增益选择，0:±3.6V量程，1:±5V量程 [2] DAT2增益选择，0:±3.6V量程，1:±5V量程 [1] DAT1增益选择，0:±3.6V量程，1:±5V量程 [0] DAT0增益选择，0:±3.6V量程，1:±5V量程
    __IM uint32_t RESERVED2[3];  //
    __IOM uint32_t CFG;          ///< 配置 [12] 0:单段采样，1:两段采样 [11] 状态机复位控制信号 [10] ADC_DAT对齐方式 [9] 空闲触发优先级 [8] 连续采样模式 [7:4] 触发一次采样所需的事件数 [3] 过采样触发模式 [2:0] 过采样率
    __IOM uint32_t TRIG;         ///< 样本触发配置 [27] CL_OUTPUT[3]触发ADC空闲采样使能 [26] CL_OUTPUT[2]触发ADC空闲采样使能 [25] CL_OUTPUT[1]触发ADC空闲采样使能 [24] CL_OUTPUT[0]触发ADC空闲采样使能 [23] TIMER2比较/捕获事件1触发ADC空闲采样使能 [22] TIMER2比较/捕获事件0触发ADC空闲采样使能 [21] TIMER1比较/捕获事件1触发ADC空闲采样使能 [20] TIMER0比较/捕获事件0触发ADC空闲采样使能 [19] MCPWM0 T3事件触发ADC空闲采样使能 [18] MCPWM0 T2事件触发ADC空闲采样使能 [17] MCPWM0 T1事件触发ADC空闲采样使能 [16] MCPWM0 T0事件触发ADC空闲采样使能 [11] CL_OUTPUT[3]触发ADC常规采样使能 [10] CL_OUTPUT[2]触发ADC常规采样使能 [9] CL_OUTPUT[1]触发ADC常规采样使能 [8] CL_OUTPUT[0]触发ADC常规采样使能 [7] TIMER2比较/捕获事件1触发ADC常规采样使能 [6] TIMER2比较/捕获事件0触发ADC常规采样使能 [5] TIMER1比较/捕获事件1触发ADC常规采样使能 [4] TIMER0比较/捕获事件0触发ADC常规采样使能 [3] MCPWM0 T3事件触发ADC常规采样使能 [2] MCPWM0 T2事件触发ADC常规采样使能 [1] MCPWM0 T1事件触发ADC常规采样使能 [0] MCPWM0 T0事件触发ADC常规采样使能
    __OM uint32_t SWT;           ///< 软件触发 [15:0] 写入数据为0x5AA5时，产生一次常规触发；写入数据位0xF00F时，产生一次空闲触发
    __IOM uint32_t DC0;          ///< 低增益时S/H A的直流偏移 [15:0] ADC采样电路DC offset
    __IOM uint32_t AMC0;         ///< 低增益时S/H A的放大校准 [9:0] ADC采样电路增益校正系数
    __IOM uint32_t DC1;          ///< 高增益时S/H A的直流偏移 [15:0] ADC采样电路DC offset
    __IOM uint32_t AMC1;         ///< 高增益时S/H A的放大校准 [9:0] ADC采样电路增益校正系数
    __IOM uint32_t IE;           ///< 中断使能 [15] 空闲采样完成DMA请求使能 [14] 硬件触发发生在非空闲状态DMA请求使能 [13] 软件触发发生在非空闲状态DMA请求使能 [10] 阈值监测0超限DMA请求使能 [9] 第二段采样完成DMA请求使能 [8] 第一段采样完成DMA请求使能 [7] 空闲采样完成中断使能 [6] 硬件触发发生在非空闲状态中断使能 [5] 软件触发发生在非空闲状态中断使能 [2] 阈值监测0超限中断使能 [1] 第二段常规采样完成中断使能 [0] 第一段常规采样完成中断使能
    __IOM uint32_t IF;           ///< 中断标志 [7] 空闲采样完成中断标志 [6] 硬件触发发生在非空闲状态中断标志 [5] 软件触发发生在非空闲状态中断标志 [2] 阈值监测0超限中断标志 [1] 第二段常规采样完成中断标志 [0] 第一段常规采样完成中断标志
    __IM uint32_t RESERVED3[11]; //
    __IOM uint32_t LTH;          ///< 数据低阈值 [15:12] 符号扩展 [11:0] ADC模拟看门狗0下阈值
    __IOM uint32_t HTH;          ///< 数据高阈值 [15:12] 符号扩展 [11:0] ADC模拟看门狗0上阈值
    __IOM uint32_t GEN;          ///< 数据阈值保护使能 [15:0] ADC模拟看门狗0对应使能位 BIT0: DAT0看门狗监测使能 BIT1: DAT1看门狗监测使能 ... BIT7: DAT13看门狗监测使能
} HAL_ADC_TypeDef;
/**
 * @brief 比较器寄存器 (CMP)
 */
typedef struct
{                          ///< CMP 结构体
    __IOM uint32_t IE;     ///< 比较器中断使能 [9] 比较器1 DMA请求使能 [8] 比较器0 DMA请求使能 [1] 比较器1中断使能 [0] 比较器0中断使能
    __IOM uint32_t IF;     ///< 比较器中断标志 [1] 比较器1中断标志 [0] 比较器0中断标志
    __IOM uint32_t TCLK;   ///< 比较器时钟控制 [26:24] 比较器0/1共用滤波时钟分频系数 [15:12] 比较器1滤波时钟分频 [11] 比较器1滤波时钟使能 [10:8] 比较器1滤波时钟分频 [7:4] 比较器0滤波时钟分频 [3] 比较器0滤波时钟使能 [2:0] 比较器0滤波时钟分频
    __IOM uint32_t CFG;    ///< 比较器配置 [7] 比较器1开窗PWM信号极性选择 [6] 比较器1中断触发类型 [5] 比较器1信号输入使能 [4] 比较器1极性选择 [3] 比较器0开窗PWM信号极性选择 [2] 比较器0中断触发类型 [1] 比较器0信号输入使能 [0] 比较器0极性选择
    __IOM uint32_t BLCWIN; ///< 比较器黑窗口控制 [31:8] 保留 [7] 使用MCPWM模块CHN3_P通道输出的P管开关控制信号作为比较器1开窗使能 [6] 使用MCPWM模块CHN2_P通道输出的P管开关控制信号作为比较器1开窗使能 [5] 使用MCPWM模块CHN1_P通道输出的P管开关控制信号作为比较器1开窗使能 [4] 使用MCPWM模块CHN0_P通道输出的P管开关控制信号作为比较器1开窗使能 [3] 使用MCPWM模块CHN3_P通道输出的P管开关控制信号作为比较器0开窗使能 [2] 使用MCPWM模块CHN2_P通道输出的P管开关控制信号作为比较器0开窗使能 [1] 使用MCPWM模块CHN1_P通道输出的P管开关控制信号作为比较器0开窗使能 [0] 使用MCPWM模块CHN0_P通道输出的P管开关控制信号作为比较器0开窗使能
    __IOM uint32_t DATA;   ///< 比较器输出数据 [9] 比较器1经过滤波后的信号 [8] 比较器0经过滤波后的信号 [1] 比较器1原始输出信号 [0] 比较器0原始输出信号
} HAL_CMP_TypeDef;
/**
 * @brief CL0寄存器
 */
typedef struct
{                       ///< CL0结构体
    __IOM uint32_t EN;  ///< CL0使能寄存器 [3] CLU3使能 [2] CLU2使能 [1] CLU1使能 [0] CLU0使能
    __IOM uint32_t IE;  ///< CL0中断使能寄存器 [7] CLU3上升沿触发中断使能 [6] CLU3下降沿触发中断使能 [5] CLU2上升沿触发中断使能 [4] CLU2下降沿触发中断使能 [3] CLU1上升沿触发中断使能 [2] CLU1下降沿触发中断使能 [1] CLU0上升沿触发中断使能 [0] CLU0下降沿触发中断使能
    __IOM uint32_t IF;  ///< CL0中断标志寄存器 [7] CLU3上升沿中断标志位 [6] CLU3下降沿中断标志位 [5] CLU2上升沿中断标志位 [4] CLU2下降沿中断标志位 [3] CLU1上升沿中断标志位 [2] CLU1下降沿中断标志位 [1] CLU0上升沿中断标志位 [0] CLU0下降沿中断标志位
    __IOM uint32_t OUT; ///< CL0输出寄存器 [3] CLU3输出状态 [2] CLU2输出状态 [1] CLU1输出状态 [0] CLU0输出状态
    __IOM uint32_t MX;  ///< CL0多路选择寄存器 [31:28] CLU3 A输入多路复用选择 [27:24] CLU3 B输入多路复用选择 [23:20] CLU2 A输入多路复用选择 [19:16] CLU2 B输入多路复用选择 [15:12] CLU1 A输入多路复用选择 [11:8] CLU1 B输入多路复用选择 [7:4] CLU0 A输入多路复用选择 [3:0] CLU0 B输入多路复用选择
    __IOM uint32_t FN;  ///< CL0功能选择寄存器 [31:24] CLU3查找表功能选择 [23:16] CLU2查找表功能选择 [15:8] CLU1查找表功能选择 [7:0] CLU0查找表功能选择
    __IOM uint32_t CF;  ///< CL0配置寄存器 [31] CLU3输出选取 [30] CLU3输出使能 [27] CLU3 D触发器复位 [26] CLU3 D触发器时钟电平反向 [25:24] CLU3 D触发器时钟选择 [23] CLU2输出选取 [22] CLU2输出使能 [19] CLU2 D触发器复位 [18] CLU2 D触发器时钟电平反向 [17:16] CLU2 D触发器时钟选择 [15] CLU1输出选取 [14] CLU1输出使能 [11] CLU1 D触发器复位 [10] CLU1 D触发器时钟电平反向 [9:8] CLU1 D触发器时钟选择 [7] CLU0输出选取 [6] CLU0输出使能 [3] CLU0 D触发器复位 [2] CLU0 D触发器时钟电平反向 [1:0] CLU0 D触发器时钟选择
} HAL_CLU_TypeDef;
/**
 * @brief CRC0寄存器 (CRC0)
 */
typedef struct
{                        ///< CRC0结构体
    __IOM uint32_t DR;   ///< CRC数据寄存器 [31:0] 存放待编码的信息码和经CRC校验后的编码
    __IOM uint32_t CR;   ///< CRC控制寄存器 [12] 是否将CRC校验后的编码反转后输出 [9:8] 待编码数据反转类型 [5:4] 输出编码（多项式）位宽 [0] 与输入信息码进行CRC计算的数据来源
    __IOM uint32_t INIT; ///< CRC初始值寄存器 [31:0] 存放初始码
    __IOM uint32_t POL;  ///< CRC系数寄存器 [31:0] 存放生成多项式对应的生成码
} HAL_CRC_TypeDef;
/**
 * @brief DMA寄存器
 */
typedef struct
{
    __IOM uint32_t CCR;  ///< DMA通道0配置 [11:10] 源地址访问位宽 [9:8] 目的地址访问位宽 [6] 源地址递增方式 [4] 目的地址递增方式 [3] 循环模式 [1] 传输模式 [0] 通道使能
    __IOM uint32_t REN;  ///< DMA通道0请求使能 [11:0] DMA通道0数据搬运次数
    __IOM uint32_t CTMS; ///< DMA通道0传输次数（保留字段）
    __IOM uint32_t SADR; ///< DMA通道0源地址 [31:0] DMA通道x源地址
    __IOM uint32_t DADR; ///< DMA通道0目的地址 [31:0] DMA通道x目的地址
} HAL_DMA_TypeDef;
/**
 *@brief DMA控制状态寄存器对象定义
 */
typedef struct
{
    __IOM uint32_t CTRL; ///< DMA控制 [0] DMA整体使能
    __IOM uint32_t IE;   ///< DMA中断使能 [3] 通道3完成中断使能 [2] 通道2完成中断使能 [1] 通道1完成中断使能 [0] 通道0完成中断使能
    __IOM uint32_t IF;   ///< DMA中断标志 [3] 通道3完成中断标志 [2] 通道2完成中断标志 [1] 通道1完成中断标志 [0] 通道0完成中断标志
} HAL_DMAMODULE_TypeDef;
/**
 * @brief DSP0寄存器结构体 (DSP0)
 */
typedef struct
{                                 ///< DSP0 结构体
    __IM uint32_t RESERVED[1032]; ///< 保留位
    __IOM uint32_t DID;           ///< DSP 0次被除数 [31:0] DSP除法被除数寄存器，中断优先级高
    __IOM uint32_t DIS;           ///< DSP 0次除数 [31:0] DSP除法除数寄存器，中断优先级高
    __IM uint32_t QUO;            ///< DSP 0次商 [31:0] DSP商寄存器，中断优先级高
    __IM uint32_t REM;            ///< DSP 0次余数 [31:0] DSP除法余数寄存器
    __IOM uint32_t DID1;          ///< DSP 1次被除数 [31:0] DSP除法被除数寄存器，中断优先级低
    __IOM uint32_t DIS1;          ///< DSP 1次除数 [31:0] DSP除法除数寄存器，中断优先级低
    __IM uint32_t QUO1;           ///< DSP 1次商 [31:0] DSP商寄存器，中断优先级低
    __IM uint32_t RESERVED1;      ///< 保留位
    __IOM uint32_t RAD;           ///< DSP 被开方数 [31:0] 协处理器被开方数寄存器
    __IM uint16_t SQRT;           ///< DSP 平方根 [15:0] 协处理器平方根寄存器 [31:16] 保留，读出时恒为0
    __IM uint16_t RESERVED2;      ///< 保留位
} HAL_DSP_TypeDef;
/**
 * @brief EXTI寄存器 (EXTI)
 */
typedef struct
{                        ///< EXTI结构体
    __IOM uint32_t CR0;  ///< GPIO外部中断触发类型0 [15:14] GPIO 1[0]/ P1[0]外部触发类型选择 [13:12] GPIO 0[15]/ P0[15]外部触发类型选择 [11:10] GPIO 0[14]/ P0[14]外部触发类型选择 [9:8] GPIO 0[13]/ P0[13]外部触发类型选择 [7:6] GPIO 0[12]/ P0[12]外部触发类型选择 [5:4] GPIO 0[11]/ P0[11]外部触发类型选择 [3:2] GPIO 0[2]/ P0[2]外部触发类型选择 [1:0] GPIO 0[0]/ P0[0]外部触发类型选择
    __IOM uint32_t CR1;  ///< GPIO外部中断触发类型1 [15:14] GPIO 2[0]/P2[0]外部触发类型选择 [13:12] GPIO 2[13]/P2[13]外部触发类型选择 [11:10] GPIO 2[6]/P2[6]外部触发类型选择 [9:8] GPIO 2[5]/P2[5]外部触发类型选择 [7:6] GPIO 2[4]/P2[4]外部触发类型选择 [5:4] GPIO 2[3]/P2[3]外部触发类型选择 [3:2] GPIO 2[9]/P2[9]外部触发类型选择 [1:0] GPIO 2[7]/P2[7]外部触发类型选择
    __IOM uint32_t IE;   ///< GPIO中断使能 [10] GPIO2 DMA 请求使能 [9] GPIO1 DMA 请求使能 [8] GPIO0 DMA 请求使能 [2] GPIO2中断使能 [1] GPIO1中断使能 [0] GPIO0中断使能
    __IOM uint32_t IF;   ///< GPIO中断标志 [15] GPIO 2[0] / P2[0] 外部中断标志 [14] GPIO 2[13] / P2[13] 外部中断标志 [13] GPIO 2[6] / P2[6] 外部中断标志 [12] GPIO 2[5] / P2[5] 外部中断标志 [11] GPIO 2[4] / P2[4] 外部中断标志 [10] GPIO 2[3] / P2[3] 外部中断标志 [9] GPIO 2[9] / P2[9] 外部中断标志 [8] GPIO 2[7] / P2[7] 外部中断标志 [7] GPIO 1[0] / P1[0] 外部中断标志 [6] GPIO 0[15] / P0[15] 外部中断标志 [5] GPIO 0[14] / P0[14] 外部中断标志 [4] GPIO 0[13] / P0[13] 外部中断标志 [3] GPIO 0[12] / P0[12] 外部中断标志 [2] GPIO 0[11] / P0[11] 外部中断标志 [1] GPIO 0[2] / P0[2] 外部中断标志 [0] GPIO 0[0] / P0[0] 外部中断标志
    __IOM uint32_t CLKO; ///< GPIO输出时钟选择 [4] 晶振时钟输出使能 [3] ADC时钟输出使能 [2] PLL输出使能 [1] HRC输出使能 [0] LRC输出使能
    __IOM uint32_t SWAP; ///< MCPWM交换选项 [1:0] PWM信号交换控制 [31:0] 存放待编码的信息码和经CRC校验后的编码
} HAL_EXTI_TypeDef;
/**
 * @brief FLASH寄存器 (FLASH)
 */
typedef struct
{                            ///< FLASH结构体
    __IOM uint32_t CFG;      ///< Flash配置寄存器 [31] FLASH擦除使能 [27] FLASH编程使能 [23] FLASH地址递增使能 [19] FLASH预取加速使能 [15] FLASH擦除类型选择 [11] 访问FLASH区域选择 [7] 读取FLASH数据，等待开关 [6:0] 编程/擦除时间基数寄存器
    __IOM uint32_t ADDR;     ///< Flash访问地址寄存器 [14:0] 地址寄存器
    __OM uint32_t WDATA;     ///< Flash写数据寄存器 [31:0] 执行写入操作，写入FLASH的值
    __IM uint32_t RDATA;     ///< Flash读数据寄存器 [31:0] 执行读取操作，读出FLASH的值
    __OM uint32_t ERASE;     ///< Flash擦除寄存器 [31:0] 写入0x7654DCBA，触发擦除操作
    __IM uint32_t PROTECT;   ///< 读取以更新Flash保护状态 [31:0] 读取该寄存器，更新加密/解密状态
    __IM uint32_t READY;     ///< Flash忙/闲状态 [0] 1:FLASH处于Idle状态；0:FLASH处于Busy状态
    __IM uint32_t SIZE;      ///< Flash大小寄存器 [13] FLASH容量寄存器 [1] Flash存在不可读、可执行的库区域 [0] Flash存在可读、可执行、但禁止擦除的ROM区域
    __IOM uint32_t NCFG;     ///< Flash NVR配置寄存器 [31] FLASH擦除使能 [27] FLASH编程使能 [23] FLASH地址递增使能（此寄存器，只能读取不能修改） [19] FLASH预取加速使能（此寄存器，只能读取不能修改） [15] FLASH擦除类型选择（此寄存器，只能读取不能修改） [11] 访问FLASH区域选择（修改此寄存器，无论写入值是0还是1，最终，只能被强制写成1） [7] 读取FLASH数据，等待开关（此寄存器，只能读取不能修改） [6:0] 编程/擦除时间基数寄存器（此寄存器，只能读取不能修改）
    __IOM uint32_t NADDR;    ///< Flash NVR访问地址寄存器 [14:0] 地址寄存器
    __OM uint32_t NWDATA;    ///< Flash NVR写数据寄存器 [31:0] 执行写入操作，写入FLASH的值
    __IM uint32_t NRDATA;    ///< Flash NVR读数据寄存器 [31:0] 执行读取操作，读出FLASH的值
    __OM uint32_t NERASE;    ///< Flash NVR擦除寄存器 [31:0] 写入0x7654DCBA，触发擦除操作
    __OM uint32_t NKEY;      ///< Flash NVR密钥寄存器 [3:0] 当FLASH处于保护状态时，无法通过SWD读取，编程和擦除FLASH。此时，用户可以对此寄存器写入特殊值（0x0000_000F），使能开关，配置FLASH_NCFG/NADDR/NWDATA/NRDATA/NERASE寄存器，对NVR Sector 2进行读取，编程和擦除。
    __IOM uint32_t EPSM;     ///< Main区域Sector擦除保护寄存器 [31] Main区域Sector 248~255擦除保护 [30] Main区域Sector 247~240擦除保护 [29] Main区域Sector 239~232擦除保护 [28] Main区域Sector 231~224擦除保护 [27] Main区域Sector 223~216擦除保护 [26] Main区域Sector 215~208擦除保护 [25] Main区域Sector 207~200擦除保护 [24] Main区域Sector 199_192擦除保护 [23] Main区域Sector 191_184擦除保护 [22] Main区域Sector 183_176擦除保护 [21] Main区域Sector 175_168擦除保护 [20] Main区域Sector 167_160擦除保护 [19] Main区域Sector 159_152擦除保护 [18] Main区域Sector 151_144擦除保护 [17] Main区域Sector 143_136擦除保护 [16] Main区域Sector 135_128擦除保护 [15] Main区域Sector 127_120擦除保护 [14] Main区域Sector 119_112擦除保护 [13] Main区域Sector 111_104擦除保护 [12] Main区域Sector 103_96擦除保护 [11] Main区域Sector 95_88擦除保护 [10] Main区域Sector 87_80擦除保护 [9] Main区域Sector 79_72擦除保护 [8] Main区域Sector 71_64擦除保护 [7] Main区域Sector 62_56擦除保护 [6] Main区域Sector 55_48擦除保护 [5] Main区域Sector 47_40擦除保护 [4] Main区域Sector 39_32擦除保护 [3] Main区域Sector 31_24擦除保护 [2] Main区域Sector 23_16擦除保护 [1] Main区域Sector 8~15擦除保护 [0] Main区域Sector 0~7擦除保护
    __IM uint32_t RESERVED;  //
    __IOM uint32_t EPSN;     ///< NVR区域Sector擦除保护寄存器 [14] NVR区域Sector 14擦除保护 [13] NVR区域Sector 13擦除保护 [12] NVR区域Sector 12擦除保护 [11] NVR区域Sector 11擦除保护 [10] NVR区域Sector 10擦除保护 [9] NVR区域Sector 9擦除保护 [8] NVR区域Sector 8擦除保护 [7] NVR区域Sector 7擦除保护 [6] NVR区域Sector 6擦除保护 [5] NVR区域Sector 5擦除保护 [4] NVR区域Sector 4擦除保护 [3] NVR区域Sector 3擦除保护 [2] NVR区域Sector 2擦除保护 [1] NVR区域Sector 1擦除保护 [0] NVR区域Sector 0擦除保护
    __IOM uint32_t LIB_ADDR; ///< 库代码区域寄存器 [15:8] 库代码终止Sector [7:0] 库代码起始Sector
} HAL_FLASH_TypeDef;
/**
 * @brief GPIO寄存器
 */
typedef struct
{
    __IOM uint32_t PIE;     ///< GPIO0 输入使能 [15] GPIO x[15] / Px[15] 输入使能 [14] GPIO x[14] / Px[14] 输入使能 [13] GPIO x[13] / Px[13] 输入使能 [12] GPIO x[12] / Px[12] 输入使能 [11] GPIO x[11] / Px[11] 输入使能 [10] GPIO x[10] / Px[10] 输入使能 [9] GPIO x[9] / Px[9] 输入使能 [8] GPIO x[8] / Px[8] 输入使能 [7] GPIO x[7] / Px[7] 输入使能 [6] GPIO x[6] / Px[6] 输入使能 [5] GPIO x[5] / Px[5] 输入使能 [4] GPIO x[4] / Px[4] 输入使能 [3] GPIO x[3] / Px[3] 输入使能 [2] GPIO x[2] / Px[2] 输入使能 [1] GPIO x[1] / Px[1] 输入使能 [0] GPIO x[0] / Px[0] 输入使能
    __IOM uint32_t POE;     ///< GPIO0 输出使能 [15] GPIO x[15] / Px[15] 输出使能 [14] GPIO x[14] / Px[14] 输出使能 [13] GPIO x[13] / Px[13] 输出使能 [12] GPIO x[12] / Px[12] 输出使能 [11] GPIO x[11] / Px[11] 输出使能 [10] GPIO x[10] / Px[10] 输出使能 [9] GPIO x[9] / Px[9] 输出使能 [8] GPIO x[8] / Px[8] 输出使能 [7] GPIO x[7] / Px[7] 输出使能 [6] GPIO x[6] / Px[6] 输出使能 [5] GPIO x[5] / Px[5] 输出使能 [4] GPIO x[4] / Px[4] 输出使能 [3] GPIO x[3] / Px[3] 输出使能 [2] GPIO x[2] / Px[2] 输出使能 [1] GPIO x[1] / Px[1] 输出使能 [0] GPIO x[0] / Px[0] 输出使能
    __IOM uint32_t PDI;     ///< GPIO0 输入数据 [15:0] GPIO x输入数据
    __IOM uint32_t PDO;     ///< GPIO0 输出数据 [15:0] GPIO x输出数据
    __IOM uint32_t PUE;     ///< GPIO0 上拉使能 [15] GPIO x[15] / Px[15] 上拉使能 [14] GPIO x[14] / Px[14] 上拉使能 [13] GPIO x[13] / Px[13] 上拉使能 [12] GPIO x[12] / Px[12] 上拉使能 [11] GPIO x[11] / Px[11] 上拉使能 [10] GPIO x[10] / Px[10] 上拉使能 [9] GPIO x[9] / Px[9] 上拉使能 [8] GPIO x[8] / Px[8] 上拉使能 [7] GPIO x[7] / Px[7] 上拉使能 [6] GPIO x[6] / Px[6] 上拉使能 [5] GPIO x[5] / Px[5] 上拉使能 [4] GPIO x[4] / Px[4] 上拉使能 [3] GPIO x[3] / Px[3] 上拉使能 [2] GPIO x[2] / Px[2] 上拉使能 [1] GPIO x[1] / Px[1] 上拉使能 [0] GPIO x[0] / Px[0] 上拉使能
    __IM uint32_t RESERVED; //
    __IOM uint32_t PODE;    ///< GPIO0 开漏使能 [15] GPIO x[15] / Px[15] 开漏使能 [14] GPIO x[14] / Px[14] 开漏使能 [13] GPIO x[13] / Px[13] 开漏使能 [12] GPIO x[12] / Px[12] 开漏使能 [11] GPIO x[11] / Px[11] 开漏使能 [10] GPIO x[10] / Px[10] 开漏使能 [9] GPIO x[9] / Px[9] 开漏使能 [8] GPIO x[8] / Px[8] 开漏使能 [7] GPIO x[7] / Px[7] 开漏使能 [6] GPIO x[6] / Px[6] 开漏使能 [5] GPIO x[5] / Px[5] 开漏使能 [4] GPIO x[4] / Px[4] 开漏使能 [3] GPIO x[3] / Px[3] 开漏使能 [2] GPIO x[2] / Px[2] 开漏使能 [1] GPIO x[1] / Px[1] 开漏使能 [0] GPIO x[0] / Px[0] 开漏使能
    __IOM uint32_t PFLT;    ///< GPIO0 滤波使能 [15] GPIO x[15] / Px[15] 滤波使能 [14] GPIO x[14] / Px[14] 滤波使能 [13] GPIO x[13] / Px[13] 滤波使能 [12] GPIO x[12] / Px[12] 滤波使能 [11] GPIO x[11] / Px[11] 滤波使能 [10] GPIO x[10] / Px[10] 滤波使能 [9] GPIO x[9] / Px[9] 滤波使能 [8] GPIO x[8] / Px[8] 滤波使能 [7] GPIO x[7] / Px[7] 滤波使能 [6] GPIO x[6] / Px[6] 滤波使能 [5] GPIO x[5] / Px[5] 滤波使能 [4] GPIO x[4] / Px[4] 滤波使能 [3] GPIO x[3] / Px[3] 滤波使能 [2] GPIO x[2] / Px[2] 滤波使能 [1] GPIO x[1] / Px[1] 滤波使能 [0] GPIO x[0] / Px[0] 滤波使能
    __IOM uint32_t F3210;   ///< GPIO0[3:0] 功能选择 [15:12] GPIO0.3功能选择 [11:8] GPIO0.2功能选择 [7:4] GPIO0.1功能选择 [3:0] GPIO0.0功能选择
    __IOM uint32_t F7654;   ///< GPIO0[7:4] 功能选择 [15:12] GPIO0.7功能选择 [11:8] GPIO0.6功能选择 [7:4] GPIO0.5功能选择 [3:0] GPIO0.4功能选择
    __IOM uint32_t FBA98;   ///< GPIO0[11:8] 功能选择 [15:12] GPIO0.11功能选择 [11:8] GPIO0.11功能选择 [7:4] GPIO0.10功能选择 [3:0] GPIO0.9功能选择
    __IOM uint32_t FFEDC;   ///< GPIO0[15:12] 功能选择 [15:12] GPIO0.15功能选择 [11:8] GPIO0.14功能选择 [7:4] GPIO0.13功能选择 [3:0] GPIO0.12功能选择
    __OM uint32_t BSRR;     ///< GPIO0 位设置复位寄存器 [31] 写1将GPIO x[15]清零，写0无作用 [30] 写1将GPIO x[14]清零，写0无作用 [29] 写1将GPIO x[13]清零，写0无作用 [28] 写1将GPIO x[12]清零，写0无作用 [27] 写1将GPIO x[11]清零，写0无作用 [26] 写1将GPIO x[10]清零，写0无作用 [25] 写1将GPIO x[9]清零，写0无作用 [24] 写1将GPIO x[8]清零，写0无作用 [23] 写1将GPIO x[7]清零，写0无作用 [22] 写1将GPIO x[6]清零，写0无作用 [21] 写1将GPIO x[5]清零，写0无作用 [20] 写1将GPIO x[4]清零，写0无作用 [19] 写1将GPIO x[3]清零，写0无作用 [18] 写1将GPIO x[2]清零，写0无作用 [17] 写1将GPIO x[1]清零，写0无作用 [16] 写1将GPIO x[0]清零，写0无作用 [15] 写1将GPIO x[15]置1，写0无作用 [14] 写1将GPIO x[14]置1，写0无作用 [13] 写1将GPIO x[13]置1，写0无作用 [12] 写1将GPIO x[12]置1，写0无作用 [11] 写1将GPIO x[11]置1，写0无作用 [10] 写1将GPIO x[10]置1，写0无作用 [9] 写1将GPIO x[9]置1，写0无作用 [8] 写1将GPIO x[8]置1，写0无作用 [7] 写1将GPIO x[7]置1，写0无作用 [6] 写1将GPIO x[6]置1，写0无作用 [5] 写1将GPIO x[5]置1，写0无作用 [4] 写1将GPIO x[4]置1，写0无作用 [3] 写1将GPIO x[3]置1，写0无作用 [2] 写1将GPIO x[2]置1，写0无作用 [1] 写1将GPIO x[1]置1，写0无作用 [0] 写1将GPIO x[0]置1，写0无作用
    __OM uint32_t BRR;      ///< GPIO0 位复位寄存器 [15] 写1将GPIO x[15]清零，写0无作用 [14] 写1将GPIO x[14]清零，写0无作用 [13] 写1将GPIO x[13]清零，写0无作用 [12] 写1将GPIO x[12]清零，写0无作用 [11] 写1将GPIO x[11]清零，写0无作用 [10] 写1将GPIO x[10]清零，写0无作用 [9] 写1将GPIO x[9]清零，写0无作用 [8] 写1将GPIO x[8]清零，写0无作用 [7] 写1将GPIO x[7]清零，写0无作用 [6] 写1将GPIO x[6]清零，写0无作用 [5] 写1将GPIO x[5]清零，写0无作用 [4] 写1将GPIO x[4]清零，写0无作用 [3] 写1将GPIO x[3]清零，写0无作用 [2] 写1将GPIO x[2]清零，写0无作用 [1] 写1将GPIO x[1]清零，写0无作用 [0] 写1将GPIO x[0]清零，写0无作用
} HAL_GPIO_TypeDef;
/**
 * @brief HALL0寄存器 (HALL0)
 */
typedef struct
{                        ///< HALL0结构体
    __IOM uint32_t CFG;  ///< 霍尔配置寄存器 [30] 软件触发HALL信号变化中断使能 [29] HALL计数器溢出中断使能开关 [28] HALL信号变化中断使能开关 [27] HALL计数器溢出DMA请求使能开关 [25] HALL信号变化DMA请求使能开关 [24] HALL模块使能开关 [20] 7/5滤波开关 [17:16] HALL时钟分频系数 [14:0] 滤波宽度
    __IOM uint32_t INFO; ///< 霍尔信息寄存器 [18] 软件触发HALL信号变化中断 [17] HALL计数器溢出事件标志 [16] HALL信号变化事件标志 [15:11] 系统保留，必须写入0，读出0 [10:8] HALL值，未滤波结果 [7:3] 系统保留，必须写入0，读出0 [2:0] HALL值，滤波结果
    __IM uint32_t WIDTH; ///< 霍尔宽度计数值寄存器 [23:0] HALL 宽度计数器值
    __IOM uint32_t TH;   ///< 霍尔模块计数器门限值寄存器 [23:0] HALL计数器门限值
    __IOM uint32_t CNT;  ///< 霍尔计数寄存器 [23:0] HALL计数值，写入任意值可清零
} HAL_HALL_TypeDef;
/**
 * @brief I2C0寄存器 (I2C0)
 */
typedef struct
{                         ///< I2C0 结构体
    __IOM uint32_t ADDR;  ///< I2C设备地址 [7] I2C硬件地址比较使能开关 [6:0] 主模式下，用于配置需要进行通信的从机地址；从模式下，用于配置该节点的从机地址；
    __IOM uint32_t CFG;   ///< I2C配置 [7] I2C中断使能信号 [6] I2C数据传输完成中断使能信号 [5] I2C总线错误事件中断使能信号 [4] I2CSTOP事件中断使能信号 [1] I2C主模式使能信号 [0] I2C从模式使能信号
    __IOM uint32_t SCR;   ///< I2C状态控制 [7] 总线错误状态标志位 [6] 总线仲裁丢失状态标志位 [5] STOP事件状态标志位 [4] 下一字节ACK位 [3] 地址字节标志位 [2] 发送或接收控制位 [1] 接收响应标志位 [0] 传输完成状态标志位
    __IOM uint32_t DATA;  ///< I2C数据寄存器 [7:0] 数据寄存器，用于主模式发送/从模式发送/主模式接收/从模式接收
    __IOM uint32_t MSCR;  ///< I2C主状态控制 [3] I2C总线，闲忙状态 [2] 主模式争抢总线标志位 [1] 再次触发START事件 [0] 触发START事件并发送地址数据至总线
    __IOM uint32_t BCR;   ///< I2C传输控制寄存器 [7] I2C传输，NACK事件中断使能信号 [6] I2C传输，硬件地址匹配中断使能信号 [5] I2C多数据传输使能 [4] I2C多数据传输，从模式执行DMA方式发送，触发硬件预取第一个字节
    __IOM uint32_t BSIZE; ///< I2C传输长度寄存器 [4:0] I2C数据传输长度寄存器，用于多字节传输 实际传输字节数 = B[3:0] + 1
} HAL_I2C_TypeDef;
/**
 * @brief MCPWM0寄存器 (MCPWM0)
 */
typedef struct
{                               ///< MCPWM0结构体
    __IOM uint32_t TH[8];       ///< MCPWM 比较门限值
    __IM uint32_t RESERVED[4];  //
    __IOM uint32_t TMR0;        ///< ADC触发时间0 [15:0]ADC采样定时器比较门限0寄存器
    __IOM uint32_t TMR1;        ///< ADC触发时间1 [15:0]ADC采样定时器比较门限1寄存器
    __IOM uint32_t TMR2;        ///< ADC触发时间2 [15:0]ADC采样定时器比较门限2寄存器
    __IOM uint32_t TMR3;        ///< ADC触发时间3 [15:0]ADC采样定时器比较门限3寄存器
    __IOM uint32_t TH0;         ///< 基础计数器0 15位无符号阈值 [14:0]MCPWM时基0计数器门限值
    __IM uint32_t RESERVED1;    //
    __IOM uint32_t CNT0;        ///< 基础计数器0 16位有符号阈值 [15:0]向此寄存器写入，更改时基0计数器的设定值
    __IM uint32_t RESERVED2;    //
    __OM uint32_t UPDATE;       ///< 掩码寄存器手动重载配置 [28] 写1产生软件（手动）触发，将MCPWM0_IO3/4/5由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [25] 写1产生软件（手动）触发，将MCPWM0_TMR3由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [24] 写1产生软件（手动）触发，将MCPWM0_TMR2由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [17] 写1产生软件（手动）触发，将MCPWM0_TH31由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [16] 写1产生软件（手动）触发，将MCPWM0_TH30由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [12] 写1产生软件（手动）触发，将MCPWM0_IO0/1/2由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [11] 写1产生软件（手动）触发，将MCPWM0_CNT0由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [10] 写1产生软件（手动）触发，将MCPWM0_TH0由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [9] 写1产生软件（手动）触发，将MCPWM0_TMR1由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [8] 写1产生软件（手动）触发，将MCPWM0_TMR0由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [5] 写1产生软件（手动）触发，将MCPWM0_TH21由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [4] 写1产生软件（手动）触发，将MCPWM0_TH20由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [3] 写1产生软件（手动）触发，将MCPWM0_TH11由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [2] 写1产生软件（手动）触发，将MCPWM0_TH10由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [1] 写1产生软件（手动）触发，将MCPWM0_TH01由预装载寄存器加载到MCPWM运行所使用的影子寄存器 [0] 写1产生软件（手动）触发，将MCPWM0_TH00由预装载寄存器加载到MCPWM运行所使用的影子寄存器
    __IOM uint32_t FCNT;        ///< 若MCPWM_FAIL012[15] = 1，当fail0/1发生时，将MCPWM_CNT0存储到MCPWM_FCNT [15:0] 若MCPWM0_CH_FAIL[15]=1，当发生fail0/1事件时，记录MCPWM0_CNT0值
    __IOM uint32_t EVT0;        ///< MCPWM基础0外部触发寄存器 [15] TIMER3 CMP1事件触发时基0开始计数 [14] TIMER3 CMP0事件触发时基0开始计数 [13] TIMER2 CMP1事件触发时基0开始计数 [12] TIMER2 CMP0事件触发时基0开始计数 [11] TIMER1 CMP1事件触发时基0开始计数 [10] TIMER1 CMP0事件触发时基0开始计数 [9] TIMER0 CMP1事件触发时基0开始计数 [8] TIMER0 CMP0事件触发时基0开始计数 [3] MCPWM0 TMR3事件触发时基0开始计数 [2] MCPWM0 TMR2事件触发时基0开始计数 [1] MCPWM0 TMR1事件触发时基0开始计数 [0] MCPWM0 TMR0事件触发时基0开始计数
    __IM uint32_t RESERVED3;    //
    __IOM uint32_t DTH00;       ///< 通道0/1/2 N死区控制寄存器，10位无符号 [9:0] MCPWM CH0/1/2 P通道死区宽度控制寄存器
    __IOM uint32_t DTH01;       ///< 通道0/1/2 P死区控制寄存器，10位无符号 [9:0] MCPWM CH0/1/2 N通道死区宽度控制寄存器
    __IM uint32_t RESERVED4[2]; //
    __IOM uint32_t FLT;         ///< FAIL信号滤波配置 [7:0] 滤波时钟分频寄存器
    __IOM uint32_t SDCFG;       ///< 影子寄存器重载配置 [6] 更新事件是否自动清除MCPWM0_EIF[5:4]并置位MCPWM0_CH012_FAIL.MOE [5] 时基0 t1（过零）事件更新使能 [4] 时基0 t0（起点）事件更新使能 [3:0] 时基0更新间隔
    __IOM uint32_t AUEN;        ///< 自动更新使能 [25] MCPWM0_TMR3自动加载使能 [24] MCPWM0_TMR2自动加载使能 [17] MCPWM0_TH31自动加载使能 [16] MCPWM0_TH30自动加载使能 [12] MCPWM0_IO0/1/2自动加载使能 [11] MCPWM0_CNT0自动加载使能 [10] MCPWM0_TH0自动加载使能 [9] MCPWM0_TMR1自动加载使能 [8] MCPWM0_TMR0自动加载使能 [5] MCPWM0_TH21自动加载使能 [4] MCPWM0_TH20自动加载使能 [3] MCPWM0_TH11自动加载使能 [2] MCPWM0_TH10自动加载使能 [1] MCPWM0_TH01自动加载使能 [0] MCPWM0_TH00自动加载使能
    __IOM uint32_t TCLK;        ///< MCPWM时钟配置寄存器 [14:12] MCPWM工作时钟分频寄存器 [8] 时基0外部触发使能 [6] MCPWM时基0计数器使能开关 [2] MCPWM工作时钟使能
    __IOM uint32_t IE0;         ///< 基础计数器0中断源使能 [14] 时基0更新事件中断源使能 [13] MCPWM0_CNT0等于MCPWM0_TMR3中断源使能 [12] MCPWM0_CNT0等于MCPWM0_TMR2中断源使能 [11] MCPWM0_CNT0等于MCPWM0_TMR1中断源使能 [10] MCPWM0_CNT0等于MCPWM0_TMR0中断源使能 [9] MCPWM0_CNT0等于MCPWM0_TH31中断源使能 [8] MCPWM0_CNT0等于MCPWM0_TH30中断源使能 [7] MCPWM0_CNT0等于MCPWM0_TH21中断源使能 [6] MCPWM0_CNT0等于MCPWM0_TH20中断源使能 [5] MCPWM0_CNT0等于MCPWM0_TH11中断源使能 [4] MCPWM0_CNT0等于MCPWM0_TH10中断源使能 [3] MCPWM0_CNT0等于MCPWM0_TH01中断源使能 [2] MCPWM0_CNT0等于MCPWM0_TH00中断源使能 [1] 时基0 T1事件，MCPWM0_CNT0的计数值回0中断源使能 [0] 时基0 T0事件，MCPWM0_CNT0的计数值等于MCPWM0_TH0中断源使能
    __IOM uint32_t IF0;         ///< 基础计数器0中断标志 [14] 时基0更新事件MCPWM0_TH0/MCPWM0_TH00~MCPWM0_TH21/MCPWM0_TMR等寄存器更新到MCPWM实际运行系统的中断事件 [13] MCPWM0_CNT0等于MCPWM0_TMR3中断事件 [12] MCPWM0_CNT0等于MCPWM0_TMR2中断事件 [11] MCPWM0_CNT0等于MCPWM0_TMR1中断事件 [10] MCPWM0_CNT0等于MCPWM0_TMR0中断事件 [7] MCPWM0_CNT0等于MCPWM0_TH21中断事件 [6] MCPWM0_CNT0等于MCPWM0_TH20中断事件 [5] MCPWM0_CNT0等于MCPWM0_TH11中断事件 [4] MCPWM0_CNT0等于MCPWM0_TH10中断事件 [3] MCPWM0_CNT0等于MCPWM0_TH01中断事件 [2] MCPWM0_CNT0等于MCPWM0_TH00中断事件 [1] t1事件，MCPWM0_CNT0等于0中断事件 [0] t0事件，MCPWM0_CNT0等于MCPWM0_TH中断事件
    __IM uint32_t RESERVED5[2]; //
    __IOM uint32_t EIE;         ///< 错误中断源使能 [5] FAIL1中断源使能 [4] FAIL0中断源使能
    __IOM uint32_t EIF;         ///< 错误中断标志 [5] FAIL1中断源事件 [4] FAIL0中断源事件
    __IOM uint32_t RE;          ///< DMA请求使能 [13] 时基0 T1事件DMA请求1使能 [12] 时基0 T0事件DMA请求1使能 [11] MCPWM计数器命中TMR3，DMA请求1使能 [10] MCPWM计数器命中TMR2，DMA请求1使能 [9] MCPWM计数器命中TMR1，DMA请求1使能 [8] MCPWM计数器命中TMR0，DMA请求1使能 [5] 时基0 T1事件DMA请求0使能 [4] 时基0 T0事件DMA请求0使能 [3] MCPWM计数器命中TMR3，DMA请求0使能 [2] MCPWM计数器命中TMR2，DMA请求0使能 [1] MCPWM计数器命中TMR1，DMA请求0使能 [0] MCPWM计数器命中TMR0，DMA请求0使能
    __IOM uint32_t PP;          ///< 推挽配置 [3] IO3推挽模式使能信号 [2] IO2推挽模式使能信号 [1] IO1推挽模式使能信号 [0] IO0推挽模式使能信号
    __IOM uint32_t IO01;        ///< 通道0/1设置 [15] CH1工作模式选择 [14] CH1的P和N通道输出互换选择 [13] 当CH1_PS=1时，输出到CH1 P通道的值 [12] 当CH1_NS=1时，输出到CH1 N通道的值 [11] CH1 P来源 [10] CH1 N来源 [9] CH1 P极性选择 [8] CH1 N极性选择 [7] CH0工作模式选择 [6] CH0的P和N通道输出互换选择 [5] 当CH0_PS =1时，输出到CH0 P通道的值 [4] 当CH0_NS =1时，输出到CH0 N通道的值 [3] CH0 P来源 [2] CH0 N来源 [1] CH0 P极性选择 [0] CH0 N极性选择
    __IOM uint32_t IO23;        ///< 通道2/3设置 [15] CH3工作模式选择 [14] CH3的P和N通道输出互换选择 [13] 当CH3_PS =1时，输出到CH3 P通道的值 [12] 当CH3_NS =1时，输出到CH3 N通道的值 [11] CH3 P来源 [10] CH3 N来源 [9] CH3 P极性选择 [8] CH3 N极性选择 [7] CH2工作模式选择 [6] CH2的P和N通道输出互换选择 [5] 当CH2_PS =1时，输出到CH2 P通道的值 [4] 当CH2_NS =1时，输出到CH2 N通道的值 [3] CH2 P来源 [2] CH2 N来源 [1] CH2 P极性选择 [0] CH2 N极性选择
    __IM uint32_t RESERVED6[2]; //
    __IOM uint32_t CH_FAIL;     ///< MCPWM通道短路控制寄存器 [15] 当发生fail0/1事件时，将MCPWM0_CNT0值存入MCPWM0_FCNT [11:10] FAIL1来源选择 [9:8] FAIL0来源选择 [7] MCU进入HALT状态，MCPWM输出值选择 [6] MOE控制MCPWM通道P和N输出值 [5] FAIL1输入使能 [4] FAIL0输入使能 [3] FAIL1极性选择 [2] FAIL0极性选择
    __IM uint32_t RESERVED7;    //
    __IOM uint32_t CH_DEF;      ///< MCPWM通道默认值 [7] CH3 P通道默认值 [6] CH3 N通道默认值 [5] CH2_P通道默认值 [4] CH2_N通道默认值 [3] CH1_P通道默认值 [2] CH1_N通道默认值 [1] CH0_P通道默认值 [0] CH0_N通道默认值
    __IOM uint32_t CH_MSK;      ///< MCPWM通道故障掩码 [7] CH3_P 通道FAIL事件使能 [6] CH3_N 通道FAIL事件使能 [5] CH2_P 通道FAIL事件使能 [4] CH2_N 通道FAIL事件使能 [3] CH1_P 通道FAIL事件使能 [2] CH1_N通道 FAIL事件使能 [1] CH0_P 通道FAIL事件使能 [0] CH0_N 通道FAIL事件使能
    __OM uint32_t PRT;          ///< MCPWM寄存器保护 [15:0] 写入0xDEAD，解除MCPWM寄存器写保护；写入其它值，MCPWM寄存器进入写保护
    __IM uint32_t RESERVED8[3]; //
    __IOM uint32_t SW_FAIL;     ///< 软件故障测试寄存器 [5] FAIL1软件测试信号使能 [4] FAIL0软件测试信号使能 [1] FAIL1软件测试信号 [0] FAIL0软件测试信号
} HAL_MCPWM_TypeDef;
/**
 * @brief QEP0寄存器 (QEP0)
 */
typedef struct
{                       ///< QEP0结构体
    __IOM uint32_t CFG; ///< QEP配置 [23:16] 编码器的滤波系数 [15] QEP模块整体使能 [10] CCW+SIGN/CCW+CW两种模式下，是否在下降沿进行计数（上升沿总是计数） [9:8] 编码器模式选择 [3] Z信号清零极性选择:低电平/下降沿清零使能 [2] Z信号清零极性选择:高电平/上降沿清零使能 [1] Z信号电平清零QEP计数器使能 [0] Z信号边沿清零QEP计数器使能
    __IOM uint32_t TH;  ///< 编码器计数阈值 [15:0] 计数门限TH。编码器将从0计数到TH，然后重新开始，或者从TH向下计数到0然后重新开始
    __IOM uint32_t CNT; ///< 编码器当前计数值 [15:0] QEP0计数值
    __IOM uint32_t IE;  ///< QEP中断使能 [1] 上溢出中断使能 [0] 下溢出中断使能
    __IOM uint32_t IF;  ///< QEP中断标志 [1] 上溢出中断标志 [0] 下溢出中断标志
} HAL_QEP_TypeDef;
/**
 * @brief SIF0寄存器 (SIF0)
 */
typedef struct
{                         ///< SIF0 结构体
    __IOM uint32_t CFG;   ///< SIF 配置寄存器 [7] SIF模块数据传输，完成信号默认电平 [6] SIF模块数据传输，同步信号默认电平 [5] SIF模块数据传输，同步信号是否产生脉冲信号 [4] SIF模块数据传输，结束信号控制位 [3] SIF模块数据传输，同步信号控制位 [2] SIF模块数据占空比控制位 [1] SIF模块数据大小头控制位 [0] SIF模块使能位
    __IOM uint32_t TOSC;  ///< SIF 时间基准寄存器 [11:0] SIF模块时基设置
    __IOM uint32_t TSTH1; ///< SIF 同步字符周期 [9:0] SIF模块同步信号周期
    __IOM uint32_t TDTH1; ///< SIF 完成字符周期 [3:0] SIF模块结束信号周期
    __IOM uint32_t IRQ;   ///< SIF 中断寄存器 [4] SIF模块中断标志位 [1] SIF模块DMA使能控制位 [0] SIF模块中断使能控制位
    __IOM uint32_t WDATA; ///< SIF 写数据寄存器，写入以开始传输 [7:0] SIF模块数据寄存器
} HAL_SIF_TypeDef;
/**
 * @brief SPI0寄存器 (SPI0)
 */
typedef struct
{                           ///< SPI0 结构体
    __IOM uint32_t CFG;     ///< SPI 控制寄存器 [7:6] 半双工模式设置 [5] SPI从设备下，片选信号来源 [4] SPI主从模式选择 [3] SPI相位选择 [2] SPI极性选择 [1] SPI模块传输顺序 [0] SPI模块使能信号
    __IOM uint32_t IE;      ///< SPI 中断使能 [7] SPI中断使能开关 [6] SPI传输，完成事件中断使能信号 [5] SPI传输，异常事件中断使能信号 [4] SPI传输，溢出事件中断使能信号 [3] 传输触发选择 [2] SPI传输，完成事件 [1] SPI传输，异常事件 [0] SPI传输，溢出事件
    __IOM uint32_t DIV;     ///< SPI 时钟分频 [15] SPI数据搬移方式 [11:0] SPI传输波特率配置
    __IOM uint32_t TX_DATA; ///< SPI 发送数据 [15:0] SPI数据发送寄存器
    __IOM uint32_t RX_DATA; ///< SPI 接收数据 [15:0] SPI数据接收寄存器
    __IOM uint32_t SIZE;    ///< SPI 传输位数 [4:0] 字节长度寄存器
} HAL_SPI_TypeDef;
/**
 * @brief SYS寄存器 (SYS)
 */
typedef struct
{                                ///< SYS 结构体
    __IM uint32_t AFE_ADC;       ///< ADC原始数据 [11:0] ADC输出的原始数据
    __IM uint32_t AFE_INFO;      ///< 芯片版本信息 [15:8] 芯片型号信息 [7:0] 芯片版本信息
    __IM uint32_t AFE_DBG;       ///< AFE调试寄存器 [15] 供电低于掉电监测阈值 [14:0] 保留位
    __IOM uint32_t OPA_SEL;      ///< OPA选择 [15] ADC和运放模式 [14:13] 掉电检测阈值Vth选择 [12] 掉电检测基准源选择 [11] 掉电检测电路开关 [10] OPA 内部IP/IN短接以测试零漂 [9:8] OPA偏置电流调节 [7:6] 运放3反馈电阻 [5:4] 运放2反馈电阻 [3:2] 运放1反馈电阻 [1:0] 运放0反馈电阻
    __IOM uint32_t AFE_REG0;     ///< 模拟寄存器0 [15] ADC和运放模式 [14:13] 掉电检测阈值Vth选择 [12] 掉电检测基准源选择 [11] 掉电检测电路开关 [10] OPA 内部IP/IN短接以测试零漂 [9:8] OPA偏置电流调节 [7:6] 运放3反馈电阻 [5:4] 运放2反馈电阻 [3:2] 运放1反馈电阻 [1:0] 运放0反馈电阻
    __IOM uint32_t AFE_REG1;     ///< 模拟寄存器1 [15] OPA3开关 [14] OPA2开关 [13] OPA1开关 [12] OPA0开关 [11] BandGap开关 [10] 8MHz RCH时钟开关 [9] 晶振低通滤波关闭 [8] 0:不输出1:使能1.5V LDO输出到IO P0_0 [7] 8BIT DAC量程选择 [6] 12BIT DAC量程选择 [5] 保留位，必须为0 [4] 晶振选择反相器或者施密特 [3:1] SW电压测量时片内电阻阻值选择 [0] 1: 比较器延迟为:15ns(pos)，32ns(neg)0:比较器延迟为:92ns(pos)，320ns(neg)
    __IOM uint32_t AFE_REG2;     ///< 模拟寄存器2 [15] 使能测量反电动势 [14:13] 测量反电动势的零温度系数电阻连接关系 [12] 保留位 [11:10] 使能比较器三个正输入端中点信号到输出 [9] 保留位 [8] 晶体起振电路电阻调节 [7] 使能DAC1输出到IO [6] 使能DAC0输出到IO [5] 使能VREF输出到IO [4] 使能VBGP输出到IO [3:0] 使能_OPAx输出信号送至IO口，或使能OPAx_OUT输出信号送至CMP
    __IOM uint32_t AFE_REG3;     ///< 模拟寄存器3 [15:12] 比较器1正端信号选择 [11:8] 比较器0正端信号选择 [7] 比较器回差选择 [6:4] 比较器1信号负端选择 [3] 保留位，必须为0 [2:0] 比较器0信号负端选择
    __IOM uint32_t AFE_REG4;     ///< 模拟寄存器4 [12] ADC测量运放通道半波使能 [4] 使用外部输入电源作为ADC REF
    __IOM uint32_t AFE_REG5;     ///< 模拟寄存器5 [15:10] 保留位，必须为0 [9:8] 电源复位阈值Vth选择 [7] 比较器1开关 [6] 比较器0开关 [5] PLL开关 [4] 晶体起振电路开关 [3] 温度传感器开关 [2] 8BIT DAC开关 [1] 12BIT DAC开关 [0] 保留位，必须为0
    __IM uint32_t RESERVED;      //
    __IOM uint32_t AFE_REG7;     ///< 模拟寄存器7 [15:10] 保留位，必须为0 [9] ADC使能位 [8] ADC采样保持电路使能位 [7] 保留位，必须为0 [6:4] PLL输出频率选择 [3:0] 保留位，必须为0
    __IM uint32_t RESERVED1[11]; //
    __IOM uint32_t AFE_DAC_CTRL; ///< DAC控制寄存器 [6:4] SYS_AFE_DAC0步进值 [3] TIMER3过零事件触发DAC0步进使能 [2] TIMER2过零事件触发DAC0步进使能 [1] TIMER1过零事件触发DAC0步进使能 [0] TIMER0过零事件触发DAC0步进使能
    __IOM uint32_t AFE_DAC0;     ///< DAC0数字输入 [11:0] DAC0待转换的数字量输入
    __IOM uint32_t AFE_DAC1;     ///< DAC1数字量寄存器 [7:0] DAC1待转换的数字量输入
    __IOM uint32_t AFE_DAC0_AMC; ///< DAC0增益校正值，10bit无符号定点数，B[9]为整数，B[8:0]为小数
    __IOM uint32_t AFE_DAC0_DC;  ///< DAC0直流偏置，10bit有符号数，B[9]为符号位
    __IOM uint32_t AFE_DAC1_AMC; ///< DAC1增益校正值，10bit无符号定点数，B[9]为整数，B[8:0]为小数
    __IOM uint32_t AFE_DAC1_DC;  ///< DAC1直流偏置，10bit 有符号数，B[9]为符号位
    __IM uint32_t RESERVED2[2];  //
    __IOM uint32_t CLK_CFG;      ///< 时钟配置 [14] PLLPDN设置为1后，经过一段时间，PLL_LOCK为1 [13] 晶振时钟在被开启后是否停振过 [12] 晶振时钟当前是否已经停振 [9:8] 系统时钟MCLK的来源选择信号 [7:0] PLL输出分频控制
    __IOM uint32_t IO_CFG;       ///< IO配置 [6] SWD复用控制信号 [5] RSTn/P0.2复用控制信号
    __IOM uint32_t DBG_CFG;      ///< 调试配置 [31:16] 向此位段写入0x5AA5 触发软件中断 [15] 软件中断标志 [14] Debug软复位是否复位除Flash/SYS_AFE以外的外设寄存器 [11] 调试模式下CPU halt状态TIMER3停止 [10] 调试模式下CPU halt状态TIMER2停止 [9] 调试模式下CPU halt状态TIMER1停止 [8] 调试模式下CPU halt状态TIMER0停止 [5] 调试模式下CPU halt状态独立看门狗停止 [1] 调试STOP(DEEPSLEEP)模式 [0] 调试睡眠(SLEEP)模式
    __IM uint32_t RESERVED3;     //
    __IOM uint32_t CLK_DIV0;     ///< I2C时钟分频 [15:0] I2C工作时钟=MCLK/(CLK_DIV0+1)
    __IOM uint32_t CLK_DIV1;     //
    __IOM uint32_t CLK_DIV2;     ///< UART时钟分频 [15:0] UART工作时钟=MCLK/(CLK_DIV2+1)
    __IOM uint32_t CLK_FEN;      ///< 外设时钟使能 [24:22] 保留 [21] CL0模块时钟控制信号 [20] SIF0模块时钟控制信号 [19] DSP0模块时钟控制信号 [16] CRC0模块时钟控制信号 [15] UART2模块时钟控制信号 [13] UART1模块时钟控制信号 [12] UART0模块时钟控制信号 [11] GPIO模块时钟控制信号 [10] MCPWM0模块时钟控制信号 [9] QEP0模块时钟控制信号 [7] TIMER2模块时钟控制信号 [5] TIMER1模块时钟控制信号 [4] TIMER0模块时钟控制信号 [3] HALL0模块时钟控制信号 [2] CMP模块时钟控制信号 [1] I2C0模块时钟控制信号 [0] SPI0模块时钟控制信号
    __IM uint32_t RESERVED41;    //
    __IOM uint32_t SFT_RST;      ///< 外设软复位 [26] EEPROM模块软复位信号 [25:24] 保留 [23] ADC1数字接口模块软复位信号 [22] ADC0数字接口模块软复位信号 [21] CL0模块软复位信号 [20] SIF0模块软复位信号 [19] DMA0模块软复位信号 [17] DSP0模块软复位信号 [16] CRC0数字接口模块软复位信号 [15] UART1模块软复位信号 [13] UART1模块软复位信号 [12] UART0模块软复位信号 [11] GPIO模块软复位信号 [10] MCPWM0模块软复位信号 [9] QEP1模块软复位信号 [8] QEP0模块软复位信号 [7] TIMER3模块软复位信号 [6] TIMER2模块软复位信号 [5] TIMER1模块软复位信号 [4] TIMER0模块软复位信号 [3] HALL0模块软复位信号 [2] CMP模块软复位信号 [1] I2C0模块软复位信号 [0] SPI0模块软复位信号
    __OM uint32_t PROTECT;       ///< 系统寄存器保护 [15:0] 写入0x7a83解除保护，其他值加上保护，除SYS_AFE_DAC0、SYS_AFE_DAC0_AMC、SYS_AFE_DAC0_DC、SYS_AFE_DAC1、SYS_AFE_DAC1_AMC、SYS_AFE_DAC1_DC外，其他系统寄存器(SYS_开头的寄存器，包括时钟复位管理以及模拟寄存器)受写保护
    __IM uint32_t RESERVED5;     //
    __IOM uint32_t NMI_TH;       ///< NMI间隔阈值 [1] NMI定时中断标志 [0] NMI间隔阈值
    __IOM uint32_t IF;           ///< 系统中断 [1] 电源过低中断标志 [0] NMI定时中断标志
    __IOM uint32_t RAM_LOCK;     ///< RAM写保护寄存器 [31:8] 只有在[31:8]写入0x5a6b7c的同时，才能改写[7:0] [7] 0x1C00~0x1FFF RAM空间写入锁定 [6] 0x1800~0x1BFF RAM空间写入锁定 [5] 0x1400~0x17FF RAM空间写入锁定 [4] 0x1000~0x13FF RAM空间写入锁定 [3] 0x0C00~0x0FFF RAM空间写入锁定 [2] 0x0800~0x0BFF RAM空间写入锁定 [1] 0x0400~0x07FF RAM空间写入锁定 [0] 0x0000~0x03FF RAM空间写入锁定
    __IM uint32_t RESERVED6;     //
    __IM uint32_t RESERVED7[4];  //
    __IOM uint32_t FLSE;
    __IOM uint32_t FLSP;
} HAL_SYS_TypeDef;
/**
 * @brief TIMER0寄存器 (TIMER0)
 */
typedef struct
{                           ///< TIMER0 结构体，timer0和timer1是16位的，timer2是32位的
    __IOM uint32_t CFG0;    ///< 定时器通道0配置 [10:9] 用于选择递增计数时触发还是递减计数的时候触发adc采样 [8] 当发生CAP捕获事件时，清零TIMERx_CNT [7:4] TIMER捕获模式通道0信号来源 [3] TIMER通道0在比较模式下的输出极性控制 [2] TIMER通道0的工作模式选择 [1] TIMER通道0下降沿捕获事件使能 [0] TIMER通道0上升沿捕获事件使能
    __IOM uint32_t CFG1;    ///< 定时器通道1配置 [10:9] 用于选择递增计数时触发还是递减计数的时候触发adc采样 [8] 当发生CAP1捕获事件时，清零TIMERx_CNT [7:4] TIMER捕获模式通道1信号来源 [3] TIMER通道1在比较模式下的输出极性控制 [2] TIMER通道1的工作模式选择 [1] TIMER通道1下降沿捕获事件使能 [0] TIMER通道1上升沿捕获事件使能
    __IOM uint32_t CFG2;    ///< 定时器配置2 [15] TIMER模块整体使能 [14] 单次触发模式下是否可以在一个周期内再次触发 [13] 当RL_EN=1时，使用CMP1作为TMIN [11] 软件更新启用影子寄存器时，向UPDATE写1将TH/CMP0/CMP1的预装载值加载到影子寄存器STH/SCMP0/SCMP1之中 [10] 0: 不启用影子寄存器，软件写入TH/CMP0/CMP1时直接更新对应的影子寄存器1: 启用影子寄存器，软件写入TH/CMP0/CMP1时进仅仅更新预装载值，当TIMER发生过零事件时才将预装载值写入影子寄存器 [9] 单次发送模式 [8] 中心计数模式使能 [7] 0: 0->TH递增计数，1:TH->递减计数 [6:4] TIMERx_CNT频率配置 [3] TIMERx_CNT外部启动使能 [2] TIMER暂停使能 [1] TIMER重装使能 [0] TIMER 时钟源
    __IM uint32_t RESERVED; //
    __IOM uint32_t TH;      ///< 定时器计数阈值 [15:0] TIMER 计数器计数门限
    __IOM uint32_t CNT;     ///< 定时器当前计数值 [15:0] TIMER 0计数器当前计数值
    __IOM uint32_t CHN0;    ///< 定时器通道0 CMP/CAP 阈值 [15:0] TIMER 通道0工作在比较模式时，当计数器计数值等于CMP0时，发生比较事件
    __IOM uint32_t CHN1;    ///< 定时器通道1 CMP/CAP 阈值 [15:0] TIMER 通道1工作在比较模式时，当计数器计数值等于CMP1时，发生比较事件
    __IOM uint32_t EVT;     ///< 定时器外部触发事件 [7:4] 外部事件发生次数阈值 [3:0] TIMER外部事件选择寄存器
    __IOM uint32_t FLT;     ///< 定时器滤波控制寄存器 [7:0] 通道0/1信号滤波宽度选择
    __IOM uint32_t IE;      ///< 定时器中断使能 [11] TIMER FAIL事件 DMA请求使能 [10] TIMER CNT过0 DMA请求使能 [9] TIMER通道1比较/捕获 DMA请求使能 [8] TIMER通道0比较/捕获 DMA请求使能 [3] TIMER FAIL事件中断使能 [2] TIMER CNT过0中断使能 [1] TIMER通道1比较/捕获中断使能 [0] TIMER通道0比较/捕获中断使能
    __IOM uint32_t IF;      ///< 定时器中断标志 [3] TIMER Fail事件中断标志 [2] TIMER CNT过0中断标志 [1] TIMER通道1比较/捕获中断标志 [0] TIMER通道0比较/捕获中断标志
    __IOM uint32_t IO;      ///< 定时器IO控制寄存器 [9] 发生Fail事件MOE清零后，CH1通道输出值 [8] 发生Fail事件MOE清零后，CH0通道输出值 [7] MCU进入HALT状态，TIMER输出值选择 [6] TIMER通道0/1输出使能 [2] FAIL信号选择 [1] FAIL信号极性 [0] FAIL信号使能
} HAL_TIMER_TypeDef;
/**
 * @brief UART寄存器
 */
typedef struct
{
    __IOM uint32_t CTRL; ///< UART控制 [7] 双工模式 [6] LIN模式使能 [5] 使能Multi-drop [4] 数据校验开关 [3] 奇偶校验配置 [2] 数据发送顺序配置 [1] 停止位长度配置 [0] 数据长度配置
    __IOM uint32_t DIVH; ///< UART波特率高字节 [7:0] 波特率设置高字节
    __IOM uint32_t DIVL; ///< UART波特率低字节 [7:0] 波特率设置低字节
    __IOM uint32_t BUFF; ///< UART读/写缓冲区 [8:0] 写:发送数据缓存；读:接收数据寄存器
    __IOM uint32_t ADR;  ///< UART匹配地址 [7:0] 多机通讯时的从机地址
    __IOM uint32_t STT;  ///< UART状态 [3] 1:UART已检测到起始符并正处于接收状态0:UART接收端空闲 [2] Multi-drop模式下，地址匹配标志位 [1] 发送完成标志位 [0] 发送缓存状态位
    __IOM uint32_t RE;   ///< UART DMA请求使能 [2] 发送缓冲区空DMA请求开关 [1] 接收完成DMA请求开关 [0] 发送完成DMA请求开关
    __IOM uint32_t IE;   ///< UART中断使能 [9] 波特率自适应中断使能 [8] 空闲帧中断使能 [7] LIN break character检测中断使能 [6] 接收缓冲区溢出中断使能 [5] 发送缓冲区溢出中断使能 [4] 校验错误中断开关 [3] 停止位错误中断开关 [2] 发送缓冲区空中断开关 [1] 接收完成中断开关 [0] 发送完成中断开关
    __IOM uint32_t IF;   ///< UART中断标志 [9] 波特率自适应使能情况下，发生波特率更新事件 [8] 空闲帧中断标志 [7] LIN break character检测中断标志 [6] 接收缓冲区溢出中断标志 [5] 发送缓冲区溢出中断标志 [4] 校验错误中断标志 [3] 停止位错误中断标志 [2] 发送缓冲区空中断标志 [1] 接收完成中断标志 [0] 发送完成中断标志
    __IOM uint32_t IOC;  ///< UART IO控制 [7] LIN模式下，写1发送一次break character [6] LIN break character检测长度 [4] 波特率自适应使能 [1] TXD输出极性使能开关 [0] RXD输入极性使能开关
} HAL_UART_TypeDef;
/**
 *@brief IWDG寄存器结构体句柄
 */
typedef struct
{
    __IO uint32_t PSW; ///< 独立看门狗密码寄存器 [15:0] 写入0xA6B4，才能对IWDG_CLR/ IWDG_RTH等进行写操作，对IWDG_CLR或IWDG_RTH的写操作会将密码清空，因此每次对看门狗IWDG_CLR/ IWDG_RTH寄存器进行写操作前都需要重新写入密码
    __IO uint32_t CFG; ///< 独立看门狗配置寄存器 [4] 深度休眠定时唤醒使能，0:禁用，1:使能 [0] WDG_EN 独立看门狗使能，0:禁用，1:使能。默认使能，写1置位，写0同时向[15:8]写入0x3C可清零。当看门狗被禁用时，不再产生复位信号，但仍可计数并产生定时唤醒信号
    __IO uint32_t CLR; ///< 独立看门狗清零寄存器 [15:0] 写入字节 16’b0111_1001_1000_110B0，高15位为密码，密码正确时，B[0]才能写入B[0]写入1，则重置WDT计数器为TH，且该bit写入后自动清零，写入0无效
    __IO uint32_t WTH; ///< 独立看门狗定时唤醒门限寄存器 [20:8] 看门狗定时唤醒门限值，看门狗使用64kHz LRC时钟从IWDG_RTH开始计数，递减计数至WTH产生唤醒信号。 [7:0] 恒为0
    __IO uint32_t RTH; ///< 独立看门狗超时复位门限寄存器 [20:8] 看门狗超时复位门限值，也是重新装载值。看门狗使用64kHz LRC时钟从RTH开始计数，计数至0x7产生复位。向该寄存器写入0x0，会被硬件强制改写为0x100。先向IWDG_PSW写入正确密码才能改写IWDG_RTH寄存器。改写RTH同样具有重置看门狗计数器的作用，看门狗会从新的IWDG_RTH开始计数。 [7:0] 恒为0
    __IO uint32_t CNT; ///< 独立看门狗当前计数值寄存器 [20:0] 看门狗当前计数值，此数值≤IWDG_TH
} HAL_IWDG_TypeDef;

/**
 *@brief AON寄存器结构体句柄
 */
typedef struct
{
    __IOM uint32_t PWR_CFG;     ///< 功耗管理配置寄存器 [1] IOWK_FLT IO 唤醒信号滤波使能，默认使能
    __IOM uint32_t EVT_RCD;     ///< 事件记录寄存器 [13] 深度休眠记录，高表示发生过 [12] 休眠记录，高表示发生过[9] IWDG 定时唤醒记录，高表示 Deep Sleep 休眠被 IWDG 定时唤醒[8] IO唤醒或CLU 唤醒记录，高表示Deep Sleep休眠被AON_IO_WAKE_EN中对应的使能信号唤醒[3] 独立看门狗复位发生记录，高表示发生过[2] 按键复位发生记录，高表示发生过[0] POR 复位发生记录，高表示发生过
    __IOM uint32_t IO_WAKE_POL; ///< IO 唤醒极性寄存器 [7] P2[0]外部唤醒极性[6] P2[4]外部唤醒极性[5] P2[7]外部唤醒极性[4] P0[14]外部唤醒极性[3] P0[13]外部唤醒极性[2] P0[12]外部唤醒极性[1] P0[2]外部唤醒极性[0] P0[0]外部唤醒极性
    __IOM uint32_t IO_WAKE_EN;  ///< IO 唤醒使能寄存器 [11] CLUOUT3 作为唤醒使能 [10] CLUOUT2 作为唤醒使能 [9]  CLUOUT1 作为唤醒使能 [8]  CLUOUT0 作为唤醒使能 [7]  P2[0]外部唤醒使能 [6]  P2[4]外部唤醒使能 [5]  P2[7]外部唤醒使能 [4]  P0[14]外部唤醒使能 [3]  P0[13]外部唤醒使能 [2]  P0[12]外部唤醒使能 [1]  P0[2]外部唤醒使能 [0]  P0[0]外部唤醒使能
    __IOM uint32_t BKP_REG0;    ///< 后备寄存器 0
    __IOM uint32_t BKP_REG1;    ///< 后备寄存器 1
} HAL_AON_TypeDef;

#define CLU0     ((HAL_CLU_TypeDef *)CL0_BASE)
#define DMA_CHN0 ((HAL_DMA_TypeDef *)DMA0_BASE)
#define DMA_CHN1 ((HAL_DMA_TypeDef *)(DMA0_BASE + 0x20))
#define DMA_CHN2 ((HAL_DMA_TypeDef *)(DMA0_BASE + 0x40))
#define DMA_CHN3 ((HAL_DMA_TypeDef *)(DMA0_BASE + 0x60))
#define DMA_TOP  ((HAL_DMAMODULE_TypeDef *)(DMA0_BASE + 0x80))
#define EXTI0    ((HAL_EXTI_TypeDef *)EXTI_BASE)
#define QEP0     ((HAL_QEP_TypeDef *)QEP0_BASE)
#define SIF0     ((HAL_SIF_TypeDef *)(SIF0_BASE))
#define AON0     ((HAL_AON_TypeDef *)AON_BASE)

#endif

extern HAL_SYS_TypeDef *const HAL_SYS[];
extern HAL_FLASH_TypeDef *const HAL_FLASH[];
extern HAL_SPI_TypeDef *const HAL_SPI[];
extern HAL_I2C_TypeDef *const HAL_I2C[];
extern HAL_CMP_TypeDef *const HAL_CMP[];
extern HAL_HALL_TypeDef *const HAL_HALL[];
extern HAL_ADC_TypeDef *const HAL_ADC[];
extern HAL_TIMER_TypeDef *const HAL_TIMER[];
extern HAL_MCPWM_TypeDef *const HAL_MCPWM[];
extern HAL_GPIO_TypeDef *const HAL_GPIO[];
extern HAL_CRC_TypeDef *const HAL_CRC[];
extern HAL_UART_TypeDef *const HAL_UART[];
extern HAL_DSP_TypeDef *const HAL_DSP[];
extern HAL_IWDG_TypeDef *const HAL_IWDG[];

#include "include/hal_lksmcu_adc.h"
#include "include/hal_lksmcu_can.h"
#include "include/hal_lksmcu_clk.h"
#include "include/hal_lksmcu_cmp.h"
#include "include/hal_lksmcu_crc.h"
#include "include/hal_lksmcu_dac.h"
#include "include/hal_lksmcu_dma.h"
#include "include/hal_lksmcu_dsp.h"
#include "include/hal_lksmcu_flash.h"
#include "include/hal_lksmcu_gpio.h"
#include "include/hal_lksmcu_hall.h"
#include "include/hal_lksmcu_i2c.h"
#include "include/hal_lksmcu_init.h"
#include "include/hal_lksmcu_iwdg.h"
#include "include/hal_lksmcu_mcpwm.h"
#include "include/hal_lksmcu_opa.h"
#include "include/hal_lksmcu_qep.h"
#include "include/hal_lksmcu_reset.h"
#include "include/hal_lksmcu_spi.h"
#include "include/hal_lksmcu_timer.h"
#include "include/hal_lksmcu_tmp.h"
#include "include/hal_lksmcu_trim.h"
#include "include/hal_lksmcu_uart.h"
#include "include/hal_lksmcu_wake.h"
#endif
