Browse Source

1. 测试激光测距传感器

2. 调试前端雷赛电机,将模式由Pr模式改为Can模式后解决问题
master
HJB\13752 3 months ago
parent
commit
f56491f024
  1. 4
      diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml
  2. 80
      diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch
  3. 19
      diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc
  4. 19
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h
  5. 148
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c
  6. 65
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/MSP/msp_zhr29_laser_sensor.c
  7. 10
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c
  8. 15
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c
  9. 19
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/robot_state.c
  10. 2
      diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/usart.c

4
diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1478844030219557014" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="464747038937607816" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>
@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1478844030219557014" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="464747038937607816" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

80
diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch

@ -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="{&quot;fItems&quot;:[{&quot;fIsFromMainTab&quot;:true,&quot;fPath&quot;:&quot;C:\\Users\\13752\\STM32CubeIDE\\git\\diaoerqiege\\BHBF_Robot_Lifting_Lug\\Debug\\BHBF_Robot_Lifting_Lug.elf&quot;,&quot;fProjectName&quot;:&quot;BHBF_Robot_Lifting_Lug&quot;,&quot;fPerformBuild&quot;:true,&quot;fDownload&quot;:true,&quot;fLoadSymbols&quot;: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\13752\STM32CubeIDE\git\diaoerqiege\BHBF_Robot_Lifting_Lug\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="{&quot;fVersion&quot;:1,&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]},&quot;fStartApplication&quot;: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="C:\Users\13752\STM32CubeIDE\git\diaoerqiege\BHBF_Robot_Lifting_Lug\Debug\BHBF_Robot_Lifting_Lug.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="BHBF_Robot_Lifting_Lug"/>
<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.1900810912"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/BHBF_Robot_Lifting_Lug"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;"/>
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
</launchConfiguration>

19
diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc

@ -179,18 +179,21 @@ ETH.RxBuffAddress=0x30040400
ETH.RxBuffLen=1528 ETH.RxBuffLen=1528
ETH.RxDescAddress=0x30040000 ETH.RxDescAddress=0x30040000
ETH.TxDescAddress=0x30040200 ETH.TxDescAddress=0x30040200
FDCAN1.AutoRetransmission=ENABLE
FDCAN1.CalculateBaudRateNominal=500000 FDCAN1.CalculateBaudRateNominal=500000
FDCAN1.CalculateTimeBitNominal=2000 FDCAN1.CalculateTimeBitNominal=2000
FDCAN1.CalculateTimeQuantumNominal=250.0 FDCAN1.CalculateTimeQuantumNominal=250.0
FDCAN1.IPParameters=NominalPrescaler,NominalTimeSeg1,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal FDCAN1.IPParameters=NominalPrescaler,NominalTimeSeg1,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,AutoRetransmission
FDCAN1.NominalPrescaler=10 FDCAN1.NominalPrescaler=10
FDCAN1.NominalTimeSeg1=5 FDCAN1.NominalTimeSeg1=5
FDCAN1.RxFifo0ElmtsNbr=32 FDCAN1.RxFifo0ElmtsNbr=32
FDCAN1.TxFifoQueueElmtsNbr=32 FDCAN1.TxFifoQueueElmtsNbr=32
FDCAN2.AutoRetransmission=ENABLE
FDCAN2.CalculateBaudRateNominal=250000 FDCAN2.CalculateBaudRateNominal=250000
FDCAN2.CalculateTimeBitNominal=4000 FDCAN2.CalculateTimeBitNominal=4000
FDCAN2.CalculateTimeQuantumNominal=500.0 FDCAN2.CalculateTimeQuantumNominal=500.0
FDCAN2.IPParameters=NominalPrescaler,NominalTimeSeg1,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal FDCAN2.IPParameters=NominalPrescaler,NominalTimeSeg1,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,AutoRetransmission,MessageRAMOffset
FDCAN2.MessageRAMOffset=0x500
FDCAN2.NominalPrescaler=20 FDCAN2.NominalPrescaler=20
FDCAN2.NominalTimeSeg1=5 FDCAN2.NominalTimeSeg1=5
FDCAN2.RxFifo0ElmtsNbr=32 FDCAN2.RxFifo0ElmtsNbr=32
@ -487,9 +490,13 @@ PB4\ (NJTRST).GPIOParameters=GPIO_Label
PB4\ (NJTRST).GPIO_Label=S0_LINKA PB4\ (NJTRST).GPIO_Label=S0_LINKA
PB4\ (NJTRST).Locked=true PB4\ (NJTRST).Locked=true
PB4\ (NJTRST).Signal=GPIO_Input PB4\ (NJTRST).Signal=GPIO_Input
PB5.GPIOParameters=GPIO_Speed
PB5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB5.Locked=true PB5.Locked=true
PB5.Mode=FDCAN_Activate PB5.Mode=FDCAN_Activate
PB5.Signal=FDCAN2_RX PB5.Signal=FDCAN2_RX
PB6.GPIOParameters=GPIO_Speed
PB6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB6.Locked=true PB6.Locked=true
PB6.Mode=FDCAN_Activate PB6.Mode=FDCAN_Activate
PB6.Signal=FDCAN2_TX PB6.Signal=FDCAN2_TX
@ -497,9 +504,13 @@ PB7.GPIOParameters=GPIO_Label
PB7.GPIO_Label=E22_M1 PB7.GPIO_Label=E22_M1
PB7.Locked=true PB7.Locked=true
PB7.Signal=GPIO_Output PB7.Signal=GPIO_Output
PB8.GPIOParameters=GPIO_Speed
PB8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB8.Locked=true PB8.Locked=true
PB8.Mode=FDCAN_Activate PB8.Mode=FDCAN_Activate
PB8.Signal=FDCAN1_RX PB8.Signal=FDCAN1_RX
PB9.GPIOParameters=GPIO_Speed
PB9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB9.Locked=true PB9.Locked=true
PB9.Mode=FDCAN_Activate PB9.Mode=FDCAN_Activate
PB9.Signal=FDCAN1_TX PB9.Signal=FDCAN1_TX
@ -719,8 +730,8 @@ ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=STM32CubeIDE ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=BHBF_Robot_LeiGuBan.ioc ProjectManager.ProjectFileName=BHBF_Robot_Lifting_Lug.ioc
ProjectManager.ProjectName=BHBF_Robot_LeiGuBan ProjectManager.ProjectName=BHBF_Robot_Lifting_Lug
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x1000 ProjectManager.StackSize=0x1000
ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.TargetToolchain=STM32CubeIDE

