This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/1.Software/STM32_AD7606/Drivers/BSP/AD7606/ControlCommandReceive.c

347 lines
8.0 KiB
C
Raw Normal View History

#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 PCS = 14; // 用于计算PWM频率
uint32_t ARR = 100; // 用于计算PWM频率
/* 定义一个超大数组用于存储数据 */
uint8_t DataArray[26728];
uint8_t DataArray_2[6458];
// 指令判断函数
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){
/*
=00000
DataArray[4:1027]
*/
DataArray[1028*0 + 0] = 0;
DataArray[1028*0 + 1] = 0;
DataArray[1028*0 + 2] = 0;
DataArray[1028*0 + 3] = 0;
/*
=11111
DataArray[1032:2055
*/
DataArray[1028*1 + 0] = 1;
DataArray[1028*1 + 1] = 1;
DataArray[1028*1 + 2] = 1;
DataArray[1028*1 + 3] = 1;
/*
=22222
DataArray[2060:3083]
*/
DataArray[1028*2 + 0] = 2;
DataArray[1028*2 + 1] = 2;
DataArray[1028*2 + 2] = 2;
DataArray[1028*2 + 3] = 2;
/*
=33333
DataArray[3088:4111]
*/
DataArray[1028*3 + 0] = 3;
DataArray[1028*3 + 1] = 3;
DataArray[1028*3 + 2] = 3;
DataArray[1028*3 + 3] = 3;
/*
=44444
DataArray[4116:5139]
*/
DataArray[1028*4 + 0] = 4;
DataArray[1028*4 + 1] = 4;
DataArray[1028*4 + 2] = 4;
DataArray[1028*4 + 3] = 4;
/*
=55555
DataArray[5144:6167]
*/
DataArray[1028*5 + 0] = 5;
DataArray[1028*5 + 1] = 5;
DataArray[1028*5 + 2] = 5;
DataArray[1028*5 + 3] = 5;
/*
=66666
DataArray[6172:7195]
*/
DataArray[1028*6 + 0] = 6;
DataArray[1028*6 + 1] = 6;
DataArray[1028*6 + 2] = 6;
DataArray[1028*6 + 3] = 6;
/*
=77777
DataArray[7200:8223]
*/
DataArray[1028*7 + 0] = 7;
DataArray[1028*7 + 1] = 7;
DataArray[1028*7 + 2] = 7;
DataArray[1028*7 + 3] = 7;
/*
=88888
DataArray[8228:9251]
*/
DataArray[1028*8 + 0] = 8;
DataArray[1028*8 + 1] = 8;
DataArray[1028*8 + 2] = 8;
DataArray[1028*8 + 3] = 8;
/*
=99999
DataArray[9256:10279]
*/
DataArray[1028*9 + 0] = 9;
DataArray[1028*9 + 1] = 9;
DataArray[1028*9 + 2] = 9;
DataArray[1028*9 + 3] = 9;
/*
=AAAA10
DataArray[10284:11307]
*/
DataArray[1028*10 + 0] = 10;
DataArray[1028*10 + 1] = 10;
DataArray[1028*10 + 2] = 10;
DataArray[1028*10 + 3] = 10;
/*
=BBBB11
DataArray[11312:12335]
*/
DataArray[1028*11 + 0] = 11;
DataArray[1028*11 + 1] = 11;
DataArray[1028*11 + 2] = 11;
DataArray[1028*11 + 3] = 11;
/*
=CCCC
DataArray[12340:12852]
*/
DataArray[1028*12 + 0] = 12;
DataArray[1028*12 + 1] = 12;
DataArray[1028*12 + 2] = 12;
DataArray[1028*12 + 3] = 12;
/*
=DDDD线
线DataArray[12856:12858]
*/
DataArray[12852] = 13;
DataArray[12853] = 13;
DataArray[12854] = 13;
DataArray[12855] = 13;
/*
=00000
DataArray[4:1027]
*/
DataArray[1028*13 + 0] = 0;
DataArray[1028*13 + 1] = 0;
DataArray[1028*13 + 2] = 0;
DataArray[1028*13 + 3] = 0;
/*
=11111
DataArray[1032:2055]
*/
DataArray[1028*14 + 0] = 1;
DataArray[1028*14 + 1] = 1;
DataArray[1028*14 + 2] = 1;
DataArray[1028*14 + 3] = 1;
/*
=22222
DataArray[2060:3083]
*/
DataArray[1028*15 + 0] = 2;
DataArray[1028*15 + 1] = 2;
DataArray[1028*15 + 2] = 2;
DataArray[1028*15 + 3] = 2;
/*
=33333
DataArray[3088:4111]
*/
DataArray[1028*16 + 0] = 3;
DataArray[1028*16 + 1] = 3;
DataArray[1028*16 + 2] = 3;
DataArray[1028*16 + 3] = 3;
/*
=44444
DataArray[4116:5139]
*/
DataArray[1028*17 + 0] = 4;
DataArray[1028*17 + 1] = 4;
DataArray[1028*17 + 2] = 4;
DataArray[1028*17 + 3] = 4;
/*
=55555
DataArray[5144:6167]
*/
DataArray[1028*18 + 0] = 5;
DataArray[1028*18 + 1] = 5;
DataArray[1028*18 + 2] = 5;
DataArray[1028*18 + 3] = 5;
/*
=66666
DataArray[6172:7195]
*/
DataArray[1028*19 + 0] = 6;
DataArray[1028*19 + 1] = 6;
DataArray[1028*19 + 2] = 6;
DataArray[1028*19 + 3] = 6;
/*
=77777
DataArray[7200:8223]
*/
DataArray[1028*20 + 0] = 7;
DataArray[1028*20 + 1] = 7;
DataArray[1028*20 + 2] = 7;
DataArray[1028*20 + 3] = 7;
/*
=88888
DataArray[8228:9251]
*/
DataArray[1028*21 + 0] = 8;
DataArray[1028*21 + 1] = 8;
DataArray[1028*21 + 2] = 8;
DataArray[1028*21 + 3] = 8;
/*
=99999
DataArray[9256:10279]
*/
DataArray[1028*22 + 0] = 9;
DataArray[1028*22 + 1] = 9;
DataArray[1028*22 + 2] = 9;
DataArray[1028*22 + 3] = 9;
/*
=AAAA10
DataArray[10284:11307]
*/
DataArray[1028*23 + 0] = 10;
DataArray[1028*23 + 1] = 10;
DataArray[1028*23 + 2] = 10;
DataArray[1028*23 + 3] = 10;
/*
=BBBB11
DataArray[11312:12335]
*/
DataArray[1028*24 + 0] = 11;
DataArray[1028*24 + 1] = 11;
DataArray[1028*24 + 2] = 11;
DataArray[1028*24 + 3] = 11;
/*
=CCCC
DataArray[12340:12852]
*/
DataArray[1028*25 + 0] = 12;
DataArray[1028*25 + 1] = 12;
DataArray[1028*25 + 2] = 12;
DataArray[1028*25 + 3] = 12;
/*
=DDDD线
线DataArray[26220:26222]
*/
DataArray[26216] = 13;
DataArray[26217] = 13;
DataArray[26218] = 13;
DataArray[26219] = 13;
}