36 changed files with 1004 additions and 293 deletions
@ -0,0 +1,22 @@ |
|||||
|
/*
|
||||
|
* msp_485_android.h |
||||
|
* |
||||
|
* Created on: 2025年12月1日 |
||||
|
* Author: akeguo |
||||
|
*/ |
||||
|
|
||||
|
#ifndef BASE_INC_MSP_MSP_485_ANDROID_H_ |
||||
|
#define BASE_INC_MSP_MSP_485_ANDROID_H_ |
||||
|
#include "bsp_Error_Detect.h" |
||||
|
#include "bsp_MB_host.h" |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
extern int isOnLineCount; |
||||
|
extern int16_t read_android_holidng_register_count; |
||||
|
extern void android_485_intialize_with_slaveID(struct UARTHandler *Handler, |
||||
|
int slave_id); |
||||
|
extern void android_485_intialize(struct UARTHandler *Handler); |
||||
|
|
||||
|
#endif /* BASE_INC_MSP_MSP_485_ANDROID_H_ */ |
||||
@ -0,0 +1,187 @@ |
|||||
|
/*
|
||||
|
* msp_485_android.c |
||||
|
* |
||||
|
* Created on: 2025年12月1日 |
||||
|
* Author: akeguo |
||||
|
*/ |
||||
|
#include "msp_485_android.h" |
||||
|
#include "msp_MK32_1.h" |
||||
|
#include "bsp_Error_Detect.h" |
||||
|
void decode_android_Sbus(uint8_t *buffer, uint16_t length); |
||||
|
void decode_android_PV(uint8_t *buffer, uint16_t length); |
||||
|
void android_485_loop(); //inqure data from the, in fact this is a modbus 03 function;
|
||||
|
|
||||
|
struct UARTHandler *android_handler; |
||||
|
|
||||
|
DispacherController *androidr_dispacherController; |
||||
|
int android_slave_id = 0x40; |
||||
|
|
||||
|
int8_t android_slave_iv_start_holiding_register = 100; |
||||
|
int16_t android_slave_iv_holiding_register_num = 0; //这个数据要随时改变
|
||||
|
|
||||
|
//最多读取多少个字节
|
||||
|
int16_t read_android_holidng_register_count = 18 + 1 + PV_struct_define_size / 2; //16个subs通道 1个PV数据长度,
|
||||
|
|
||||
|
uint16_t Decoded_Android_HoldingReg_Value[100]; //用来对Android的Sbus /PV /IV 的操作
|
||||
|
uint16_t send_pv_android_holdingReg_Value[100]; // /PV /IV 的操作
|
||||
|
|
||||
|
void android_485_intialize(struct UARTHandler *Handler) |
||||
|
{ |
||||
|
android_handler = Handler; |
||||
|
|
||||
|
androidr_dispacherController = Handler->dispacherController; |
||||
|
androidr_dispacherController->Dispacher_Enable = 1; |
||||
|
//不周期性发送
|
||||
|
androidr_dispacherController->Add_Dispatcher_List(androidr_dispacherController, android_485_loop); |
||||
|
|
||||
|
HardWareErrorController->Add_PCOMHardWare(HardWareErrorController, "Android_485", 0, ComError_Android_485); |
||||
|
LOG("msp_485_android_intialize"); |
||||
|
} |
||||
|
|
||||
|
void android_485_intialize_with_slaveID(struct UARTHandler *Handler, int slave_id) |
||||
|
{ |
||||
|
android_485_intialize(Handler); |
||||
|
android_slave_id = slave_id; |
||||
|
} |
||||
|
int time_to_adapt = 150; |
||||
|
void android_485_loop() |
||||
|
{ |
||||
|
//读取安卓数据 03
|
||||
|
MB_ReadHoldingReg(&android_handler->Tx_Buf, &android_handler->TxCount, android_slave_id, 0, 20); |
||||
|
android_handler->AddSendList(android_handler, android_handler->Tx_Buf, android_handler->TxCount, time_to_adapt, |
||||
|
decode_android_Sbus); |
||||
|
|
||||
|
} |
||||
|
int PMK32Index = 0; |
||||
|
int32_t *p_mk32_pointer; |
||||
|
|
||||
|
|
||||
|
int received_android_counter = 0; |
||||
|
int received_counter_max = 10/2;// 每次读取多少次遥控器然后读取PV/写IV
|
||||
|
int count=0; |
||||
|
//读取 的寄存器
|
||||
|
void decode_android_Sbus(uint8_t *buffer, uint16_t length) |
||||
|
{ |
||||
|
// uint8_t data1[length];
|
||||
|
// memcpy(data1, buffer, length);
|
||||
|
if (length <= 5) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
int decoded_result = MB_Decode_HoldingRegs(buffer, length, read_android_holidng_register_count, |
||||
|
&Decoded_Android_HoldingReg_Value[0]); |
||||
|
if (decoded_result == 1) |
||||
|
{ |
||||
|
|
||||
|
p_mk32_pointer = (int32_t*) P_MK32; |
||||
|
//Sbus 设定
|
||||
|
|
||||
|
for (int PMK32Index = 0; PMK32Index < 18; PMK32Index++) |
||||
|
{ |
||||
|
//此处必须加类型转换
|
||||
|
*p_mk32_pointer = (int16_t) Decoded_Android_HoldingReg_Value[PMK32Index]; |
||||
|
p_mk32_pointer++; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//检查按钮是否复位
|
||||
|
if (Is_All_Button_Reset == 0) |
||||
|
{ |
||||
|
if (P_MK32->CH4_SA == 0 && P_MK32->CH5_SB == 0 && P_MK32->CH6_SC == 0 && P_MK32->CH7_SD == 0) |
||||
|
{ |
||||
|
Is_All_Button_Reset = 1; |
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "Need_To_Reset", 1); |
||||
|
} |
||||
|
} |
||||
|
else if (Is_All_Button_Reset == 1) |
||||
|
{ |
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "Need_To_Reset", 1); |
||||
|
} |
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "Android_485", 1); |
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "mk32_sbus", 1); |
||||
|
|
||||
|
received_android_counter++; |
||||
|
|
||||
|
//读取遥控器
|
||||
|
MB_ReadHoldingReg(&android_handler->Tx_Buf, &android_handler->TxCount, android_slave_id, 0, 20); |
||||
|
android_handler->AddSendList(android_handler, android_handler->Tx_Buf, android_handler->TxCount, time_to_adapt, |
||||
|
decode_android_Sbus); |
||||
|
|
||||
|
if (received_android_counter % received_counter_max != 0) return; |
||||
|
switch (received_android_counter / received_counter_max % 2) |
||||
|
{ |
||||
|
case 0: |
||||
|
{ |
||||
|
//设定安卓数据 0x10传IV
|
||||
|
pb_ostream_t IV_o_stream = pb_ostream_from_buffer(&send_pv_android_holdingReg_Value[1], |
||||
|
sizeof(send_pv_android_holdingReg_Value) - 1); |
||||
|
pb_encode(&IV_o_stream, IV_struct_define_fields, &IV); |
||||
|
|
||||
|
android_slave_iv_holiding_register_num = (IV_o_stream.bytes_written + 1) / 2 + 1; |
||||
|
|
||||
|
send_pv_android_holdingReg_Value[0] = SWAP_ENDIAN_16(IV_o_stream.bytes_written); |
||||
|
|
||||
|
MB_WriteNumHoldingReg(&android_handler->Tx_Buf, &android_handler->TxCount, android_slave_id, |
||||
|
android_slave_iv_start_holiding_register, android_slave_iv_holiding_register_num, |
||||
|
send_pv_android_holdingReg_Value); |
||||
|
android_handler->AddSendList(android_handler, android_handler->Tx_Buf, android_handler->TxCount, |
||||
|
time_to_adapt, NULL); |
||||
|
received_android_counter = 0; |
||||
|
break; |
||||
|
} |
||||
|
case 1: |
||||
|
{ //读取安卓数据 03 PV
|
||||
|
MB_ReadHoldingReg(&android_handler->Tx_Buf, &android_handler->TxCount, android_slave_id, 19, |
||||
|
(Decoded_Android_HoldingReg_Value[18] + 1) / 2); |
||||
|
android_handler->AddSendList(android_handler, android_handler->Tx_Buf, android_handler->TxCount, |
||||
|
time_to_adapt, decode_android_PV); |
||||
|
|
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
LOGFF(DL_ERROR, "Android_485 decoding failed"); |
||||
|
count++; |
||||
|
} |
||||
|
} |
||||
|
/*****/ |
||||
|
void decode_android_PV(uint8_t *buffer, uint16_t length) |
||||
|
{ |
||||
|
// uint8_t data1[1000];
|
||||
|
// memcpy(data1, buffer, length);
|
||||
|
if (length <= 5) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
int decoded_result = MB_Decode_HoldingRegs(buffer, length, (Decoded_Android_HoldingReg_Value[18] + 1) / 2, |
||||
|
&Decoded_Android_HoldingReg_Value[19]); |
||||
|
if (decoded_result == 1) |
||||
|
{ |
||||
|
//PV解析
|
||||
|
pb_istream_t i_pv_stream = |
||||
|
{ 0 }; |
||||
|
|
||||
|
i_pv_stream = pb_istream_from_buffer(&Decoded_Android_HoldingReg_Value[19], |
||||
|
Decoded_Android_HoldingReg_Value[18]); |
||||
|
int checkreturn = pb_decode(&i_pv_stream, PV_struct_define_fields, &_decoded_PV_temp); |
||||
|
if (checkreturn == 1) |
||||
|
{ |
||||
|
|
||||
|
decoded_PV = _decoded_PV_temp; |
||||
|
GV.PV=decoded_PV; |
||||
|
GV.wire_status=2; //2代表无线
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "Android_485", 1); |
||||
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,"ZQ_Serial",1); |
||||
|
|
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
LOGFF(DL_ERROR, "Android_485 decoding failed"); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,80 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
|
<launchConfiguration type="com.st.stm32cube.ide.mcu.debug.launch.launchConfigurationType"> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.access_port_id" value="0"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_live_expr" value="true"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_swv" value="false"/> |
||||
|
<intAttribute key="com.st.stm32cube.ide.mcu.debug.launch.formatVersion" value="2"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.ip_address_local" value="localhost"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.enabled" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.value" value=""/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.loadList" value="{"fItems":[{"fIsFromMainTab":true,"fPath":"Debug/Swing_Rust_UDP_cabled.elf","fProjectName":"Swing_Rust_UDP_cabled","fPerformBuild":true,"fDownload":true,"fLoadSymbols":true}]}"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.override_start_address_mode" value="default"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.remoteCommand" value="target remote"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startServer" value="true"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.divby0" value="true"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.unaligned" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.haltonexception" value="true"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swd_mode" value="true"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_port" value="61235"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_hclk" value="16000000"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.useRemoteTarget" value="true"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.vector_table" value=""/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.verify_flash_download" value="true"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_allow_halt" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_signal_halt" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_external_loader" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader" value=""/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader_init" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="C:\Users\42961\STM32CubeIDE\workspace_1.10.1\Swing_Rust_UDP_cabled\Debug\st-link_gdbserver_log.txt"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value=""/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkenable_rtos" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{"fVersion":1,"fItems":[{"fDisplayName":"Reset","fIsSuppressible":false,"fResetAttribute":"Software system reset","fResetStrategies":[{"fDisplayName":"Software system reset","fLaunchAttribute":"system_reset","fGdbCommands":["monitor reset\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Hardware reset","fLaunchAttribute":"hardware_reset","fGdbCommands":["monitor reset hardware\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Core reset","fLaunchAttribute":"core_reset","fGdbCommands":["monitor reset core\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"None","fLaunchAttribute":"no_reset","fGdbCommands":[],"fCmdOptions":["-g"]}],"fGdbCommandGroup":{"name":"Additional commands","commands":[]},"fStartApplication":true}]}"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.enableRtosProxy" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyCustomProperties" value=""/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriver" value="threadx"/> |
||||
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverAuto" value="false"/> |
||||
|
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverPort" value="cortex_m0"/> |
||||
|
<intAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyPort" value="60000"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDeviceId" value="com.st.stm32cube.ide.mcu.debug.stlink"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/> |
||||
|
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61234"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="arm-none-eabi-gdb"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/> |
||||
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/Swing_Rust_UDP_cabled.elf"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="Swing_Rust_UDP_cabled"/> |
||||
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="true"/> |
||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.456396271"/> |
||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> |
||||
|
<listEntry value="/Swing_Rust_UDP_cabled"/> |
||||
|
</listAttribute> |
||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> |
||||
|
<listEntry value="4"/> |
||||
|
</listAttribute> |
||||
|
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"/>"/> |
||||
|
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/> |
||||
|
</launchConfiguration> |
||||
Loading…
Reference in new issue