19
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h

@ -50,7 +50,7 @@ void GF_BSP_UART_Transmit(const uint8_t RS485_Index,const uint8_t *pData, uint16
// 链表节点结构体
typedef struct UARTSendHandler typedef struct UARTSendHandler
{ {
uint16_t SendLength; uint16_t SendLength;
@ -64,11 +64,13 @@ typedef struct UARTSendHandler
struct UARTHandler struct UARTHandler
{ {
char startCountFlag; //indicate that to start counting char startCountFlag; //indicate that to start counting
char send_finished; //indicate send finished or not char send_finished;//indicate decode finished or not
char decode_finished; //indicate decode finished or not char decode_finished;//indicate decode finished or not
uint8_t tmp_Rx_Buf[2]; // temporary data to store received data uint8_t tmp_Rx_Buf[2]; // temporary data to store received data
uint32_t Wait_time; // the time to wait uint32_t Wait_time; // the time to wait
//uint32_t Send_time;
//uint32_t count;
uint32_t Wait_Time_Count; uint32_t Wait_Time_Count;
uint32_t SendList_time_Count; uint32_t SendList_time_Count;
@ -76,8 +78,6 @@ struct UARTHandler
uint8_t SendListExists; uint8_t SendListExists;
UART_HandleTypeDef* uart; //UART to use UART_HandleTypeDef* uart; //UART to use
UARTSendHandler *pCurrentUARTSendHadler;
unsigned char timeSpan; // timer elapsed time unsigned char timeSpan; // timer elapsed time
uint8_t Rx_Buf[2048]; // 接收缓存,最大256字节 uint8_t Rx_Buf[2048]; // 接收缓存,最大256字节
uint8_t Tx_Buf[2048]; //发送缓存 157,864 uint8_t Tx_Buf[2048]; //发送缓存 157,864
@ -85,17 +85,14 @@ struct UARTHandler
uint16_t RxCount; uint16_t RxCount;
//(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
void (*UART_Tx)(struct UARTHandler*); //void UART_Tx(uint8_t *Tx_Buf,uint16_t TxCount); void (*UART_Tx)(struct UARTHandler*); //void UART_Tx(uint8_t *Tx_Buf,uint16_t TxCount);
void (*UART_Rx)(struct UARTHandler*); void (*UART_Rx)(struct UARTHandler*);
void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf
UARTSendHandler *pCurrentUARTSendHadler; //
void (*AddSendList)(struct UARTHandler*, void (*AddSendList)(struct UARTHandler*, uint8_t*, uint16_t,uint32_t,//这里是修改等待时间
uint8_t*, uint16_t,
uint32_t, //这里是修改等待时间
void (*UART_Decode)(uint8_t*, uint16_t)); void (*UART_Decode)(uint8_t*, uint16_t));
struct _DispacherController *dispacherController; struct _DispacherController *dispacherController;
}; };
void UARTHandlerTx(struct UARTHandler *uartHandler); void UARTHandlerTx(struct UARTHandler *uartHandler);

148
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c

@ -1,7 +1,7 @@
#include "bsp_UART.h" #include "bsp_UART.h"
#include "main.h" #include "main.h"
#include <stdlib.h> #include <stdlib.h>
#include "DLT/DLTuc.h"
void GF_UART_Send_List_Send(struct UARTHandler *handler); void GF_UART_Send_List_Send(struct UARTHandler *handler);
void Dispatcher_List_Add(struct UARTHandler *uartHandler, void Dispatcher_List_Add(struct UARTHandler *uartHandler,
void (*dispache)(void)); void (*dispache)(void));
@ -103,9 +103,6 @@ void GF_BSP_UARTHandlers_Intialize(
HAL_UART_Receive_IT((LTE_7S0_Serial_UART_Handler.uart), HAL_UART_Receive_IT((LTE_7S0_Serial_UART_Handler.uart),
(uint8_t*) &LTE_7S0_Serial_UART_Handler.tmp_Rx_Buf, 1); (uint8_t*) &LTE_7S0_Serial_UART_Handler.tmp_Rx_Buf, 1);
#if defined (hlpuart1Exit) #if defined (hlpuart1Exit)
IntializeUARTHandler(&LPUART1_UART_Handler, &LPUART1UART, LPUART1_UART_WaitTime, 2,LPUART1_UART_Dispacher_Time); //10ms 剩余2ms IntializeUARTHandler(&LPUART1_UART_Handler, &LPUART1UART, LPUART1_UART_WaitTime, 2,LPUART1_UART_Dispacher_Time); //10ms 剩余2ms
HAL_UART_Receive_IT((LPUART1_UART_Handler.uart), HAL_UART_Receive_IT((LPUART1_UART_Handler.uart),
@ -113,9 +110,6 @@ void GF_BSP_UARTHandlers_Intialize(
#endif #endif
GF_BSP_Interrupt_Add_CallBack( GF_BSP_Interrupt_Add_CallBack(
DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback, GF_BSP_UART_Timer); DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback, GF_BSP_UART_Timer);
@ -136,22 +130,16 @@ void GF_BSP_UART_Timer()
Counting(&LPUART1_UART_Handler); Counting(&LPUART1_UART_Handler);
#endif #endif
// RS_485_1_UART_Handler.Dispatcher_Run(&RS_485_1_UART_Handler);
// RS_485_2_UART_Handler.Dispatcher_Run(&RS_485_2_UART_Handler);
// RS_485_3_UART_Handler.Dispatcher_Run(&RS_485_3_UART_Handler);
// RS_485_4_UART_Handler.Dispatcher_Run(&RS_485_4_UART_Handler);
// E22_Serial_UART_Handler.Dispatcher_Run(&E22_Serial_UART_Handler);
// InterCall_DEBUG_UART_Handler.Dispatcher_Run(&InterCall_DEBUG_UART_Handler);
// InterCall_DEBUG_UART_Handler.Dispatcher_Run(&InterCall_DEBUG_UART_Handler);
} }
void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data, void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data,
uint16_t length, uint32_t txListTimePeriod, void (*UART_Decode)(uint8_t*, uint16_t)) uint16_t length, uint32_t txListTimePeriod, void (*UART_Decode)(uint8_t*, uint16_t))
{ {
// 用于不断分配下一个节点的内存
UARTSendHandler *pTmp = NULL;
UARTSendHandler *pTmp = NULL; //临时指针
//临时指针2用于逐个申请内存
pTmp = (UARTSendHandler*) malloc(sizeof(UARTSendHandler)); pTmp = (UARTSendHandler*) malloc(sizeof(UARTSendHandler));
memcpy(pTmp->Tx_Buf, data, length); memcpy(pTmp->Tx_Buf, data, length);
pTmp->pNext = NULL; pTmp->pNext = NULL;
@ -159,14 +147,13 @@ void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data,
pTmp->SendLength = length; pTmp->SendLength = length;
pTmp->UART_Decode = UART_Decode; pTmp->UART_Decode = UART_Decode;
//if NULL, call intialize one
if (uartHandler->pCurrentUARTSendHadler == NULL) if (uartHandler->pCurrentUARTSendHadler == NULL)
{ {
uartHandler->pCurrentUARTSendHadler = pTmp; //空链表 uartHandler->pCurrentUARTSendHadler = pTmp; //空链表
} else } else
{ {
char i = 0; char i = 0;
//插到尾部 // 插到尾部
UARTSendHandler *phead = NULL; UARTSendHandler *phead = NULL;
phead = uartHandler->pCurrentUARTSendHadler; phead = uartHandler->pCurrentUARTSendHadler;
while (phead->pNext != NULL) while (phead->pNext != NULL)
@ -175,9 +162,7 @@ void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data,
phead = phead->pNext; phead = phead->pNext;
} }
phead->pNext = pTmp; phead->pNext = pTmp;
} }
} }
void UARTHandlerTx(struct UARTHandler *uartHandler) void UARTHandlerTx(struct UARTHandler *uartHandler)
@ -185,21 +170,23 @@ void UARTHandlerTx(struct UARTHandler *uartHandler)
if (uartHandler->uart == NULL) if (uartHandler->uart == NULL)
{ {
LOGFF(DL_ERROR, // LOGFF(DL_ERROR,
"the UART Hardware did not intialize,check the setting"); // "the UART Hardware did not intialize,check the setting");
return; return;
} }
uartHandler->RxCount=0;//设定RxCount为0 uartHandler->RxCount = 0;
#if defined (hlpuart1Exit)
#if defined (hlpuart1Exit)
if(uartHandler->uart->Instance == LPUART1) if(uartHandler->uart->Instance == LPUART1)
{ {
HAL_UART_Transmit(uartHandler->uart, uartHandler->Tx_Buf, HAL_UART_Transmit(uartHandler->uart, uartHandler->Tx_Buf,
uartHandler->TxCount,100); uartHandler->TxCount,100);
}else }else
{ {
#endif #endif
if (uartHandler->uart->Instance == UART4) //**DEBUG if (uartHandler->uart->Instance == UART4) //**DEBUG
{ {
@ -236,9 +223,9 @@ void UARTHandlerTx(struct UARTHandler *uartHandler)
HAL_UART_Transmit_DMA(uartHandler->uart, uartHandler->Tx_Buf, HAL_UART_Transmit_DMA(uartHandler->uart, uartHandler->Tx_Buf,
uartHandler->TxCount); uartHandler->TxCount);
#if defined (hlpuart1Exit) #if defined (hlpuart1Exit)
} }
#endif #endif
if (uartHandler->uart == UART4) //**DEBUG if (uartHandler->uart == UART4) //**DEBUG
@ -287,7 +274,7 @@ void UARTHandlerRX(struct UARTHandler *uartHandler)
{ {
uartHandler->RxCount=0; uartHandler->RxCount=0;
} }
//HAL_UART_Receive_IT(uartHandler->uart, RS_485_2_UART_Handler.tmp_Rx_Buf, 1);
} }
void IntializeUARTHandler(struct UARTHandler *uartHandler, void IntializeUARTHandler(struct UARTHandler *uartHandler,
@ -299,6 +286,7 @@ void IntializeUARTHandler(struct UARTHandler *uartHandler,
uartHandler->uart = uart; uartHandler->uart = uart;
uartHandler->UART_Rx = UARTHandlerRX; uartHandler->UART_Rx = UARTHandlerRX;
uartHandler->UART_Tx = UARTHandlerTx; uartHandler->UART_Tx = UARTHandlerTx;
// 普通链表
uartHandler->AddSendList = UARTHandlerAddTxList; uartHandler->AddSendList = UARTHandlerAddTxList;
uartHandler->dispacherController = (DispacherController*) malloc( uartHandler->dispacherController = (DispacherController*) malloc(
@ -310,6 +298,7 @@ void IntializeUARTHandler(struct UARTHandler *uartHandler,
uartHandler->dispacherController->DispacherCallTime = Dispacher_Time ; // call the function every 50 ms uartHandler->dispacherController->DispacherCallTime = Dispacher_Time ; // call the function every 50 ms
uartHandler->dispacherController->Dispacher_Counter = 0; uartHandler->dispacherController->Dispacher_Counter = 0;
uartHandler->dispacherController->DispacherNumber = 0; uartHandler->dispacherController->DispacherNumber = 0;
// 环形链表
uartHandler->dispacherController->Add_Dispatcher_List = Dispatcher_List_Add_t; uartHandler->dispacherController->Add_Dispatcher_List = Dispatcher_List_Add_t;
uartHandler->dispacherController->Dispatcher_Run = Dispatch_t; uartHandler->dispacherController->Dispatcher_Run = Dispatch_t;
@ -322,7 +311,7 @@ void IntializeUARTHandler(struct UARTHandler *uartHandler,
void Counting(struct UARTHandler *uartHandler) void Counting(struct UARTHandler *uartHandler)
{ {
if (uartHandler->UART_Decode == NULL) //不解析,直接返回true if (uartHandler->UART_Decode == NULL)
{ {
uartHandler->decode_finished = 1; uartHandler->decode_finished = 1;
} else } else
@ -335,21 +324,22 @@ void Counting(struct UARTHandler *uartHandler)
{ {
uartHandler->Wait_Time_Count = 0; uartHandler->Wait_Time_Count = 0;
uartHandler->startCountFlag = 0; uartHandler->startCountFlag = 0;
//启动解析函数 // 启动解析函数
if (uartHandler->RxCount >= 1) if (uartHandler->RxCount >= 1)
{
if(uartHandler->UART_Decode!=NULL)
{ {
uartHandler->UART_Decode(uartHandler->Rx_Buf, uartHandler->UART_Decode(uartHandler->Rx_Buf,
uartHandler->RxCount); uartHandler->RxCount);
}
uartHandler->RxCount = 0; uartHandler->RxCount = 0;
} }
} }
} }
} }
if (uartHandler->pCurrentUARTSendHadler != NULL) if (uartHandler->pCurrentUARTSendHadler != NULL)
{ {
GF_UART_Send_List_Send(uartHandler); GF_UART_Send_List_Send(uartHandler);
} else } else
{ {
@ -357,41 +347,8 @@ void Counting(struct UARTHandler *uartHandler)
uartHandler->dispacherController); uartHandler->dispacherController);
} }
// uartHandler->Send_Time_Count++;
// if (uartHandler->timeSpan * uartHandler->Send_Time_Count
// >= uartHandler->DispacherCallPeriod)
// {
// uartHandler->Send_Time_Count = 0;
// if (uartHandler->pCurrentUARTSendHadler != NULL)
// {
// //拷贝数据到相关的代码中,然后发送
// uartHandler->UART_Decode =
// uartHandler->pCurrentUARTSendHadler->UART_Decode; //
// memcpy(uartHandler->Tx_Buf,
// uartHandler->pCurrentUARTSendHadler->Tx_Buf,
// uartHandler->pCurrentUARTSendHadler->TxCount);
//
// uartHandler->TxCount = uartHandler->pCurrentUARTSendHadler->TxCount;
// uartHandler->UART_Tx(uartHandler);
//
// if (uartHandler->pCurrentUARTSendHadler->pNext != NULL)
// {
// UARTSendHandler *temp =
// uartHandler->pCurrentUARTSendHadler->pNext;
// free(uartHandler->pCurrentUARTSendHadler); //清除内存
// uartHandler->pCurrentUARTSendHadler = temp;
// } else
// {
// free(uartHandler->pCurrentUARTSendHadler); //清除内存
// uartHandler->pCurrentUARTSendHadler = NULL;
// }
//
// }
//
// }
} }
//_weak //_weak 接收中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{ {
if (huart->Instance == UART4) //**DEBUG if (huart->Instance == UART4) //**DEBUG
@ -539,60 +496,6 @@ void GF_BSP_UART_Transmit(const uint8_t RS485_Index, const uint8_t *pData,
break; break;
} }
} }
//void USART_Dispatch(struct UARTHandler *uartHandler)
//{
////2ms
// if (uartHandler->Dispacher_Enable == 1)
// {
// uartHandler->Dispacher_Counter++;
// if (uartHandler->DispacherNumber > 0) //列表中有数据
// {
// if (uartHandler->Dispacher_Counter * uartHandler->timeSpan
// >= uartHandler->DispacherCallPeriod
// / uartHandler->DispacherNumber) //多长时间运行一次
// {
//
// uartHandler->Dispacher_Counter = 0;
// if (uartHandler->pHead != NULL
// && uartHandler->pHead->pNext != NULL)
// {
// uartHandler->pHead->dispache();
// uartHandler->pHead = uartHandler->pHead->pNext;
// } else
// {
//
// }
// }
// }
//
// }
//
//}
//
//void Dispatcher_List_Add(struct UARTHandler *uartHandler,
// void (*dispache)(void))
//{
// Dispatcher *pTmp = NULL; //临时指针2
// if (uartHandler->pHead == NULL && uartHandler->pTail == NULL) //头尾部都为空
// {
// uartHandler->pHead = uartHandler->pTail = (Dispatcher*) malloc(
// sizeof(Dispatcher));
// uartHandler->pTail->dispache = dispache;
// uartHandler->pTail->pNext = uartHandler->pHead;
// uartHandler->DispacherNumber++;
// } else
// {
// //临时指针2用于逐个申请内存
// pTmp = (Dispatcher*) malloc(sizeof(Dispatcher));
// pTmp->dispache = dispache;
// pTmp->pNext = uartHandler->pHead; //set the new dispatcher .next to the header, thus make it a circle
// //临时指针1的next指向刚分配内存的临时指针2
// uartHandler->pTail->pNext = pTmp;
//
// uartHandler->pTail = pTmp; //set pTail the last node of this ring
// uartHandler->DispacherNumber++;
// }
//}
void GF_UART_Send_List_Send(struct UARTHandler *handler) void GF_UART_Send_List_Send(struct UARTHandler *handler)
{ {
@ -605,7 +508,6 @@ void GF_UART_Send_List_Send(struct UARTHandler *handler)
if (handler->pCurrentUARTSendHadler != NULL) if (handler->pCurrentUARTSendHadler != NULL)
{ {
//拷贝数据到相关的代码中,然后发送 //拷贝数据到相关的代码中,然后发送
//handler->CAN_Decode = handler->pCurrentCANSendHadler->CAN_Decode; // //handler->CAN_Decode = handler->pCurrentCANSendHadler->CAN_Decode; //
memcpy(handler->Tx_Buf, handler->pCurrentUARTSendHadler->Tx_Buf, memcpy(handler->Tx_Buf, handler->pCurrentUARTSendHadler->Tx_Buf,
handler->pCurrentUARTSendHadler->SendLength); handler->pCurrentUARTSendHadler->SendLength);
@ -614,6 +516,10 @@ void GF_UART_Send_List_Send(struct UARTHandler *handler)
handler->TxCount = handler->pCurrentUARTSendHadler->SendLength; handler->TxCount = handler->pCurrentUARTSendHadler->SendLength;
handler->UART_Tx(handler); handler->UART_Tx(handler);
handler->UART_Decode = handler->pCurrentUARTSendHadler->UART_Decode;
//计数重新开始
//handler->RxCount=0;
if (handler->pCurrentUARTSendHadler->pNext != NULL) if (handler->pCurrentUARTSendHadler->pNext != NULL)
{ {
UARTSendHandler *temp = handler->pCurrentUARTSendHadler->pNext; UARTSendHandler *temp = handler->pCurrentUARTSendHadler->pNext;

65
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/MSP/msp_zhr29_laser_sensor.c

@ -24,23 +24,26 @@ static const uint8_t inquiry_interval = 50;
typedef enum _inquiry_cmd_status typedef enum _inquiry_cmd_status
{ {
INQUIRY_LASER_SENSOR_1_CMD_STATUS = 1, INQUIRY_LASER_SENSOR_1_CMD_STATUS = 1,
INQUIRY_LASER_SENSOR_2_CMD_STATUS = 2 INQUIRY_LASER_SENSOR_2_CMD_STATUS,
INQUIRY_LASER_SENSOR_3_CMD_STATUS
}inquiry_cmd_status_t; }inquiry_cmd_status_t;
void zhr29_200_laser_sensor_intialize(struct UARTHandler *Handler) void zhr29_200_laser_sensor_intialize(struct UARTHandler *Handler)
{ {
zhr29_200_laser_sensor = Handler; zhr29_200_laser_sensor = Handler;
zhr29_200_laser_sensor->dispacherController->Dispacher_Enable = 1;
zhr29_200_laser_sensor->Wait_time = 10; zhr29_200_laser_sensor->Wait_time = 10;
laser_sensor_dispacherController = Handler->dispacherController; laser_sensor_dispacherController = Handler->dispacherController;
laser_sensor_dispacherController->Dispacher_Enable = 1;
laser_sensor_dispacherController->DispacherCallTime = 100; laser_sensor_dispacherController->DispacherCallTime = 100;
laser_sensor_dispacherController->Add_Dispatcher_List(laser_sensor_dispacherController,ZHR29_200_Inquiry); laser_sensor_dispacherController->Add_Dispatcher_List(laser_sensor_dispacherController,ZHR29_200_Inquiry);
} }
const uint8_t zhr29_200_1_inquiry_cmd[8] = {0x01, 0x04, 0x00, 0x00, 0x00, 0x02, 0x71, 0xCB}; const uint8_t zhr29_200_1_inquiry_cmd[8] = {0x01, 0x04, 0x00, 0x00, 0x00, 0x02, 0x71, 0xCB};
const uint8_t zhr29_200_2_inquiry_cmd[8] = {0x02, 0x04, 0x00, 0x00, 0x00, 0x02, 0x71, 0xFB}; const uint8_t zhr29_200_2_inquiry_cmd[8] = {0x02, 0x04, 0x00, 0x00, 0x00, 0x02, 0x71, 0xF8};
const uint8_t zhr29_200_3_inquiry_cmd[8] = {0x03, 0x04, 0x00, 0x00, 0x00, 0x02, 0x70, 0x29};
void ZHR29_200_Inquiry(void) void ZHR29_200_Inquiry(void)
{ {
@ -53,27 +56,21 @@ void ZHR29_200_Inquiry(void)
memcpy(&zhr29_200_laser_sensor->Tx_Buf, &zhr29_200_1_inquiry_cmd, zhr29_200_laser_sensor->TxCount); memcpy(&zhr29_200_laser_sensor->Tx_Buf, &zhr29_200_1_inquiry_cmd, zhr29_200_laser_sensor->TxCount);
zhr29_200_laser_sensor->AddSendList(zhr29_200_laser_sensor, zhr29_200_laser_sensor->Tx_Buf, zhr29_200_laser_sensor->TxCount, zhr29_200_laser_sensor->AddSendList(zhr29_200_laser_sensor, zhr29_200_laser_sensor->Tx_Buf, zhr29_200_laser_sensor->TxCount,
inquiry_interval, decode_laser_sensor); inquiry_interval, decode_laser_sensor);
inquiry_cmd_counts ++;
if(inquiry_cmd_counts >= 5)
{
inquiry_cmd_counts = 0;
inquiry_cmd_status = INQUIRY_LASER_SENSOR_2_CMD_STATUS; inquiry_cmd_status = INQUIRY_LASER_SENSOR_2_CMD_STATUS;
}
break; break;
case INQUIRY_LASER_SENSOR_2_CMD_STATUS: case INQUIRY_LASER_SENSOR_2_CMD_STATUS:
zhr29_200_laser_sensor->TxCount = 8; zhr29_200_laser_sensor->TxCount = 8;
memcpy(&zhr29_200_laser_sensor->Tx_Buf, &zhr29_200_2_inquiry_cmd, zhr29_200_laser_sensor->TxCount); memcpy(&zhr29_200_laser_sensor->Tx_Buf, &zhr29_200_2_inquiry_cmd, zhr29_200_laser_sensor->TxCount);
zhr29_200_laser_sensor->AddSendList(zhr29_200_laser_sensor, zhr29_200_laser_sensor->Tx_Buf, zhr29_200_laser_sensor->TxCount,
inquiry_interval, decode_laser_sensor);
inquiry_cmd_status = INQUIRY_LASER_SENSOR_3_CMD_STATUS;
break;
case INQUIRY_LASER_SENSOR_3_CMD_STATUS:
zhr29_200_laser_sensor->TxCount = 8;
memcpy(&zhr29_200_laser_sensor->Tx_Buf, &zhr29_200_3_inquiry_cmd, zhr29_200_laser_sensor->TxCount);
zhr29_200_laser_sensor->AddSendList(zhr29_200_laser_sensor, zhr29_200_laser_sensor->Tx_Buf, zhr29_200_laser_sensor->TxCount, zhr29_200_laser_sensor->AddSendList(zhr29_200_laser_sensor, zhr29_200_laser_sensor->Tx_Buf, zhr29_200_laser_sensor->TxCount,
inquiry_interval, decode_laser_sensor); inquiry_interval, decode_laser_sensor);
inquiry_cmd_status = INQUIRY_LASER_SENSOR_1_CMD_STATUS; inquiry_cmd_status = INQUIRY_LASER_SENSOR_1_CMD_STATUS;
inquiry_cmd_counts ++;
if(inquiry_cmd_counts >= 5)
{
inquiry_cmd_counts = 0;
inquiry_cmd_status = INQUIRY_LASER_SENSOR_1_CMD_STATUS;
}
break; break;
default: default:
@ -82,7 +79,6 @@ void ZHR29_200_Inquiry(void)
} }
void decode_laser_sensor(uint8_t *buffer, uint16_t length) void decode_laser_sensor(uint8_t *buffer, uint16_t length)
{ {
@ -92,19 +88,48 @@ void decode_laser_sensor(uint8_t *buffer, uint16_t length)
{ {
if((buffer[0] == 0x01) && (buffer[1] == 0x04) && (buffer[2] == 0x04)) if((buffer[0] == 0x01) && (buffer[1] == 0x04) && (buffer[2] == 0x04))
{ {
*g_zhr29_200_laser_sensor_1 = (buffer[3] << 8) | (buffer[4] << 8) | (buffer[5] << 8) | buffer[6]; *g_zhr29_200_laser_sensor_1 = ((buffer[3] << 24) | (buffer[4] << 16) | (buffer[5] << 8) | buffer[6]) / 1000;
if(*g_zhr29_200_laser_sensor_1 >= 280)
{
*g_zhr29_200_laser_sensor_1 = 280;
}
if(*g_zhr29_200_laser_sensor_1 <= 120)
{
*g_zhr29_200_laser_sensor_1 = 120;
}
} }
else if((buffer[0] == 0x02) && (buffer[1] == 0x04) && (buffer[2] == 0x04)) else if((buffer[0] == 0x02) && (buffer[1] == 0x04) && (buffer[2] == 0x04))
{ {
*g_zhr29_200_laser_sensor_2 = (buffer[3] << 8) | (buffer[4] << 8) | (buffer[5] << 8) | buffer[6]; *g_zhr29_200_laser_sensor_2 = ((buffer[3] << 24) | (buffer[4] << 16) | (buffer[5] << 8) | buffer[6]) / 1000;
if(*g_zhr29_200_laser_sensor_2 >= 280)
{
*g_zhr29_200_laser_sensor_2 = 280;
}
if(*g_zhr29_200_laser_sensor_2 <= 120)
{
*g_zhr29_200_laser_sensor_2 = 120;
}
} }
else if((buffer[0] == 0x03) && (buffer[1] == 0x04) && (buffer[2] == 0x04)) else if((buffer[0] == 0x03) && (buffer[1] == 0x04) && (buffer[2] == 0x04))
{ {
*g_zhr29_200_laser_sensor_3 = (buffer[3] << 8) | (buffer[4] << 8) | (buffer[5] << 8) | buffer[6]; *g_zhr29_200_laser_sensor_3 = ((buffer[3] << 24) | (buffer[4] << 16) | (buffer[5] << 8) | buffer[6]) / 1000;
if(*g_zhr29_200_laser_sensor_3 >= 280)
{
*g_zhr29_200_laser_sensor_3 = 280;
}
if(*g_zhr29_200_laser_sensor_3 <= 120)
{
*g_zhr29_200_laser_sensor_3 = 120;
}
} }
else{ else{
} }
} }
else{ else{

10
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c

@ -41,7 +41,7 @@ void MX_FDCAN1_Init(void)
hfdcan1.Instance = FDCAN1; hfdcan1.Instance = FDCAN1;
hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC; hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
hfdcan1.Init.Mode = FDCAN_MODE_NORMAL; hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan1.Init.AutoRetransmission = DISABLE; hfdcan1.Init.AutoRetransmission = ENABLE;
hfdcan1.Init.TransmitPause = DISABLE; hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = DISABLE; hfdcan1.Init.ProtocolException = DISABLE;
hfdcan1.Init.NominalPrescaler = 10; hfdcan1.Init.NominalPrescaler = 10;
@ -89,7 +89,7 @@ void MX_FDCAN2_Init(void)
hfdcan2.Instance = FDCAN2; hfdcan2.Instance = FDCAN2;
hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC; hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
hfdcan2.Init.Mode = FDCAN_MODE_NORMAL; hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan2.Init.AutoRetransmission = DISABLE; hfdcan2.Init.AutoRetransmission = ENABLE;
hfdcan2.Init.TransmitPause = DISABLE; hfdcan2.Init.TransmitPause = DISABLE;
hfdcan2.Init.ProtocolException = DISABLE; hfdcan2.Init.ProtocolException = DISABLE;
hfdcan2.Init.NominalPrescaler = 20; hfdcan2.Init.NominalPrescaler = 20;
@ -100,7 +100,7 @@ void MX_FDCAN2_Init(void)
hfdcan2.Init.DataSyncJumpWidth = 1; hfdcan2.Init.DataSyncJumpWidth = 1;
hfdcan2.Init.DataTimeSeg1 = 1; hfdcan2.Init.DataTimeSeg1 = 1;
hfdcan2.Init.DataTimeSeg2 = 1; hfdcan2.Init.DataTimeSeg2 = 1;
hfdcan2.Init.MessageRAMOffset = 0; hfdcan2.Init.MessageRAMOffset = 0x500;
hfdcan2.Init.StdFiltersNbr = 0; hfdcan2.Init.StdFiltersNbr = 0;
hfdcan2.Init.ExtFiltersNbr = 0; hfdcan2.Init.ExtFiltersNbr = 0;
hfdcan2.Init.RxFifo0ElmtsNbr = 32; hfdcan2.Init.RxFifo0ElmtsNbr = 32;
@ -160,7 +160,7 @@ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* fdcanHandle)
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
@ -200,7 +200,7 @@ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* fdcanHandle)
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN2; GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

15
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c

@ -122,6 +122,8 @@ int main(void)
/* USER CODE BEGIN Init */ /* USER CODE BEGIN Init */
// HAL_Delay(5000);
/* USER CODE END Init */ /* USER CODE END Init */
/* Configure the system clock */ /* Configure the system clock */
@ -154,6 +156,7 @@ int main(void)
GF_BSP_GPIO_SetIO(5,1); GF_BSP_GPIO_SetIO(5,1);
DLT_LOG_ENABLE_LEVEL=0;//7 send all information 0 send nothing DLT_LOG_ENABLE_LEVEL=0;//7 send all information 0 send nothing
Error_Detect_Intialzie(3000);//every 1 seconds Error_Detect_Intialzie(3000);//every 1 seconds
GF_Robot_Init(); GF_Robot_Init();
GV.Move_Speed=3000; GV.Move_Speed=3000;
// udp_client_init(); // udp_client_init();
@ -264,10 +267,12 @@ void CV_GV_Init()
GV.LS_FrontEnd_Motor.MotorID = 1; GV.LS_FrontEnd_Motor.MotorID = 1;
GV.LS_FrontEnd_Motor.Target_Velcity = 0; GV.LS_FrontEnd_Motor.Target_Velcity = 0;
LS_Motor[1] = &GV.LS_FrontEnd_Motor;
LS_Motor[1]->MotorID = GV.LS_FrontEnd_Motor.MotorID;
P_MK32 = &GV.MK32_Key; P_MK32 = &GV.MK32_Key;
// 光测距传感器指针同步 // �?光测距传感器指针同步
g_zhr29_200_laser_sensor_1 = &GV.ZHR29_200_measure_results.laser_sensor_1_measure_distance; g_zhr29_200_laser_sensor_1 = &GV.ZHR29_200_measure_results.laser_sensor_1_measure_distance;
g_zhr29_200_laser_sensor_2 = &GV.ZHR29_200_measure_results.laser_sensor_2_measure_distance; g_zhr29_200_laser_sensor_2 = &GV.ZHR29_200_measure_results.laser_sensor_2_measure_distance;
g_zhr29_200_laser_sensor_3 = &GV.ZHR29_200_measure_results.laser_sensor_3_measure_distance; g_zhr29_200_laser_sensor_3 = &GV.ZHR29_200_measure_results.laser_sensor_3_measure_distance;
@ -328,16 +333,18 @@ void GF_Robot_Init()
TankWashing_Motor_Controller_intialize(&FD_CAN_1_Handler); TankWashing_Motor_Controller_intialize(&FD_CAN_1_Handler);
SlideMotor_Controller_intialize_CAN2(&FD_CAN_2_Handler);//雷赛电机 SlideMotor_Controller_intialize_CAN2(&FD_CAN_2_Handler);//雷赛电机
// 激光测距传感器,115200,待测试,2026.03.09 // �?光测距传感器�?115200
// zhr29_200_laser_sensor_intialize(&RS_485_4_UART_Handler); zhr29_200_laser_sensor_intialize(&RS_485_3_UART_Handler);
Fsm_Init(); Fsm_Init();
uint8_t _state = 1; uint8_t _state = 1;
_state = _state & GF_BSP_TIMER_Init(); //定时器最后启�???? _state = _state & GF_BSP_TIMER_Init(); //定时器最后启�?????
} }

19
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/robot_state.c

@ -221,13 +221,22 @@ int32_t SliderSpeed_mmps_2_pps(int32_t mmps)
} }
// 定义前端升降电机速度,单位mm/s // 定义前端升降电机速度,单位mm/s
static int32_t SliderSpeed = 10; static int32_t SliderSpeed = 50;
const uint8_t up_limit = 215;
const uint8_t down_limit = 150;
void Manual_Up_State_Do(void) void Manual_Up_State_Do(void)
{ {
int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed); int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed);
GV.LS_FrontEnd_Motor.Target_Position = -10000000; GV.LS_FrontEnd_Motor.Target_Position = -10000000;
GV.LS_FrontEnd_Motor.Target_Velcity = SliderSpeed_PPS; GV.LS_FrontEnd_Motor.Target_Velcity = SliderSpeed_PPS;
if((GV.ZHR29_200_measure_results.laser_sensor_1_measure_distance >= up_limit)
|| (GV.ZHR29_200_measure_results.laser_sensor_2_measure_distance >= up_limit)
|| (GV.ZHR29_200_measure_results.laser_sensor_3_measure_distance >= up_limit))
{
GV.LS_FrontEnd_Motor.Target_Velcity = 0;
}
} }
void Manual_Down_State_Do(void) void Manual_Down_State_Do(void)
@ -235,6 +244,14 @@ void Manual_Down_State_Do(void)
int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed); int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed);
GV.LS_FrontEnd_Motor.Target_Position = 10000000; GV.LS_FrontEnd_Motor.Target_Position = 10000000;
GV.LS_FrontEnd_Motor.Target_Velcity = SliderSpeed_PPS; GV.LS_FrontEnd_Motor.Target_Velcity = SliderSpeed_PPS;
if((GV.ZHR29_200_measure_results.laser_sensor_1_measure_distance <= down_limit)
|| (GV.ZHR29_200_measure_results.laser_sensor_2_measure_distance <= down_limit)
|| (GV.ZHR29_200_measure_results.laser_sensor_3_measure_distance <= down_limit))
{
GV.LS_FrontEnd_Motor.Target_Velcity = 0;
}
} }
void FrontEnd_Halt_State_Do(void) void FrontEnd_Halt_State_Do(void)

2
diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/usart.c

@ -372,7 +372,7 @@ void MX_USART6_UART_Init(void)
/* USER CODE END USART6_Init 1 */ /* USER CODE END USART6_Init 1 */
huart6.Instance = USART6; huart6.Instance = USART6;
huart6.Init.BaudRate = 9600; huart6.Init.BaudRate = 115200;
huart6.Init.WordLength = UART_WORDLENGTH_8B; huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1; huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE; huart6.Init.Parity = UART_PARITY_NONE;

Loading…
Cancel
Save