/* *Copyright ,2023 , NANOCHAP *File name: MIAN.C *Author: *Version: V1.0 *Date: 2023-11- *Description: 定时器电刺激综合测试(TIMER0 + 电刺激) *Function List: History: 1.V1.0 Date: Author: Modification: 初版 */ #include "my_header.h" #include "ENS1_MTP.h" #include "ENS1_CLOCK.h" #include "ENS1_UART.h" #include "ENS1_TIMER.h" #include "ENS1_GPIO.h" #include "ENS1_WAVEGEN.h" int main(){ // 初始化系统 MTP_init(); ClockInit(); // 初始化GPIO19用于定时器指示 GPIO_IO_Init(GPIO_19, OUTPUT, GPIO_OType_PP, GPIO_NOPULL, OUTPUT_FAST, PDRV_4mA, ENABLE); GPIO_Output(GPIO_19, LOW_LEVEL); // 初始化UART UART_Init(CMSDK_UART1, &UART1_Init); UART_ITConfig(CMSDK_UART1, &UART1_ITSet); // 初始化定时器(在wavegen_Init之前) TIMER0_Init(1); // 初始化时间管理器 Time_Manager_Init(); // 初始化波形生成器(电刺激) wavegen_Init(); // 配置电刺激参数 EMS_Config_TypeDef ems_config = { .frequency = 100, // 100Hz .duration = 1000, // 1000ms .intensity = 128, // 中等强度 .rest_time = 100, // 100ms休息时间 .silent_time = 50, // 50ms静默时间 // 缓进缓出控制参数 .ramp_up_time = 2, // 缓进时间:2秒 .hold_time = 6, // 保持时间:6秒 .ramp_down_time = 2, // 缓出时间:2秒 .enable_ramp = 1 // 启用渐进控制 }; EMS_Configure(&ems_config); // 启动电刺激 EMS_Start(); static uint8_t ems_control_count = 0; // 电刺激控制计数器 static uint8_t ems_state = 0; // 电刺激状态:0=关闭,1=开启 while(1) { // 获取时间标志位 Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags(); // 处理电刺激(在主循环中运行) // 注意:这里不再直接调用EMS_Process(),而是通过状态控制 // 基于时间标志位执行不同周期的任务 if (time_flags->T_2ms) { // 2ms周期任务 - 高频控制任务 time_flags->T_2ms = 0; // 清除标志位 } if (time_flags->T_10ms) { // 10ms周期任务 - 中频控制任务 time_flags->T_10ms = 0; // 清除标志位 } if (time_flags->T_100ms) { // 100ms周期任务 - 低频控制任务 time_flags->T_100ms = 0; // 清除标志位 } if (time_flags->T_1s) { // 1s周期任务 - 超低频任务 ems_control_count++; // 每秒递增计数器 // 间断性放电控制逻辑 if (ems_control_count <= 10) { // 前10秒:开启电刺激 if (ems_state == 0) { ems_state = 1; EMS_Start(); // 启动电刺激 } // 处理电刺激 EMS_Process(); } else if (ems_control_count <= 20) { // 后10秒:关闭电刺激 if (ems_state == 1) { ems_state = 0; EMS_Stop(); // 停止电刺激 } } else { // 重置计数器,开始新的周期 ems_control_count = 0; } GPIO_Overturn(GPIO_19); // GPIO19翻转 time_flags->T_1s = 0; // 清除标志位 } // 定时器中断处理在 TIMER0_Handler() 中 } }