From d4f075d7875b14ed6c0fa371d597c2f60952455f Mon Sep 17 00:00:00 2001 From: Federica Di Lauro Date: Thu, 12 Mar 2020 16:37:32 +0100 Subject: [PATCH] fix rx bug --- otto_controller/Core/Src/main.cpp | 9 +++++++++ otto_controller/Core/Src/usart.c | 7 ++++--- otto_controller/otto_controller.ioc | 10 +++++----- utils/catkin_ws/launch/serial_bridge.launch | 4 ++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/otto_controller/Core/Src/main.cpp b/otto_controller/Core/Src/main.cpp index cd22b80..a5bdc7c 100644 --- a/otto_controller/Core/Src/main.cpp +++ b/otto_controller/Core/Src/main.cpp @@ -114,6 +114,7 @@ ConfigCommand config_cmd; int otto_status = 0; int test = 0; +int error = 0; /* USER CODE END PV */ @@ -195,6 +196,8 @@ int main(void) VelocityCommand_size); /* USER CODE END 2 */ + + /* Infinite loop */ /* USER CODE BEGIN WHILE */ @@ -358,6 +361,12 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { VelocityCommand_size); } +void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle){ + error++; + HAL_UART_Receive_DMA(&huart6, (uint8_t*) &proto_buffer_rx, + VelocityCommand_size); +} + void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { //Blue user button on the NUCLEO board if (GPIO_Pin == user_button_Pin) { diff --git a/otto_controller/Core/Src/usart.c b/otto_controller/Core/Src/usart.c index 3217f9a..f5a2993 100644 --- a/otto_controller/Core/Src/usart.c +++ b/otto_controller/Core/Src/usart.c @@ -42,7 +42,8 @@ void MX_USART6_UART_Init(void) huart6.Init.HwFlowCtl = UART_HWCONTROL_RTS; huart6.Init.OverSampling = UART_OVERSAMPLING_16; huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; - huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_DMADISABLEONERROR_INIT; + huart6.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR; if (HAL_UART_Init(&huart6) != HAL_OK) { Error_Handler(); @@ -92,7 +93,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) hdma_usart6_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart6_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart6_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart6_tx.Init.Mode = DMA_NORMAL; + hdma_usart6_tx.Init.Mode = DMA_CIRCULAR; hdma_usart6_tx.Init.Priority = DMA_PRIORITY_LOW; hdma_usart6_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_usart6_tx) != HAL_OK) @@ -110,7 +111,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) hdma_usart6_rx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart6_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart6_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart6_rx.Init.Mode = DMA_NORMAL; + hdma_usart6_rx.Init.Mode = DMA_CIRCULAR; hdma_usart6_rx.Init.Priority = DMA_PRIORITY_LOW; hdma_usart6_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_usart6_rx) != HAL_OK) diff --git a/otto_controller/otto_controller.ioc b/otto_controller/otto_controller.ioc index 337ab1d..dbdd3db 100644 --- a/otto_controller/otto_controller.ioc +++ b/otto_controller/otto_controller.ioc @@ -7,7 +7,7 @@ Dma.USART6_RX.1.FIFOMode=DMA_FIFOMODE_DISABLE Dma.USART6_RX.1.Instance=DMA2_Stream1 Dma.USART6_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.USART6_RX.1.MemInc=DMA_MINC_ENABLE -Dma.USART6_RX.1.Mode=DMA_NORMAL +Dma.USART6_RX.1.Mode=DMA_CIRCULAR Dma.USART6_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.USART6_RX.1.PeriphInc=DMA_PINC_DISABLE Dma.USART6_RX.1.Priority=DMA_PRIORITY_LOW @@ -17,7 +17,7 @@ Dma.USART6_TX.0.FIFOMode=DMA_FIFOMODE_DISABLE Dma.USART6_TX.0.Instance=DMA2_Stream6 Dma.USART6_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.USART6_TX.0.MemInc=DMA_MINC_ENABLE -Dma.USART6_TX.0.Mode=DMA_NORMAL +Dma.USART6_TX.0.Mode=DMA_CIRCULAR Dma.USART6_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.USART6_TX.0.PeriphInc=DMA_PINC_DISABLE Dma.USART6_TX.0.Priority=DMA_PRIORITY_LOW @@ -166,7 +166,7 @@ PF15.Signal=GPIO_Output PG8.Mode=RTS_Only PG8.Signal=USART6_RTS PinOutPanel.RotationAngle=0 -ProjectManager.AskForMigrate=true +ProjectManager.AskForMigrate=false ProjectManager.BackupPrevious=false ProjectManager.CompilerOptimize=6 ProjectManager.ComputerToolchain=false @@ -259,7 +259,8 @@ TIM6.IPParameters=Prescaler,Period TIM6.Period=159 TIM6.Prescaler=9999 USART6.BaudRate=9600 -USART6.IPParameters=VirtualMode-Asynchronous,WordLength,Parity,BaudRate +USART6.DMADisableonRxErrorParam=ADVFEATURE_DMA_DISABLEONRXERROR +USART6.IPParameters=VirtualMode-Asynchronous,WordLength,Parity,BaudRate,DMADisableonRxErrorParam USART6.Parity=PARITY_NONE USART6.VirtualMode-Asynchronous=VM_ASYNC USART6.WordLength=WORDLENGTH_8B @@ -272,4 +273,3 @@ VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT board=custom -isbadioc=false diff --git a/utils/catkin_ws/launch/serial_bridge.launch b/utils/catkin_ws/launch/serial_bridge.launch index 71462a0..2d00cb6 100644 --- a/utils/catkin_ws/launch/serial_bridge.launch +++ b/utils/catkin_ws/launch/serial_bridge.launch @@ -4,8 +4,8 @@ - + -- 2.52.0