兼容旧版本串口协议 zsxfly20240820

This commit is contained in:
zsx 2024-08-20 14:05:50 +08:00
parent 5bb0d06413
commit 33051e8fb3
5 changed files with 5170 additions and 4854 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -9,18 +9,12 @@
#include "app_PAD.h" #include "app_PAD.h"
// void app_otas_txd(uint16_t len, const uint8_t *data){
// app_PAD_Sendcmd(OTA_CMD_ID ,OTA_REG_ADDR ,data ,len);
// }
// 用于PAD通信处理 // 用于PAD通信处理
PAD_daraframe_t PAD_daraframe; PAD_daraframe_t PAD_daraframe;
volatile uint8_t Rec_state =0; volatile uint8_t Rec_state =0;
volatile uint8_t Rec_data_cnt =0; volatile uint8_t Rec_data_cnt =0;
/*
static void PAD_Data_Hande(void){ static void PAD_Data_Hande(void){
uint8_t ret_data[MAX_LEN]={0,0}; uint8_t ret_data[MAX_LEN]={0,0};
uint8_t length=0; uint8_t length=0;
@ -153,7 +147,82 @@ static void PAD_Data_Hande(void){
PAD_Data_Hande_end: PAD_Data_Hande_end:
Rec_state =0;//数据处理完要清零,准备接收下一帧数据 Rec_state =0;//数据处理完要清零,准备接收下一帧数据
} }
*/
void app_PAD_CheckData(uint8_t *dat , uint8_t len){
uint8_t ret_data[MAX_LEN]={0,0};
uint8_t length=0;
PAD_daraframe.header = dat[0] << 8 | dat[1];
PAD_daraframe.cmd_id = dat[2];
PAD_daraframe.reg_addr = dat[3];
PAD_daraframe.length = dat[4];
if(PAD_daraframe.length > MAX_LEN){
return;
}
for(uint8_t i=0;i<PAD_daraframe.length;i++){
PAD_daraframe.data[i] = dat[5+i];
}
PAD_daraframe.crc = dat[5+PAD_daraframe.length];
if(PAD_daraframe.header == FRAME_HEADER){
uint8_t CRC =crc8_maxim(dat ,len-1);
if(CRC == PAD_daraframe.crc){ //CRC校验通过
switch(PAD_daraframe.cmd_id){//cmd_id
case 0x01: // 配置系统参数
// uint8_t
sys_conf.Manager_sLim= PAD_daraframe.data[0];
sys_conf.Tourist_sLim= PAD_daraframe.data[1];
// uint16_t
sys_conf.Brake_DLimit= 100 * PAD_daraframe.data[2];
sys_conf.Speed_Cut_DLimit= 100 * PAD_daraframe.data[3];
sys_conf.Brake_DLimit_B= 100 * PAD_daraframe.data[4];
sys_conf.Speed_Cut_DLimit_B= 100 * PAD_daraframe.data[5];
sys_conf.VERSION =SOFTWARE_ID; // 软件版本号
sys_conf.Modbus_addr =D_Modbus_addr; // MODBUS地址
sys_conf.Speed_Cut_sLim =D_Speed_Cut_sLim; // 减速油门极限
write_cfg(&sys_conf);
case 0x02: // 读取系统配置
ret_data[length++]=sys_conf.Manager_sLim;
ret_data[length++]=sys_conf.Tourist_sLim;
ret_data[length++]=sys_conf.Brake_DLimit /100;
ret_data[length++]=sys_conf.Speed_Cut_DLimit /100;
ret_data[length++]=sys_conf.Brake_DLimit_B /100;
ret_data[length++]=sys_conf.Speed_Cut_DLimit_B /100;
// app_PAD_Sendcmd(UART1_PORT,PAD_daraframe.cmd_id,0x01,ret_data,length);
break;
case 0x03: //写 //0 命令控制进入管理员模式//1 命令控制进入游客模式
sys_sta.Manager =PAD_daraframe.data[0];
sys_sta.Tourist =PAD_daraframe.data[1];
if(1==sys_sta.Tourist && 1==sys_sta.Manager){
sys_sta.Tourist =0;
sys_sta.Manager =1;
}
ret_data[length++] =sys_sta.Manager;
ret_data[length++] =sys_sta.Tourist;
// app_PAD_Sendcmd(UART1_PORT,PAD_daraframe.cmd_id,0x01,PAD_daraframe.data,PAD_daraframe.length);
break;
case 0x04: //读 系统模式
ret_data[length++] =sys_sta.Smode;
break;
case 0x05: //写 //0 关闭12V输出//1 开启12V输出
ret_data[length++] =sys_sta.O_12V;
break;
case 0x06: //读 //12V输出状态
sys_sta.O_12V = PAD_daraframe.data[0] & 0x01;
break;
}
app_PAD_Sendcmd(PAD_daraframe.cmd_id ,0x01 ,ret_data ,length);
}
}
}
/*
void app_PAD_Receive(uint8_t data){ void app_PAD_Receive(uint8_t data){
uint8_t *frame = (uint8_t *)&PAD_daraframe; uint8_t *frame = (uint8_t *)&PAD_daraframe;
@ -221,11 +290,10 @@ void app_PAD_Receive(uint8_t data){
Rec_state = 7;//数据处理完需要将状态位归零才会接收下一帧数据uart1_state =0时。 Rec_state = 7;//数据处理完需要将状态位归零才会接收下一帧数据uart1_state =0时。
PAD_Data_Hande(); PAD_Data_Hande();
Rec_state =0; Rec_state =0;
/*
rx handler codes....
*/
} }
} }
*/
//发送命令 //发送命令
void app_PAD_Sendcmd(uint8_t cmd_id ,uint8_t reg_addr ,const uint8_t *data, uint8_t length){ void app_PAD_Sendcmd(uint8_t cmd_id ,uint8_t reg_addr ,const uint8_t *data, uint8_t length){

View File

@ -29,6 +29,9 @@ typedef struct PAD_daraframe{
//初始化 //初始化
void app_uart_Init(uint8_t port, uint32_t baudrate, uint8_t io_tx, uint8_t io_rx); void app_uart_Init(uint8_t port, uint32_t baudrate, uint8_t io_tx, uint8_t io_rx);
void app_PAD_CheckData(uint8_t *dat , uint8_t len);
// 接收数据 // 接收数据
void app_PAD_Receive(uint8_t data); void app_PAD_Receive(uint8_t data);
//发送命令 //发送命令

View File

@ -432,10 +432,13 @@ static tmr_tk_t Rx_timeout_handler(tmr_id_t id){
MODBUS_ReceCount = app_modbus_Rb_Read(&MODBUS_Rece_BUF[0], MODBUS_MAX_LEN); MODBUS_ReceCount = app_modbus_Rb_Read(&MODBUS_Rece_BUF[0], MODBUS_MAX_LEN);
DEBUG("RC:%d\n",MODBUS_ReceCount); DEBUG("RC:%d\n",MODBUS_ReceCount);
// uart_send(UART1_PORT ,MODBUS_ReceCount ,MODBUS_Rece_BUF);
app_PAD_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//PAD数据解析
app_modbus_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//modbus数据解析 app_modbus_CheckData(MODBUS_Rece_BUF, MODBUS_ReceCount);//modbus数据解析
app_otas_rxd(MODBUS_ReceCount ,MODBUS_Rece_BUF);//otas数据解析 app_otas_rxd(MODBUS_ReceCount ,MODBUS_Rece_BUF);//otas数据解析
while(MODBUS_ReceCount){ while(MODBUS_ReceCount){
MODBUS_Rece_BUF[--MODBUS_ReceCount] = 0; MODBUS_Rece_BUF[--MODBUS_ReceCount] = 0;
} }