From f56491f02427d6d28254a2dce4b978b9d86b94a4 Mon Sep 17 00:00:00 2001
From: "HJB\\13752" <13752551070@163.com>
Date: Thu, 26 Mar 2026 14:33:14 +0800
Subject: [PATCH] =?UTF-8?q?1.=20=E6=B5=8B=E8=AF=95=E6=BF=80=E5=85=89?=
=?UTF-8?q?=E6=B5=8B=E8=B7=9D=E4=BC=A0=E6=84=9F=E5=99=A8=202.=20=E8=B0=83?=
=?UTF-8?q?=E8=AF=95=E5=89=8D=E7=AB=AF=E9=9B=B7=E8=B5=9B=E7=94=B5=E6=9C=BA?=
=?UTF-8?q?=EF=BC=8C=E5=B0=86=E6=A8=A1=E5=BC=8F=E7=94=B1Pr=E6=A8=A1?=
=?UTF-8?q?=E5=BC=8F=E6=94=B9=E4=B8=BACan=E6=A8=A1=E5=BC=8F=E5=90=8E?=
=?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../.settings/language.settings.xml | 4 +-
.../BHBF_Robot_Lifting_Lug Debug.launch | 80 +++++++
.../BHBF_Robot_Lifting_Lug.ioc | 19 +-
.../Core/BASE/Inc/BSP/bsp_UART.h | 43 ++--
.../Core/BASE/Src/BSP/bsp_UART.c | 200 +++++-------------
.../BASE/Src/MSP/msp_zhr29_laser_sensor.c | 67 ++++--
.../BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c | 10 +-
.../BHBF_Robot_Lifting_Lug/Core/Src/main.c | 15 +-
.../Core/Src/robot_state.c | 19 +-
.../BHBF_Robot_Lifting_Lug/Core/Src/usart.c | 2 +-
10 files changed, 251 insertions(+), 208 deletions(-)
create mode 100644 diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml b/diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml
index 3f35568..e5e306c 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch b/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch
new file mode 100644
index 0000000..6578262
--- /dev/null
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug Debug.launch
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc b/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc
index 38d3915..980000f 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/BHBF_Robot_Lifting_Lug.ioc
@@ -179,18 +179,21 @@ ETH.RxBuffAddress=0x30040400
ETH.RxBuffLen=1528
ETH.RxDescAddress=0x30040000
ETH.TxDescAddress=0x30040200
+FDCAN1.AutoRetransmission=ENABLE
FDCAN1.CalculateBaudRateNominal=500000
FDCAN1.CalculateTimeBitNominal=2000
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.NominalTimeSeg1=5
FDCAN1.RxFifo0ElmtsNbr=32
FDCAN1.TxFifoQueueElmtsNbr=32
+FDCAN2.AutoRetransmission=ENABLE
FDCAN2.CalculateBaudRateNominal=250000
FDCAN2.CalculateTimeBitNominal=4000
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.NominalTimeSeg1=5
FDCAN2.RxFifo0ElmtsNbr=32
@@ -487,9 +490,13 @@ PB4\ (NJTRST).GPIOParameters=GPIO_Label
PB4\ (NJTRST).GPIO_Label=S0_LINKA
PB4\ (NJTRST).Locked=true
PB4\ (NJTRST).Signal=GPIO_Input
+PB5.GPIOParameters=GPIO_Speed
+PB5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB5.Locked=true
PB5.Mode=FDCAN_Activate
PB5.Signal=FDCAN2_RX
+PB6.GPIOParameters=GPIO_Speed
+PB6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB6.Locked=true
PB6.Mode=FDCAN_Activate
PB6.Signal=FDCAN2_TX
@@ -497,9 +504,13 @@ PB7.GPIOParameters=GPIO_Label
PB7.GPIO_Label=E22_M1
PB7.Locked=true
PB7.Signal=GPIO_Output
+PB8.GPIOParameters=GPIO_Speed
+PB8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB8.Locked=true
PB8.Mode=FDCAN_Activate
PB8.Signal=FDCAN1_RX
+PB9.GPIOParameters=GPIO_Speed
+PB9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB9.Locked=true
PB9.Mode=FDCAN_Activate
PB9.Signal=FDCAN1_TX
@@ -719,8 +730,8 @@ ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false
-ProjectManager.ProjectFileName=BHBF_Robot_LeiGuBan.ioc
-ProjectManager.ProjectName=BHBF_Robot_LeiGuBan
+ProjectManager.ProjectFileName=BHBF_Robot_Lifting_Lug.ioc
+ProjectManager.ProjectName=BHBF_Robot_Lifting_Lug
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x1000
ProjectManager.TargetToolchain=STM32CubeIDE
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h
index c579507..5748728 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Inc/BSP/bsp_UART.h
@@ -50,52 +50,49 @@ void GF_BSP_UART_Transmit(const uint8_t RS485_Index,const uint8_t *pData, uint16
-
+// 链表节点结构体
typedef struct UARTSendHandler
{
uint16_t SendLength;
uint16_t SendListTimePeriod;
uint8_t Tx_Buf[502];
- void (*UART_Decode)(uint8_t*, uint16_t); // 发送缓存
+ void (*UART_Decode)(uint8_t*, uint16_t); // 发送缓存
struct UARTSendHandler* pNext;
}UARTSendHandler;
struct UARTHandler
{
- char startCountFlag; //indicate that to start counting
- char send_finished; //indicate send finished or not
- char decode_finished; //indicate decode finished or not
- uint8_t tmp_Rx_Buf[2]; // temporary data to store received data
-
- uint32_t Wait_time; // the time to wait
+ char startCountFlag; //indicate that to start counting
+ char send_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
+
+ uint32_t Wait_time; // the time to wait
+ //uint32_t Send_time;
+ //uint32_t count;
uint32_t Wait_Time_Count;
uint32_t SendList_time_Count;
uint32_t SendList_Period;
uint8_t SendListExists;
- UART_HandleTypeDef* uart; //UART to use
- UARTSendHandler *pCurrentUARTSendHadler;
-
- unsigned char timeSpan; // timer elapsed time
- uint8_t Rx_Buf[2048]; // 接收缓存,最大256字节
- uint8_t Tx_Buf[2048]; //发送缓存 157,864
+ UART_HandleTypeDef* uart; //UART to use
+ unsigned char timeSpan; // timer elapsed time
+ uint8_t Rx_Buf[2048]; // 接收缓存,最大256字节
+ uint8_t Tx_Buf[2048]; //发送缓存 157,864
uint16_t TxCount;
uint16_t RxCount;
- void (*UART_Tx)(struct UARTHandler*); //void UART_Tx(uint8_t *Tx_Buf,uint16_t TxCount);
+ //(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_Rx)(struct UARTHandler*);
- void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf
-
- void (*AddSendList)(struct UARTHandler*,
- uint8_t*, uint16_t,
- uint32_t, //这里是修改等待时间
- void (*UART_Decode)(uint8_t*, uint16_t));
-
+ void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf
+ UARTSendHandler *pCurrentUARTSendHadler; //
+ void (*AddSendList)(struct UARTHandler*, uint8_t*, uint16_t,uint32_t,//这里是修改等待时间
+ void (*UART_Decode)(uint8_t*, uint16_t));
struct _DispacherController *dispacherController;
-
};
void UARTHandlerTx(struct UARTHandler *uartHandler);
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c
index 8984376..07d3590 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/BSP/bsp_UART.c
@@ -1,7 +1,7 @@
#include "bsp_UART.h"
#include "main.h"
#include
-#include "DLT/DLTuc.h"
+
void GF_UART_Send_List_Send(struct UARTHandler *handler);
void Dispatcher_List_Add(struct UARTHandler *uartHandler,
void (*dispache)(void));
@@ -103,9 +103,6 @@ void GF_BSP_UARTHandlers_Intialize(
HAL_UART_Receive_IT((LTE_7S0_Serial_UART_Handler.uart),
(uint8_t*) <E_7S0_Serial_UART_Handler.tmp_Rx_Buf, 1);
-
-
-
#if defined (hlpuart1Exit)
IntializeUARTHandler(&LPUART1_UART_Handler, &LPUART1UART, LPUART1_UART_WaitTime, 2,LPUART1_UART_Dispacher_Time); //10ms 剩余2ms
HAL_UART_Receive_IT((LPUART1_UART_Handler.uart),
@@ -113,9 +110,6 @@ void GF_BSP_UARTHandlers_Intialize(
#endif
-
-
-
GF_BSP_Interrupt_Add_CallBack(
DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback, GF_BSP_UART_Timer);
@@ -136,22 +130,16 @@ void GF_BSP_UART_Timer()
Counting(&LPUART1_UART_Handler);
#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,
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));
memcpy(pTmp->Tx_Buf, data, length);
pTmp->pNext = NULL;
@@ -159,14 +147,13 @@ void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data,
pTmp->SendLength = length;
pTmp->UART_Decode = UART_Decode;
-//if NULL, call intialize one
if (uartHandler->pCurrentUARTSendHadler == NULL)
{
uartHandler->pCurrentUARTSendHadler = pTmp; //空链表
} else
{
char i = 0;
- //插到尾部
+ // 插到尾部
UARTSendHandler *phead = NULL;
phead = uartHandler->pCurrentUARTSendHadler;
while (phead->pNext != NULL)
@@ -175,9 +162,7 @@ void UARTHandlerAddTxList(struct UARTHandler *uartHandler, uint8_t *data,
phead = phead->pNext;
}
phead->pNext = pTmp;
-
}
-
}
void UARTHandlerTx(struct UARTHandler *uartHandler)
@@ -185,60 +170,62 @@ void UARTHandlerTx(struct UARTHandler *uartHandler)
if (uartHandler->uart == NULL)
{
- LOGFF(DL_ERROR,
- "the UART Hardware did not intialize,check the setting");
+// LOGFF(DL_ERROR,
+// "the UART Hardware did not intialize,check the setting");
return;
}
- uartHandler->RxCount=0;//设定RxCount为0
-#if defined (hlpuart1Exit)
+ uartHandler->RxCount = 0;
+
+ #if defined (hlpuart1Exit)
if(uartHandler->uart->Instance == LPUART1)
{
HAL_UART_Transmit(uartHandler->uart, uartHandler->Tx_Buf,
uartHandler->TxCount,100);
}else
+
{
-#endif
+ #endif
- if (uartHandler->uart->Instance == UART4) //**DEBUG
- {
+ if (uartHandler->uart->Instance == UART4) //**DEBUG
+ {
- } else if (uartHandler->uart->Instance == USART1) //**RS485_1
- {
+ } else if (uartHandler->uart->Instance == USART1) //**RS485_1
+ {
- HAL_GPIO_WritePin(RS485_1_DIR_GPIO_Port, RS485_1_DIR_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(RS485_1_DIR_GPIO_Port, RS485_1_DIR_Pin, GPIO_PIN_SET);
- } else if (uartHandler->uart->Instance == USART3) //**RS485_2
- {
+ } else if (uartHandler->uart->Instance == USART3) //**RS485_2
+ {
- HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin, GPIO_PIN_SET);
- } else if (uartHandler->uart->Instance == USART6) //**RS485_3
- {
+ } else if (uartHandler->uart->Instance == USART6) //**RS485_3
+ {
- HAL_GPIO_WritePin(RS485_3_DIR_GPIO_Port, RS485_3_DIR_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(RS485_3_DIR_GPIO_Port, RS485_3_DIR_Pin, GPIO_PIN_SET);
- } else if (uartHandler->uart->Instance == UART7) //**RS485_4
- {
- HAL_GPIO_WritePin(RS485_4_DIR_GPIO_Port, RS485_4_DIR_Pin, GPIO_PIN_SET);
+ } else if (uartHandler->uart->Instance == UART7) //**RS485_4
+ {
+ HAL_GPIO_WritePin(RS485_4_DIR_GPIO_Port, RS485_4_DIR_Pin, GPIO_PIN_SET);
- } else if (uartHandler->uart->Instance == USART2)//**E22 // External serial port
- {
+ } else if (uartHandler->uart->Instance == USART2)//**E22 // External serial port
+ {
- } else if (uartHandler->uart->Instance == UART5) //**E28 // SBUS
- {
+ } else if (uartHandler->uart->Instance == UART5) //**E28 // SBUS
+ {
- }
+ }
- SCB_CleanInvalidateDCache_by_Addr((uint32_t*) uartHandler->Tx_Buf,
- uartHandler->TxCount);
+ SCB_CleanInvalidateDCache_by_Addr((uint32_t*) uartHandler->Tx_Buf,
+ uartHandler->TxCount);
- HAL_UART_Transmit_DMA(uartHandler->uart, uartHandler->Tx_Buf,
- uartHandler->TxCount);
-#if defined (hlpuart1Exit)
- }
-#endif
+ HAL_UART_Transmit_DMA(uartHandler->uart, uartHandler->Tx_Buf,
+ uartHandler->TxCount);
+ #if defined (hlpuart1Exit)
+ }
+ #endif
if (uartHandler->uart == UART4) //**DEBUG
@@ -287,7 +274,7 @@ void UARTHandlerRX(struct UARTHandler *uartHandler)
{
uartHandler->RxCount=0;
}
- //HAL_UART_Receive_IT(uartHandler->uart, RS_485_2_UART_Handler.tmp_Rx_Buf, 1);
+
}
void IntializeUARTHandler(struct UARTHandler *uartHandler,
@@ -299,6 +286,7 @@ void IntializeUARTHandler(struct UARTHandler *uartHandler,
uartHandler->uart = uart;
uartHandler->UART_Rx = UARTHandlerRX;
uartHandler->UART_Tx = UARTHandlerTx;
+ // 普通链表
uartHandler->AddSendList = UARTHandlerAddTxList;
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->Dispacher_Counter = 0;
uartHandler->dispacherController->DispacherNumber = 0;
+ // 环形链表
uartHandler->dispacherController->Add_Dispatcher_List = Dispatcher_List_Add_t;
uartHandler->dispacherController->Dispatcher_Run = Dispatch_t;
@@ -322,7 +311,7 @@ void IntializeUARTHandler(struct UARTHandler *uartHandler,
void Counting(struct UARTHandler *uartHandler)
{
- if (uartHandler->UART_Decode == NULL) //不解析,直接返回true
+ if (uartHandler->UART_Decode == NULL)
{
uartHandler->decode_finished = 1;
} else
@@ -335,21 +324,22 @@ void Counting(struct UARTHandler *uartHandler)
{
uartHandler->Wait_Time_Count = 0;
uartHandler->startCountFlag = 0;
- //启动解析函数
+ // 启动解析函数
if (uartHandler->RxCount >= 1)
{
- uartHandler->UART_Decode(uartHandler->Rx_Buf,
- uartHandler->RxCount);
+ if(uartHandler->UART_Decode!=NULL)
+ {
+ uartHandler->UART_Decode(uartHandler->Rx_Buf,
+ uartHandler->RxCount);
+ }
uartHandler->RxCount = 0;
}
}
-
}
}
if (uartHandler->pCurrentUARTSendHadler != NULL)
{
-
GF_UART_Send_List_Send(uartHandler);
} else
{
@@ -357,41 +347,8 @@ void Counting(struct UARTHandler *uartHandler)
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)
{
if (huart->Instance == UART4) //**DEBUG
@@ -539,60 +496,6 @@ void GF_BSP_UART_Transmit(const uint8_t RS485_Index, const uint8_t *pData,
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)
{
@@ -605,7 +508,6 @@ void GF_UART_Send_List_Send(struct UARTHandler *handler)
if (handler->pCurrentUARTSendHadler != NULL)
{
//拷贝数据到相关的代码中,然后发送
-
//handler->CAN_Decode = handler->pCurrentCANSendHadler->CAN_Decode; //
memcpy(handler->Tx_Buf, handler->pCurrentUARTSendHadler->Tx_Buf,
handler->pCurrentUARTSendHadler->SendLength);
@@ -614,6 +516,10 @@ void GF_UART_Send_List_Send(struct UARTHandler *handler)
handler->TxCount = handler->pCurrentUARTSendHadler->SendLength;
handler->UART_Tx(handler);
+ handler->UART_Decode = handler->pCurrentUARTSendHadler->UART_Decode;
+ //计数重新开始
+ //handler->RxCount=0;
+
if (handler->pCurrentUARTSendHadler->pNext != NULL)
{
UARTSendHandler *temp = handler->pCurrentUARTSendHadler->pNext;
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/MSP/msp_zhr29_laser_sensor.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/MSP/msp_zhr29_laser_sensor.c
index 65a9984..a95b7bc 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/BASE/Src/MSP/msp_zhr29_laser_sensor.c
+++ b/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
{
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;
void zhr29_200_laser_sensor_intialize(struct UARTHandler *Handler)
{
zhr29_200_laser_sensor = Handler;
- zhr29_200_laser_sensor->dispacherController->Dispacher_Enable = 1;
+
zhr29_200_laser_sensor->Wait_time = 10;
laser_sensor_dispacherController = Handler->dispacherController;
+ laser_sensor_dispacherController->Dispacher_Enable = 1;
laser_sensor_dispacherController->DispacherCallTime = 100;
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_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)
{
@@ -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);
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_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;
case INQUIRY_LASER_SENSOR_2_CMD_STATUS:
zhr29_200_laser_sensor->TxCount = 8;
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,
+ inquiry_interval, decode_laser_sensor);
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;
default:
@@ -82,7 +79,6 @@ void ZHR29_200_Inquiry(void)
}
-
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))
{
- *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))
{
- *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))
{
- *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{
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c
index b8ef8e9..365f163 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/fdcan.c
@@ -41,7 +41,7 @@ void MX_FDCAN1_Init(void)
hfdcan1.Instance = FDCAN1;
hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
- hfdcan1.Init.AutoRetransmission = DISABLE;
+ hfdcan1.Init.AutoRetransmission = ENABLE;
hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = DISABLE;
hfdcan1.Init.NominalPrescaler = 10;
@@ -89,7 +89,7 @@ void MX_FDCAN2_Init(void)
hfdcan2.Instance = FDCAN2;
hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;
- hfdcan2.Init.AutoRetransmission = DISABLE;
+ hfdcan2.Init.AutoRetransmission = ENABLE;
hfdcan2.Init.TransmitPause = DISABLE;
hfdcan2.Init.ProtocolException = DISABLE;
hfdcan2.Init.NominalPrescaler = 20;
@@ -100,7 +100,7 @@ void MX_FDCAN2_Init(void)
hfdcan2.Init.DataSyncJumpWidth = 1;
hfdcan2.Init.DataTimeSeg1 = 1;
hfdcan2.Init.DataTimeSeg2 = 1;
- hfdcan2.Init.MessageRAMOffset = 0;
+ hfdcan2.Init.MessageRAMOffset = 0x500;
hfdcan2.Init.StdFiltersNbr = 0;
hfdcan2.Init.ExtFiltersNbr = 0;
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.Mode = GPIO_MODE_AF_PP;
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;
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.Mode = GPIO_MODE_AF_PP;
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;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c
index dce004a..8f09a5e 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c
+++ b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/main.c
@@ -122,6 +122,8 @@ int main(void)
/* USER CODE BEGIN Init */
+// HAL_Delay(5000);
+
/* USER CODE END Init */
/* Configure the system clock */
@@ -154,6 +156,7 @@ int main(void)
GF_BSP_GPIO_SetIO(5,1);
DLT_LOG_ENABLE_LEVEL=0;//7 send all information 0 send nothing
Error_Detect_Intialzie(3000);//every 1 seconds
+
GF_Robot_Init();
GV.Move_Speed=3000;
// udp_client_init();
@@ -264,10 +267,12 @@ void CV_GV_Init()
GV.LS_FrontEnd_Motor.MotorID = 1;
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;
- // 激光测距传感器指针同步
+ // �?光测距传感器指针同步
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_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);
+
+
SlideMotor_Controller_intialize_CAN2(&FD_CAN_2_Handler);//雷赛电机
- // 激光测距传感器,115200,待测试,2026.03.09
-// zhr29_200_laser_sensor_intialize(&RS_485_4_UART_Handler);
+ // �?光测距传感器�?115200
+ zhr29_200_laser_sensor_intialize(&RS_485_3_UART_Handler);
Fsm_Init();
uint8_t _state = 1;
- _state = _state & GF_BSP_TIMER_Init(); //定时器最后启�????
+ _state = _state & GF_BSP_TIMER_Init(); //定时器最后启�?????
}
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/robot_state.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/robot_state.c
index bfb92b9..1d20fdd 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/robot_state.c
+++ b/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
-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)
{
int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed);
GV.LS_FrontEnd_Motor.Target_Position = -10000000;
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)
@@ -235,6 +244,14 @@ void Manual_Down_State_Do(void)
int32_t SliderSpeed_PPS = SliderSpeed_mmps_2_pps(SliderSpeed);
GV.LS_FrontEnd_Motor.Target_Position = 10000000;
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)
diff --git a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/usart.c b/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/usart.c
index 1256b6c..d7f9fdf 100644
--- a/diaoerqiege/BHBF_Robot_Lifting_Lug/Core/Src/usart.c
+++ b/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 */
huart6.Instance = USART6;
- huart6.Init.BaudRate = 9600;
+ huart6.Init.BaudRate = 115200;
huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE;