# 定时器电刺激综合测试工程移植说明

## 项目概述
本项目将ENS_EMSsine_TEST中的电刺激功能移植到TIMER_DEMO中，实现GPIO定时翻转电平的同时电刺激通道输出方波，且二者互不干扰。

## 移植内容

### 1. 新增文件

#### 升压电压选择模块
- `FWLIB/include/ENS1_BOOST.h` - 升压电压选择头文件
- `FWLIB/source/ENS1_BOOST.c` - 升压电压选择实现

**功能：**
- `boost_voltage_select_11V()` - 设置11V升压
- `boost_voltage_select_15V()` - 设置15V升压  
- `boost_voltage_select_26V()` - 设置26V升压
- `boost_voltage_select_45V()` - 设置45V升压
- `boost_voltage_select_55V()` - 设置55V升压

#### 波形生成器模块
- `FWLIB/include/ENS1_WAVEGEN.h` - 波形生成器头文件
- `FWLIB/source/ENS1_WAVEGEN.c` - 波形生成器实现

**功能：**
- `wavegen_Init()` - 初始化波形生成器
- `wavegen_Start()` - 启动波形生成器
- `wavegen_Stop()` - 停止波形生成器
- `wavegen_driverA_sine_test()` - 驱动器A正弦波测试
- `EMS_Configure()` - 配置电刺激参数
- `EMS_Start()` - 启动电刺激
- `EMS_Stop()` - 停止电刺激
- `EMS_UpdateIntensity()` - 更新电刺激强度
- `EMS_Process()` - 电刺激主循环处理

### 2. 修改文件

#### 主程序 (USER/mian.c)
- 添加电刺激功能初始化
- 配置电刺激参数
- 在主循环中调用`EMS_Process()`处理电刺激

#### 定时器中断 (FWLIB/source/ENS1_TIMER.c)
- 修改定时器中断处理函数，添加电刺激状态提示

## 功能特性

### 1. 定时器功能
- GPIO19每1秒翻转一次电平
- 通过UART输出定时器状态信息
- 运行在定时器中断中

### 2. 电刺激功能
- 方波电刺激输出
- 可配置频率、强度、持续时间等参数
- 运行在主循环中，与定时器互不干扰

### 3. 系统配置
- 系统时钟：32MHz HSI
- 升压电压：26V（默认）
- UART波特率：115200
- 定时器中断周期：1ms

## 使用方法

### 1. 编译和烧录
1. 使用Keil MDK打开`ENS001_BASIC_PRJ.uvprojx`
2. 编译项目
3. 烧录到目标芯片

### 2. 运行效果
- GPIO19每1秒翻转一次，用于指示定时器运行状态
- 电刺激通道输出方波信号
- 通过UART输出运行状态信息

### 3. 参数配置
可以通过修改`main()`函数中的`ems_config`结构体来调整电刺激参数：
```c
EMS_Config_TypeDef ems_config = {
    .frequency = 100,    // 频率 (Hz)
    .duration = 1000,    // 持续时间 (ms)
    .intensity = 128,    // 强度 (0-255)
    .rest_time = 100,    // 休息时间 (ms)
    .silent_time = 50    // 静默时间 (ms)
};
```

## 技术特点

### 1. 模块化设计
- 升压模块独立封装
- 波形生成器模块独立封装
- 便于维护和扩展

### 2. 互不干扰
- 定时器运行在中断中
- 电刺激运行在主循环中
- 两个功能完全独立

### 3. 参数可配置
- 电刺激参数可通过结构体配置
- 升压电压可选择不同档位
- 便于适应不同应用需求

## 注意事项

1. 确保目标芯片支持波形生成器外设
2. 电刺激输出需要连接相应的电极
3. 升压电压选择需要根据实际应用需求调整
4. 电刺激强度不宜过高，避免对人体造成伤害

## 版本信息
- 版本：V1.0
- 日期：2023-11
- 作者：NANOCHAP
- 移植自：ENS_EMSsine_TEST

