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;