From 9314843ef2dfb68a24d1cf262c4da5b02c26d1d6 Mon Sep 17 00:00:00 2001 From: "LIN\\54376" <543769318@qq.com> Date: Mon, 15 Sep 2025 17:13:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9usart=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=90=84=E7=A7=8D=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/language.settings.xml | 4 +- BASE/Src/BSP/bsp_client_setting.c | 63 ++++++++++++++++++++++++++----- Core/Inc/FSM.h | 1 + Core/Protobuf/PSource/bsp_GV.pb.h | 13 ++++--- Core/Protobuf/Proto/bsp_GV.proto | 4 +- Core/Src/FSM.c | 12 +++--- 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 87e2a34..7c1ad0a 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/BASE/Src/BSP/bsp_client_setting.c b/BASE/Src/BSP/bsp_client_setting.c index 88a3f40..fea49bb 100644 --- a/BASE/Src/BSP/bsp_client_setting.c +++ b/BASE/Src/BSP/bsp_client_setting.c @@ -10,13 +10,16 @@ #include "gpio.h" #include "bsp_UART.h" - -void UpdateIV(); +void UpdateIV_State(); +void UpdateIV_PaintThickness(); void decode_received_data_from_client(uint8_t *buffer, uint16_t length); struct UARTHandler *client_setting_Handler; //相当于当前行及下一行这两个结构体与绑定的共享地址 DispacherController *client_setting_dispacher; int LastCount; +uint16_t Send_State_Count = 0; +uint16_t Send_PaintThickness_Flag = 0; + void client_setting_intialize(struct UARTHandler *Handler) { @@ -25,7 +28,9 @@ void client_setting_intialize(struct UARTHandler *Handler) client_setting_Handler->Wait_time = 30; // 最低不要低于4; client_setting_dispacher=Handler->dispacherController; - client_setting_dispacher->Add_Dispatcher_List(client_setting_dispacher,UpdateIV); + client_setting_dispacher->Add_Dispatcher_List(client_setting_dispacher,UpdateIV_State); + client_setting_dispacher->Add_Dispatcher_List(client_setting_dispacher,UpdateIV_PaintThickness); + client_setting_dispacher->DispacherCallTime=1000; client_setting_dispacher->Dispacher_Enable = 1; LOG("client_setting_intialize"); @@ -34,23 +39,61 @@ void client_setting_intialize(struct UARTHandler *Handler) } -void UpdateIV()//往安卓发的 + +void UpdateIV_State()//往安卓发的 { + Send_State_Count ++; - if(GV.Robot_PaintThickness_Count > LastCount) - { + client_setting_Handler->Tx_Buf[0] = 0x01; + client_setting_Handler->Tx_Buf[1] = 0x03; + client_setting_Handler->Tx_Buf[2] = 0x0C; + + client_setting_Handler->Tx_Buf[3] = (Send_State_Count>>8) &0xff; + client_setting_Handler->Tx_Buf[4] = Send_State_Count & 0xff; + + + client_setting_Handler->Tx_Buf[5] = ((ushort)GV.Robot_State>>8) &0xff; + client_setting_Handler->Tx_Buf[6] = (ushort)GV.Robot_State & 0xff; + + client_setting_Handler->Tx_Buf[7] = ((ushort)abs(GV.LeftFrontMotor.Current)>>8) &0xff; + client_setting_Handler->Tx_Buf[8] = (ushort)abs(GV.LeftFrontMotor.Current) & 0xff; + + client_setting_Handler->Tx_Buf[9] = ((ushort)abs(GV.RightFrontMotor.Current)>>8) &0xff; + client_setting_Handler->Tx_Buf[10] = (ushort)abs(GV.RightFrontMotor.Current) & 0xff; + + client_setting_Handler->Tx_Buf[11] = ((ushort)GV.Robot_Speed_mpm>>8) &0xff; + client_setting_Handler->Tx_Buf[12] = (ushort)GV.Robot_Speed_mpm & 0xff; + + client_setting_Handler->Tx_Buf[13] = ((ushort)GV.Robot_Angle.RF_Angle_Roll>>8) &0xff; + client_setting_Handler->Tx_Buf[14] = (ushort)GV.Robot_Angle.RF_Angle_Roll & 0xff; + + client_setting_Handler->TxCount = 17; + uint16_t crc=MB_CRC16(&(client_setting_Handler->Tx_Buf[0]), 15); + client_setting_Handler->Tx_Buf[16] = (crc>>8) &0xff; + client_setting_Handler->Tx_Buf[15] = crc & 0xff; + + client_setting_Handler->UART_Tx(client_setting_Handler); + + if(Send_State_Count >= ((uint16_t)pow(2, 32)) - 1) + { + Send_State_Count = 0; } - else + +} + +void UpdateIV_PaintThickness()//往安卓发的 +{ + + if(GV.Robot_PaintThickness_Count <= LastCount + 1) { return; } + client_setting_Handler->Tx_Buf[0] = 0x01; client_setting_Handler->Tx_Buf[1] = 0x03; client_setting_Handler->Tx_Buf[2] = 0x02; client_setting_Handler->TxCount = 7; - - client_setting_Handler->Tx_Buf[3] = (GV.Robot_PaintThickness>>8) &0xff; client_setting_Handler->Tx_Buf[4] = GV.Robot_PaintThickness & 0xff; @@ -59,12 +102,12 @@ void UpdateIV()//往安卓发的 client_setting_Handler->Tx_Buf[6] = (crc>>8) &0xff; client_setting_Handler->Tx_Buf[5] = crc & 0xff; - client_setting_Handler->UART_Tx(client_setting_Handler); LastCount = GV.Robot_PaintThickness_Count; } + void decode_received_data_from_client(uint8_t *buffer, uint16_t length) { uint8_t data[2000]; diff --git a/Core/Inc/FSM.h b/Core/Inc/FSM.h index 0119fcd..5f8af8f 100644 --- a/Core/Inc/FSM.h +++ b/Core/Inc/FSM.h @@ -51,6 +51,7 @@ typedef enum _MoveSTATE_t Move_ChgFinish, Move_Emergency, + Move_Error, } MoveSTATE_t; //设置 换道距离和设置后退距离 diff --git a/Core/Protobuf/PSource/bsp_GV.pb.h b/Core/Protobuf/PSource/bsp_GV.pb.h index e662655..7788bf6 100644 --- a/Core/Protobuf/PSource/bsp_GV.pb.h +++ b/Core/Protobuf/PSource/bsp_GV.pb.h @@ -47,6 +47,7 @@ typedef struct _GV_struct_define { int32_t Robot_Speed_mpm; bool has_Robot_Ultrasonic; MSP_UltrasonicParameters Robot_Ultrasonic; + int32_t Robot_State; int32_t Emergency; } GV_struct_define; @@ -56,8 +57,8 @@ extern "C" { #endif /* Initializer values for message structs */ -#define GV_struct_define_init_default {false, PV_struct_define_init_default, false, MotorParameters_init_default, false, MotorParameters_init_default, false, SP_MSP_U7_Button_init_default, 0, false, ErrorData_init_default, false, MSP_TL720DParameters_init_default, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_default, 0} -#define GV_struct_define_init_zero {false, PV_struct_define_init_zero, false, MotorParameters_init_zero, false, MotorParameters_init_zero, false, SP_MSP_U7_Button_init_zero, 0, false, ErrorData_init_zero, false, MSP_TL720DParameters_init_zero, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_zero, 0} +#define GV_struct_define_init_default {false, PV_struct_define_init_default, false, MotorParameters_init_default, false, MotorParameters_init_default, false, SP_MSP_U7_Button_init_default, 0, false, ErrorData_init_default, false, MSP_TL720DParameters_init_default, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_default, 0, 0} +#define GV_struct_define_init_zero {false, PV_struct_define_init_zero, false, MotorParameters_init_zero, false, MotorParameters_init_zero, false, SP_MSP_U7_Button_init_zero, 0, false, ErrorData_init_zero, false, MSP_TL720DParameters_init_zero, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_zero, 0, 0} /* Field tags (for use in manual encoding/decoding) */ #define GV_struct_define_PV_tag 1 @@ -80,7 +81,8 @@ extern "C" { #define GV_struct_define_Robot_PaintThickness_Count_tag 18 #define GV_struct_define_Robot_Speed_mpm_tag 19 #define GV_struct_define_Robot_Ultrasonic_tag 20 -#define GV_struct_define_Emergency_tag 21 +#define GV_struct_define_Robot_State_tag 21 +#define GV_struct_define_Emergency_tag 22 /* Struct field encoding specification for nanopb */ #define GV_struct_define_FIELDLIST(X, a) \ @@ -104,7 +106,8 @@ X(a, STATIC, SINGULAR, INT32, Robot_PaintThickness, 17) \ X(a, STATIC, SINGULAR, INT32, Robot_PaintThickness_Count, 18) \ X(a, STATIC, SINGULAR, INT32, Robot_Speed_mpm, 19) \ X(a, STATIC, OPTIONAL, MESSAGE, Robot_Ultrasonic, 20) \ -X(a, STATIC, SINGULAR, INT32, Emergency, 21) +X(a, STATIC, SINGULAR, INT32, Robot_State, 21) \ +X(a, STATIC, SINGULAR, INT32, Emergency, 22) #define GV_struct_define_CALLBACK NULL #define GV_struct_define_DEFAULT NULL #define GV_struct_define_PV_MSGTYPE PV_struct_define @@ -122,7 +125,7 @@ extern const pb_msgdesc_t GV_struct_define_msg; /* Maximum encoded size of messages (where known) */ #define BSP_GV_PB_H_MAX_SIZE GV_struct_define_size -#define GV_struct_define_size 1099 +#define GV_struct_define_size 1111 #ifdef __cplusplus } /* extern "C" */ diff --git a/Core/Protobuf/Proto/bsp_GV.proto b/Core/Protobuf/Proto/bsp_GV.proto index 953b679..84b74e2 100644 --- a/Core/Protobuf/Proto/bsp_GV.proto +++ b/Core/Protobuf/Proto/bsp_GV.proto @@ -37,7 +37,9 @@ message GV_struct_define int32 Robot_Speed_mpm = 19; MSP_UltrasonicParameters Robot_Ultrasonic = 20; - int32 Emergency = 21; + int32 Robot_State = 21; + + int32 Emergency = 22; }; //protoc --nanopb_out=. *.proto diff --git a/Core/Src/FSM.c b/Core/Src/FSM.c index fec5433..fe3cbb3 100644 --- a/Core/Src/FSM.c +++ b/Core/Src/FSM.c @@ -532,9 +532,6 @@ void GF_Dispatch()//2ms调用一次 给车体速度等赋值 GF_BSP_GPIO_SetIO(Out_Spray,1); } - - - //计算速度档位m/min GV.Robot_Speed_mpm = Speed_Judge(&Current_T_F4_Value); //代入速度m/min * 186.9 最大下发4725 即最大速度25m/min @@ -547,12 +544,17 @@ void GF_Dispatch()//2ms调用一次 给车体速度等赋值 GV.Right_Compensation = Current_T_F4_Value.robot_Compensation_Right / 51.0; action_perfrom(MoveTransitions, sizeof(MoveTransitions) / sizeof(transition_t), CurrentMoveState);//结构体数组/大小/当前状态 - // action_perfrom(SwingTransitions,sizeof(SwingTransitions) / sizeof(transition_t), CurrentSwingState); - // action_perfrom(TiltTransitions, sizeof(TiltTransitions) / sizeof(transition_t), CurrentTiltState); + GV.Robot_State = CurrentMoveState; + if(GV.LeftFrontMotor.ERROR_Flag != 0 || GV.RightFrontMotor.ERROR_Flag != 0) + { + GV.Robot_State = Move_Error; + } + } + void action_perfrom(transition_t transitions[], int length, int state) {