| @@ -56,7 +56,9 @@ void DebugMon_Handler(void); | |||||
| void PendSV_Handler(void); | void PendSV_Handler(void); | ||||
| void SysTick_Handler(void); | void SysTick_Handler(void); | ||||
| void USART1_IRQHandler(void); | void USART1_IRQHandler(void); | ||||
| void DMA2_Stream2_IRQHandler(void); | |||||
| void OTG_FS_IRQHandler(void); | void OTG_FS_IRQHandler(void); | ||||
| void DMA2_Stream7_IRQHandler(void); | |||||
| /* USER CODE BEGIN EFP */ | /* USER CODE BEGIN EFP */ | ||||
| /* USER CODE END EFP */ | /* USER CODE END EFP */ | ||||
| @@ -42,14 +42,23 @@ | |||||
| /* Private variables ---------------------------------------------------------*/ | /* Private variables ---------------------------------------------------------*/ | ||||
| UART_HandleTypeDef huart1; | UART_HandleTypeDef huart1; | ||||
| DMA_HandleTypeDef hdma_usart1_rx; | |||||
| DMA_HandleTypeDef hdma_usart1_tx; | |||||
| /* USER CODE BEGIN PV */ | /* USER CODE BEGIN PV */ | ||||
| static const uint8_t uart1_test_message[] = "USART1 DMA TX TEST\r\n"; | |||||
| static volatile uint32_t uart1_tx_ok_count; | |||||
| static volatile uint32_t uart1_tx_busy_count; | |||||
| static volatile uint32_t uart1_tx_error_count; | |||||
| static volatile uint32_t uart1_tx_complete_count; | |||||
| /* USER CODE END PV */ | /* USER CODE END PV */ | ||||
| /* Private function prototypes -----------------------------------------------*/ | /* Private function prototypes -----------------------------------------------*/ | ||||
| void SystemClock_Config(void); | void SystemClock_Config(void); | ||||
| static void MX_GPIO_Init(void); | static void MX_GPIO_Init(void); | ||||
| static void MX_DMA_Init(void); | |||||
| static void MX_USART1_UART_Init(void); | static void MX_USART1_UART_Init(void); | ||||
| /* USER CODE BEGIN PFP */ | /* USER CODE BEGIN PFP */ | ||||
| @@ -89,6 +98,7 @@ int main(void) | |||||
| /* Initialize all configured peripherals */ | /* Initialize all configured peripherals */ | ||||
| MX_GPIO_Init(); | MX_GPIO_Init(); | ||||
| MX_DMA_Init(); | |||||
| MX_USB_DEVICE_Init(); | MX_USB_DEVICE_Init(); | ||||
| MX_USART1_UART_Init(); | MX_USART1_UART_Init(); | ||||
| /* USER CODE BEGIN 2 */ | /* USER CODE BEGIN 2 */ | ||||
| @@ -102,6 +112,26 @@ int main(void) | |||||
| /* USER CODE END WHILE */ | /* USER CODE END WHILE */ | ||||
| /* USER CODE BEGIN 3 */ | /* USER CODE BEGIN 3 */ | ||||
| HAL_StatusTypeDef uart_status; | |||||
| uart_status = HAL_UART_Transmit_DMA(&huart1, | |||||
| (uint8_t *)uart1_test_message, | |||||
| sizeof(uart1_test_message) - 1U); | |||||
| if (uart_status == HAL_OK) | |||||
| { | |||||
| uart1_tx_ok_count++; | |||||
| } | |||||
| else if (uart_status == HAL_BUSY) | |||||
| { | |||||
| uart1_tx_busy_count++; | |||||
| } | |||||
| else | |||||
| { | |||||
| uart1_tx_error_count++; | |||||
| } | |||||
| HAL_Delay(1000U); | |||||
| } | } | ||||
| /* USER CODE END 3 */ | /* USER CODE END 3 */ | ||||
| } | } | ||||
| @@ -188,6 +218,25 @@ static void MX_USART1_UART_Init(void) | |||||
| } | } | ||||
| /** | |||||
| * Enable DMA controller clock | |||||
| */ | |||||
| static void MX_DMA_Init(void) | |||||
| { | |||||
| /* DMA controller clock enable */ | |||||
| __HAL_RCC_DMA2_CLK_ENABLE(); | |||||
| /* DMA interrupt init */ | |||||
| /* DMA2_Stream2_IRQn interrupt configuration */ | |||||
| HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0); | |||||
| HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); | |||||
| /* DMA2_Stream7_IRQn interrupt configuration */ | |||||
| HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 5, 0); | |||||
| HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); | |||||
| } | |||||
| /** | /** | ||||
| * @brief GPIO Initialization Function | * @brief GPIO Initialization Function | ||||
| * @param None | * @param None | ||||
| @@ -210,6 +259,14 @@ static void MX_GPIO_Init(void) | |||||
| /* USER CODE BEGIN 4 */ | /* USER CODE BEGIN 4 */ | ||||
| void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) | |||||
| { | |||||
| if (huart->Instance == USART1) | |||||
| { | |||||
| uart1_tx_complete_count++; | |||||
| } | |||||
| } | |||||
| /* USER CODE END 4 */ | /* USER CODE END 4 */ | ||||
| /** | /** | ||||
| @@ -22,6 +22,9 @@ | |||||
| /* USER CODE BEGIN Includes */ | /* USER CODE BEGIN Includes */ | ||||
| /* USER CODE END Includes */ | /* USER CODE END Includes */ | ||||
| extern DMA_HandleTypeDef hdma_usart1_rx; | |||||
| extern DMA_HandleTypeDef hdma_usart1_tx; | |||||
| /* Private typedef -----------------------------------------------------------*/ | /* Private typedef -----------------------------------------------------------*/ | ||||
| /* USER CODE BEGIN TD */ | /* USER CODE BEGIN TD */ | ||||
| @@ -105,8 +108,45 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) | |||||
| GPIO_InitStruct.Alternate = GPIO_AF7_USART1; | GPIO_InitStruct.Alternate = GPIO_AF7_USART1; | ||||
| HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | ||||
| /* USART1 DMA Init */ | |||||
| /* USART1_RX Init */ | |||||
| hdma_usart1_rx.Instance = DMA2_Stream2; | |||||
| hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; | |||||
| 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_NORMAL; | |||||
| hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; | |||||
| hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; | |||||
| if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) | |||||
| { | |||||
| Error_Handler(); | |||||
| } | |||||
| __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx); | |||||
| /* USART1_TX Init */ | |||||
| hdma_usart1_tx.Instance = DMA2_Stream7; | |||||
| hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; | |||||
| 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; | |||||
| hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; | |||||
| if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) | |||||
| { | |||||
| Error_Handler(); | |||||
| } | |||||
| __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx); | |||||
| /* USART1 interrupt Init */ | /* USART1 interrupt Init */ | ||||
| HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); | |||||
| HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); | |||||
| HAL_NVIC_EnableIRQ(USART1_IRQn); | HAL_NVIC_EnableIRQ(USART1_IRQn); | ||||
| /* USER CODE BEGIN USART1_MspInit 1 */ | /* USER CODE BEGIN USART1_MspInit 1 */ | ||||
| @@ -138,6 +178,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) | |||||
| */ | */ | ||||
| HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); | HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); | ||||
| /* USART1 DMA DeInit */ | |||||
| HAL_DMA_DeInit(huart->hdmarx); | |||||
| HAL_DMA_DeInit(huart->hdmatx); | |||||
| /* USART1 interrupt DeInit */ | /* USART1 interrupt DeInit */ | ||||
| HAL_NVIC_DisableIRQ(USART1_IRQn); | HAL_NVIC_DisableIRQ(USART1_IRQn); | ||||
| /* USER CODE BEGIN USART1_MspDeInit 1 */ | /* USER CODE BEGIN USART1_MspDeInit 1 */ | ||||
| @@ -56,6 +56,8 @@ | |||||
| /* External variables --------------------------------------------------------*/ | /* External variables --------------------------------------------------------*/ | ||||
| extern PCD_HandleTypeDef hpcd_USB_OTG_FS; | extern PCD_HandleTypeDef hpcd_USB_OTG_FS; | ||||
| extern DMA_HandleTypeDef hdma_usart1_rx; | |||||
| extern DMA_HandleTypeDef hdma_usart1_tx; | |||||
| extern UART_HandleTypeDef huart1; | extern UART_HandleTypeDef huart1; | ||||
| /* USER CODE BEGIN EV */ | /* USER CODE BEGIN EV */ | ||||
| @@ -214,6 +216,20 @@ void USART1_IRQHandler(void) | |||||
| /* USER CODE END USART1_IRQn 1 */ | /* USER CODE END USART1_IRQn 1 */ | ||||
| } | } | ||||
| /** | |||||
| * @brief This function handles DMA2 stream2 global interrupt. | |||||
| */ | |||||
| void DMA2_Stream2_IRQHandler(void) | |||||
| { | |||||
| /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ | |||||
| /* USER CODE END DMA2_Stream2_IRQn 0 */ | |||||
| HAL_DMA_IRQHandler(&hdma_usart1_rx); | |||||
| /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ | |||||
| /* USER CODE END DMA2_Stream2_IRQn 1 */ | |||||
| } | |||||
| /** | /** | ||||
| * @brief This function handles USB On The Go FS global interrupt. | * @brief This function handles USB On The Go FS global interrupt. | ||||
| */ | */ | ||||
| @@ -228,6 +244,20 @@ void OTG_FS_IRQHandler(void) | |||||
| /* USER CODE END OTG_FS_IRQn 1 */ | /* USER CODE END OTG_FS_IRQn 1 */ | ||||
| } | } | ||||
| /** | |||||
| * @brief This function handles DMA2 stream7 global interrupt. | |||||
| */ | |||||
| void DMA2_Stream7_IRQHandler(void) | |||||
| { | |||||
| /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */ | |||||
| /* USER CODE END DMA2_Stream7_IRQn 0 */ | |||||
| HAL_DMA_IRQHandler(&hdma_usart1_tx); | |||||
| /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */ | |||||
| /* USER CODE END DMA2_Stream7_IRQn 1 */ | |||||
| } | |||||
| /* USER CODE BEGIN 1 */ | /* USER CODE BEGIN 1 */ | ||||
| /* USER CODE END 1 */ | /* USER CODE END 1 */ | ||||
| @@ -2,18 +2,42 @@ | |||||
| CAD.formats= | CAD.formats= | ||||
| CAD.pinconfig= | CAD.pinconfig= | ||||
| CAD.provider= | CAD.provider= | ||||
| Dma.Request0=USART1_RX | |||||
| Dma.Request1=USART1_TX | |||||
| Dma.RequestsNb=2 | |||||
| Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY | |||||
| Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE | |||||
| Dma.USART1_RX.0.Instance=DMA2_Stream2 | |||||
| Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE | |||||
| Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE | |||||
| Dma.USART1_RX.0.Mode=DMA_NORMAL | |||||
| Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE | |||||
| Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE | |||||
| Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW | |||||
| Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode | |||||
| Dma.USART1_TX.1.Direction=DMA_MEMORY_TO_PERIPH | |||||
| Dma.USART1_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE | |||||
| Dma.USART1_TX.1.Instance=DMA2_Stream7 | |||||
| Dma.USART1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE | |||||
| Dma.USART1_TX.1.MemInc=DMA_MINC_ENABLE | |||||
| Dma.USART1_TX.1.Mode=DMA_NORMAL | |||||
| Dma.USART1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE | |||||
| Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE | |||||
| Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW | |||||
| Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode | |||||
| File.Version=6 | File.Version=6 | ||||
| GPIO.groupedBy= | GPIO.groupedBy= | ||||
| KeepUserPlacement=false | KeepUserPlacement=false | ||||
| Mcu.CPN=STM32F407IGT6 | Mcu.CPN=STM32F407IGT6 | ||||
| Mcu.Family=STM32F4 | Mcu.Family=STM32F4 | ||||
| Mcu.IP0=NVIC | |||||
| Mcu.IP1=RCC | |||||
| Mcu.IP2=SYS | |||||
| Mcu.IP3=USART1 | |||||
| Mcu.IP4=USB_DEVICE | |||||
| Mcu.IP5=USB_OTG_FS | |||||
| Mcu.IPNb=6 | |||||
| Mcu.IP0=DMA | |||||
| Mcu.IP1=NVIC | |||||
| Mcu.IP2=RCC | |||||
| Mcu.IP3=SYS | |||||
| Mcu.IP4=USART1 | |||||
| Mcu.IP5=USB_DEVICE | |||||
| Mcu.IP6=USB_OTG_FS | |||||
| Mcu.IPNb=7 | |||||
| Mcu.Name=STM32F407I(E-G)Tx | Mcu.Name=STM32F407I(E-G)Tx | ||||
| Mcu.Package=LQFP176 | Mcu.Package=LQFP176 | ||||
| Mcu.Pin0=PH0-OSC_IN | Mcu.Pin0=PH0-OSC_IN | ||||
| @@ -31,6 +55,8 @@ Mcu.UserName=STM32F407IGTx | |||||
| MxCube.Version=6.17.0 | MxCube.Version=6.17.0 | ||||
| MxDb.Version=DB.6.0.170 | MxDb.Version=DB.6.0.170 | ||||
| NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | ||||
| NVIC.DMA2_Stream2_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true | |||||
| NVIC.DMA2_Stream7_IRQn=true\:5\:0\:true\:false\:true\:false\:true\:true | |||||
| NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | ||||
| NVIC.ForceEnableDMAVector=true | NVIC.ForceEnableDMAVector=true | ||||
| NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | ||||
| @@ -41,7 +67,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | |||||
| NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 | NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 | ||||
| NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | ||||
| NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false | NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false | ||||
| NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true | |||||
| NVIC.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true | |||||
| NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false | ||||
| PA10.Mode=Asynchronous | PA10.Mode=Asynchronous | ||||
| PA10.Signal=USART1_RX | PA10.Signal=USART1_RX | ||||
| @@ -96,7 +122,7 @@ ProjectManager.ToolChainLocation= | |||||
| ProjectManager.UAScriptAfterPath= | ProjectManager.UAScriptAfterPath= | ||||
| ProjectManager.UAScriptBeforePath= | ProjectManager.UAScriptBeforePath= | ||||
| ProjectManager.UnderRoot=false | ProjectManager.UnderRoot=false | ||||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true | |||||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,5-MX_USART1_UART_Init-USART1-false-HAL-true | |||||
| RCC.48MHZClocksFreq_Value=48000000 | RCC.48MHZClocksFreq_Value=48000000 | ||||
| RCC.AHBFreq_Value=168000000 | RCC.AHBFreq_Value=168000000 | ||||
| RCC.APB1CLKDivider=RCC_HCLK_DIV4 | RCC.APB1CLKDivider=RCC_HCLK_DIV4 | ||||