#include "./BSP/AD7606/ControlCommandReceive.h" #include "usbd_cdc_if.h" // 定义指令类型 typedef enum { HEARTBEAT_FRAME = 0, CONTROL_FRAME = 1 } InstructionType; // 定义采样频率 typedef enum { FREQ_10KHZ = 1, FREQ_20KHZ = 2, FREQ_30KHZ = 3, FREQ_40KHZ = 4, FREQ_50KHZ = 5, FREQ_60KHZ = 6 } SamplingFreq; // 指令存储buf和标志 uint8_t Control_Buf[8] = {3}; // 指令存储buf uint8_t Control_Ins_Flag = 0; // 指令接收标志 0:未接收; 1:已接收 // 采样控制器和PWM频率相关变量 uint8_t sampling_control = 0; // 采样控制器 0: 停止采样; 1: 开始采样 uint32_t ARR = 100; // 用于计算PWM频率 uint32_t PCS = 14; // 用于计算PWM频率 /* 定义一个超大数组用于存储数据 */ uint8_t DataArray[16448]={0}; // 指令判断函数 void Instruct_Judgment(void) { InstructionType instructionType = (Control_Buf[0] == 0x00 && Control_Buf[1] == 0x00 && Control_Buf[2] == 0x00 && Control_Buf[3] == 0x00) ? HEARTBEAT_FRAME : CONTROL_FRAME; switch (instructionType) { case HEARTBEAT_FRAME: // 心跳帧处理代码(当前为空) break; case CONTROL_FRAME: // 启停采样判断 sampling_control = (Control_Buf[4] == 0 && Control_Buf[5] == 0) ? 0 : 1; if (Control_Buf[6]==Control_Buf[7]){ // 采样频率判断 switch ((SamplingFreq)(Control_Buf[6])) { case FREQ_10KHZ: ARR = 100; PCS = 84; break; case FREQ_20KHZ: ARR = 100; PCS = 42; break; case FREQ_30KHZ: ARR = 100; PCS = 28; break; case FREQ_40KHZ: ARR = 100; PCS = 21; break; case FREQ_50KHZ: ARR = 82; PCS = 21; break; case FREQ_60KHZ: ARR = 100; PCS = 14; break; default: // 未知采样频率,可以进行错误处理或保持原值 break; } break; } default: // 未知指令类型,可以进行错误处理 break; } } /* 初始化数组 每一段前4个字节作为标志帧 */ void Data_to_ADbuf(void){ /* 标志位=0000:作为通道0数据帧头 振动数据存在DataArray[4:1027] */ DataArray[1028*0 + 0] = 0x00; DataArray[1028*0 + 1] = 0x00; DataArray[1028*0 + 2] = 0x00; DataArray[1028*0 + 3] = 0x00; /* 标志位=1111:作为通道1数据帧头 振动数据存在DataArray[1032:2055 */ DataArray[1028*1 + 0] = 0x01; DataArray[1028*1 + 1] = 0x01; DataArray[1028*1 + 2] = 0x01; DataArray[1028*1 + 3] = 0x01; /* 标志位=2222:作为通道2数据帧头 振动数据存在DataArray[2060:3083] */ DataArray[1028*2 + 0] = 0x02; DataArray[1028*2 + 1] = 0x02; DataArray[1028*2 + 2] = 0x02; DataArray[1028*2 + 3] = 0x02; /* 标志位=3333:作为通道3数据帧头 振动数据存在DataArray[3088:4111] */ DataArray[1028*3 + 0] = 0x03; DataArray[1028*3 + 1] = 0x03; DataArray[1028*3 + 2] = 0x03; DataArray[1028*3 + 3] = 0x03; /* 标志位=4444:作为通道4数据帧头 振动数据存在DataArray[4116:5139] */ DataArray[1028*4 + 0] = 0x04; DataArray[1028*4 + 1] = 0x04; DataArray[1028*4 + 2] = 0x04; DataArray[1028*4 + 3] = 0x04; /* 标志位=5555:作为通道5数据帧头 振动数据存在DataArray[5144:6167] */ DataArray[1028*5 + 0] = 0x05; DataArray[1028*5 + 1] = 0x05; DataArray[1028*5 + 2] = 0x05; DataArray[1028*5 + 3] = 0x05; /* 标志位=7777:作为断线检测数据帧头 转速数据存在DataArray[6172:6173] */ DataArray[1028*6 + 0] = 0x06; DataArray[1028*6 + 1] = 0x06; DataArray[1028*6 + 2] = 0x06; DataArray[1028*6 + 3] = 0x06; /* 标志位=8888:作为温度检测数据帧头 断线检测数据存在DataArray[7200:7206]中 */ DataArray[1028*7 + 0] = 0x07; DataArray[1028*7 + 1] = 0x07; DataArray[1028*7 + 2] = 0x07; DataArray[1028*7 + 3] = 0x07; /* 标志位=0000:作为通道0数据帧头 振动数据存在DataArray[4:1027] */ DataArray[1028*8 + 0] = 0x00; DataArray[1028*8 + 1] = 0x00; DataArray[1028*8 + 2] = 0x00; DataArray[1028*8 + 3] = 0x00; /* 标志位=1111:作为通道1数据帧头 振动数据存在DataArray[1032:2055 */ DataArray[1028*9 + 0] = 0x01; DataArray[1028*9 + 1] = 0x01; DataArray[1028*9 + 2] = 0x01; DataArray[1028*9 + 3] = 0x01; /* 标志位=2222:作为通道2数据帧头 振动数据存在DataArray[2060:3083] */ DataArray[1028*10 + 0] = 0x02; DataArray[1028*10 + 1] = 0x02; DataArray[1028*10 + 2] = 0x02; DataArray[1028*10 + 3] = 0x02; /* 标志位=3333:作为通道3数据帧头 振动数据存在DataArray[3088:4111] */ DataArray[1028*11 + 0] = 0x03; DataArray[1028*11 + 1] = 0x03; DataArray[1028*11 + 2] = 0x03; DataArray[1028*11 + 3] = 0x03; /* 标志位=4444:作为通道4数据帧头 振动数据存在DataArray[4116:5139] */ DataArray[1028*12 + 0] = 0x04; DataArray[1028*12 + 1] = 0x04; DataArray[1028*12 + 2] = 0x04; DataArray[1028*12 + 3] = 0x04; /* 标志位=5555:作为通道5数据帧头 振动数据存在DataArray[5144:6167] */ DataArray[1028*13 + 0] = 0x05; DataArray[1028*13 + 1] = 0x05; DataArray[1028*13 + 2] = 0x05; DataArray[1028*13 + 3] = 0x05; /* 标志位=6666:作为断线检测数据帧头 转速数据存在DataArray[14396:6173] */ DataArray[1028*14 + 0] = 0x06; DataArray[1028*14 + 1] = 0x06; DataArray[1028*14 + 2] = 0x06; DataArray[1028*14 + 3] = 0x06; /* 标志位=7777:作为温度检测数据帧头 断线检测数据存在DataArray[15424:7206]中 */ DataArray[1028*15 + 0] = 0x07; DataArray[1028*15 + 1] = 0x07; DataArray[1028*15 + 2] = 0x07; DataArray[1028*15 + 3] = 0x07; }