diff --git a/Power_Pico/Core/Src/stm32f4xx_it.c b/Power_Pico/Core/Src/stm32f4xx_it.c index cea890b..9a49806 100644 --- a/Power_Pico/Core/Src/stm32f4xx_it.c +++ b/Power_Pico/Core/Src/stm32f4xx_it.c @@ -22,6 +22,7 @@ #include "stm32f4xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "usart.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -55,8 +56,11 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ +extern DMA_HandleTypeDef hdma_adc1; extern DMA_HandleTypeDef hdma_spi2_tx; extern TIM_HandleTypeDef htim1; +extern DMA_HandleTypeDef hdma_usart6_rx; +extern UART_HandleTypeDef huart6; extern TIM_HandleTypeDef htim11; /* USER CODE BEGIN EV */ @@ -190,6 +194,54 @@ void TIM1_TRG_COM_TIM11_IRQHandler(void) /* USER CODE END TIM1_TRG_COM_TIM11_IRQn 1 */ } +/** + * @brief This function handles DMA2 stream0 global interrupt. + */ +void DMA2_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */ + + /* USER CODE END DMA2_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc1); + /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */ + + /* USER CODE END DMA2_Stream0_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream1 global interrupt. + */ +void DMA2_Stream1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */ + + /* USER CODE END DMA2_Stream1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart6_rx); + /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */ + + /* USER CODE END DMA2_Stream1_IRQn 1 */ +} + +/** + * @brief This function handles USART6 global interrupt. + */ +void USART6_IRQHandler(void) +{ + /* USER CODE BEGIN USART6_IRQn 0 */ + if(__HAL_UART_GET_FLAG(&huart6, UART_FLAG_IDLE) != RESET) + { + __HAL_UART_CLEAR_FLAG(&huart6, UART_FLAG_IDLE); + HAL_UART_DMAStop(&huart6); + HAL_UART_Receive_DMA(&huart6, uart_receive_str, USART_RX_BUFFER_SIZE); + } + + /* USER CODE END USART6_IRQn 0 */ + HAL_UART_IRQHandler(&huart6); + /* USER CODE BEGIN USART6_IRQn 1 */ + + /* USER CODE END USART6_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Power_Pico/Core/Src/usart.c b/Power_Pico/Core/Src/usart.c index 360b655..4992a14 100644 --- a/Power_Pico/Core/Src/usart.c +++ b/Power_Pico/Core/Src/usart.c @@ -22,9 +22,13 @@ /* USER CODE BEGIN 0 */ +// memeory for receive string +uint8_t uart_receive_str[USART_RX_BUFFER_SIZE + 1]; + /* USER CODE END 0 */ UART_HandleTypeDef huart6; +DMA_HandleTypeDef hdma_usart6_rx; /* USART6 init function */ @@ -80,6 +84,28 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Alternate = GPIO_AF8_USART6; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /* USART6 DMA Init */ + /* USART6_RX Init */ + hdma_usart6_rx.Instance = DMA2_Stream1; + hdma_usart6_rx.Init.Channel = DMA_CHANNEL_5; + hdma_usart6_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart6_rx.Init.PeriphInc = DMA_PINC_DISABLE; + 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.Priority = DMA_PRIORITY_LOW; + hdma_usart6_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart6_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart6_rx); + + /* USART6 interrupt Init */ + HAL_NVIC_SetPriority(USART6_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART6_IRQn); /* USER CODE BEGIN USART6_MspInit 1 */ /* USER CODE END USART6_MspInit 1 */ @@ -103,6 +129,11 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); + /* USART6 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + + /* USART6 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART6_IRQn); /* USER CODE BEGIN USART6_MspDeInit 1 */ /* USER CODE END USART6_MspDeInit 1 */ @@ -111,4 +142,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) /* USER CODE BEGIN 1 */ +//串口6发送 +void UART6_TX_Send(uint8_t *buffer, uint16_t length) +{ + HAL_UART_Transmit(&huart6, buffer, length, 1); +} + /* USER CODE END 1 */