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