diff --git a/32g431.ioc b/32g431.ioc index 8ff502c..0cc539a 100644 --- a/32g431.ioc +++ b/32g431.ioc @@ -2,25 +2,61 @@ CAD.formats= CAD.pinconfig= CAD.provider= -Dma.Request0=USART1_TX -Dma.RequestsNb=1 -Dma.USART1_TX.0.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART1_TX.0.EventEnable=DISABLE -Dma.USART1_TX.0.Instance=DMA1_Channel1 -Dma.USART1_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART1_TX.0.MemInc=DMA_MINC_ENABLE -Dma.USART1_TX.0.Mode=DMA_NORMAL -Dma.USART1_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART1_TX.0.PeriphInc=DMA_PINC_DISABLE -Dma.USART1_TX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Dma.USART1_TX.0.Priority=DMA_PRIORITY_LOW -Dma.USART1_TX.0.RequestNumber=1 -Dma.USART1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber -Dma.USART1_TX.0.SignalID=NONE -Dma.USART1_TX.0.SyncEnable=DISABLE -Dma.USART1_TX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT -Dma.USART1_TX.0.SyncRequestNumber=1 -Dma.USART1_TX.0.SyncSignalID=NONE +Dma.Request0=USART1_RX +Dma.Request1=USART3_RX +Dma.Request2=USART2_RX +Dma.RequestsNb=3 +Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.0.EventEnable=DISABLE +Dma.USART1_RX.0.Instance=DMA1_Channel2 +Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.0.Mode=DMA_CIRCULAR +Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.0.RequestNumber=1 +Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART1_RX.0.SignalID=NONE +Dma.USART1_RX.0.SyncEnable=DISABLE +Dma.USART1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART1_RX.0.SyncRequestNumber=1 +Dma.USART1_RX.0.SyncSignalID=NONE +Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.2.EventEnable=DISABLE +Dma.USART2_RX.2.Instance=DMA1_Channel4 +Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.2.Mode=DMA_CIRCULAR +Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.2.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW +Dma.USART2_RX.2.RequestNumber=1 +Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART2_RX.2.SignalID=NONE +Dma.USART2_RX.2.SyncEnable=DISABLE +Dma.USART2_RX.2.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART2_RX.2.SyncRequestNumber=1 +Dma.USART2_RX.2.SyncSignalID=NONE +Dma.USART3_RX.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART3_RX.1.EventEnable=DISABLE +Dma.USART3_RX.1.Instance=DMA1_Channel3 +Dma.USART3_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_RX.1.MemInc=DMA_MINC_ENABLE +Dma.USART3_RX.1.Mode=DMA_CIRCULAR +Dma.USART3_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_RX.1.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART3_RX.1.Priority=DMA_PRIORITY_LOW +Dma.USART3_RX.1.RequestNumber=1 +Dma.USART3_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART3_RX.1.SignalID=NONE +Dma.USART3_RX.1.SyncEnable=DISABLE +Dma.USART3_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART3_RX.1.SyncRequestNumber=1 +Dma.USART3_RX.1.SyncSignalID=NONE FDCAN1.CalculateBaudRateNominal=500000 FDCAN1.CalculateTimeBitNominal=2000 FDCAN1.CalculateTimeQuantumNominal=100.0 @@ -85,7 +121,9 @@ Mcu.UserName=STM32G431CBUx MxCube.Version=6.17.0 MxDb.Version=DB.6.0.170 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Channel2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Channel3_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.FDCAN1_IT0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.ForceEnableDMAVector=true diff --git a/CMakePresets.json b/CMakePresets.json index 8f47664..afa25ec 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -33,6 +33,7 @@ "MEM_POOL_TOTAL_SIZE": "8*1024", "CONFIG_CAN_NEW_VERSION": "1", "USE_UART": true, + "CONFIG_UART_IT_IDLEDMA": true, "USE_PRINT": true, "PRINT_ID": "1", "USE_CAN": true diff --git a/Core/Inc/stm32g4xx_it.h b/Core/Inc/stm32g4xx_it.h index 9ca6ec8..a342247 100644 --- a/Core/Inc/stm32g4xx_it.h +++ b/Core/Inc/stm32g4xx_it.h @@ -55,7 +55,9 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); -void DMA1_Channel1_IRQHandler(void); +void DMA1_Channel2_IRQHandler(void); +void DMA1_Channel3_IRQHandler(void); +void DMA1_Channel4_IRQHandler(void); void FDCAN1_IT0_IRQHandler(void); void USART1_IRQHandler(void); void USART3_IRQHandler(void); diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 303cfbd..8aef38a 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -44,9 +44,15 @@ void MX_DMA_Init(void) __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ - /* DMA1_Channel1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); + /* DMA1_Channel2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn); + /* DMA1_Channel3_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); + /* DMA1_Channel4_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn); } diff --git a/Core/Src/main.c b/Core/Src/main.c index f988574..3475dd8 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -96,7 +96,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); - MX_IWDG_Init(); + //MX_IWDG_Init(); MX_USART1_UART_Init(); MX_TIM6_Init(); MX_FDCAN1_Init(); @@ -121,7 +121,7 @@ int main(void) /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ - HAL_IWDG_Refresh(&hiwdg); + //HAL_IWDG_Refresh(&hiwdg); } /* USER CODE END 3 */ } diff --git a/Core/Src/stm32g4xx_it.c b/Core/Src/stm32g4xx_it.c index b791adf..ed98e4c 100644 --- a/Core/Src/stm32g4xx_it.c +++ b/Core/Src/stm32g4xx_it.c @@ -22,11 +22,13 @@ #include "stm32g4xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "bsp_uart.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ - +extern TComCtrl *g_ptRS485_1; +extern TComCtrl *g_ptRS485_2; /* USER CODE END TD */ /* Private define ------------------------------------------------------------*/ @@ -56,7 +58,9 @@ /* External variables --------------------------------------------------------*/ extern FDCAN_HandleTypeDef hfdcan1; -extern DMA_HandleTypeDef hdma_usart1_tx; +extern DMA_HandleTypeDef hdma_usart1_rx; +extern DMA_HandleTypeDef hdma_usart2_rx; +extern DMA_HandleTypeDef hdma_usart3_rx; extern UART_HandleTypeDef hlpuart1; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart3; @@ -204,17 +208,45 @@ void SysTick_Handler(void) /******************************************************************************/ /** - * @brief This function handles DMA1 channel1 global interrupt. + * @brief This function handles DMA1 channel2 global interrupt. */ -void DMA1_Channel1_IRQHandler(void) +void DMA1_Channel2_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */ + /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */ - /* USER CODE END DMA1_Channel1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart1_tx); - /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ + /* USER CODE END DMA1_Channel2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_rx); + /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */ - /* USER CODE END DMA1_Channel1_IRQn 1 */ + /* USER CODE END DMA1_Channel2_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 channel3 global interrupt. + */ +void DMA1_Channel3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */ + + /* USER CODE END DMA1_Channel3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart3_rx); + /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */ + + /* USER CODE END DMA1_Channel3_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 channel4 global interrupt. + */ +void DMA1_Channel4_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */ + + /* USER CODE END DMA1_Channel4_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_rx); + /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */ + + /* USER CODE END DMA1_Channel4_IRQn 1 */ } /** @@ -237,7 +269,7 @@ void FDCAN1_IT0_IRQHandler(void) void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ - + UART_DMA_RX_IRQHandler(g_ptRS485_1); /* USER CODE END USART1_IRQn 0 */ HAL_UART_IRQHandler(&huart1); /* USER CODE BEGIN USART1_IRQn 1 */ @@ -251,7 +283,7 @@ void USART1_IRQHandler(void) void USART3_IRQHandler(void) { /* USER CODE BEGIN USART3_IRQn 0 */ - + UART_DMA_RX_IRQHandler(g_ptRS485_2); /* USER CODE END USART3_IRQn 0 */ HAL_UART_IRQHandler(&huart3); /* USER CODE BEGIN USART3_IRQn 1 */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index bb2f4b3..27abaae 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -28,7 +28,9 @@ UART_HandleTypeDef hlpuart1; UART_HandleTypeDef huart1; UART_HandleTypeDef huart2; UART_HandleTypeDef huart3; -DMA_HandleTypeDef hdma_usart1_tx; +DMA_HandleTypeDef hdma_usart1_rx; +DMA_HandleTypeDef hdma_usart2_rx; +DMA_HandleTypeDef hdma_usart3_rx; /* LPUART1 init function */ @@ -279,22 +281,22 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USART1 DMA Init */ - /* USART1_TX Init */ - hdma_usart1_tx.Instance = DMA1_Channel1; - hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX; - hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart1_tx.Init.Mode = DMA_NORMAL; - hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; - if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) + /* USART1_RX Init */ + hdma_usart1_rx.Instance = DMA1_Channel2; + hdma_usart1_rx.Init.Request = DMA_REQUEST_USART1_RX; + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) { Error_Handler(); } - __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx); + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); /* USART1 interrupt Init */ HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); @@ -333,6 +335,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /* USART2 DMA Init */ + /* USART2_RX Init */ + hdma_usart2_rx.Instance = DMA1_Channel4; + hdma_usart2_rx.Init.Request = DMA_REQUEST_USART2_RX; + hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); + /* USER CODE BEGIN USART2_MspInit 1 */ /* USER CODE END USART2_MspInit 1 */ @@ -367,6 +387,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Alternate = GPIO_AF7_USART3; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /* USART3 DMA Init */ + /* USART3_RX Init */ + hdma_usart3_rx.Instance = DMA1_Channel3; + hdma_usart3_rx.Init.Request = DMA_REQUEST_USART3_RX; + hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart3_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx); + /* USART3 interrupt Init */ HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART3_IRQn); @@ -414,7 +452,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); /* USART1 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmatx); + HAL_DMA_DeInit(uartHandle->hdmarx); /* USART1 interrupt Deinit */ HAL_NVIC_DisableIRQ(USART1_IRQn); @@ -436,6 +474,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + /* USART2 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); /* USER CODE BEGIN USART2_MspDeInit 1 */ /* USER CODE END USART2_MspDeInit 1 */ @@ -454,6 +494,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11); + /* USART3 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + /* USART3 interrupt Deinit */ HAL_NVIC_DisableIRQ(USART3_IRQn); /* USER CODE BEGIN USART3_MspDeInit 1 */ diff --git a/robot b/robot index 48b7027..a7248b6 160000 --- a/robot +++ b/robot @@ -1 +1 @@ -Subproject commit 48b7027c5628e62f09eb23e705cd94bca50aca6f +Subproject commit a7248b66af36e3d3772a58e9ee89e31b27fb8a43