diff --git a/Core/Inc/main.h b/Core/Inc/main.h index c972d41..88f175e 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -57,6 +57,8 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define LED0_Pin GPIO_PIN_1 +#define LED0_GPIO_Port GPIOA /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ diff --git a/Core/Inc/stm32h7xx_hal_conf.h b/Core/Inc/stm32h7xx_hal_conf.h index af6a6cf..a425f3d 100644 --- a/Core/Inc/stm32h7xx_hal_conf.h +++ b/Core/Inc/stm32h7xx_hal_conf.h @@ -215,7 +215,7 @@ #define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ #define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ #define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 1U /* UART register callback enabled */ #define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ #define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 4b3e391..7ec74a0 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -55,10 +55,11 @@ void DebugMon_Handler(void); void PVD_AVD_IRQHandler(void); void FLASH_IRQHandler(void); void RCC_IRQHandler(void); +void DMA1_Stream0_IRQHandler(void); void TIM7_IRQHandler(void); +void HASH_RNG_IRQHandler(void); void FPU_IRQHandler(void); void HSEM1_IRQHandler(void); -void LPUART1_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Core/Src/lwesp_ll.c b/Core/Src/lwesp_ll.c index a2cd436..78034f2 100644 --- a/Core/Src/lwesp_ll.c +++ b/Core/Src/lwesp_ll.c @@ -8,26 +8,50 @@ #include "cmsis_os.h" #define UART_TIMEOUT 1000 +#define UART_BUFFER_SIZE 1024 + #define HEAP_SIZE 4096 -extern UART_HandleTypeDef huart1; +#define UART_HANDLE huart4 + +extern UART_HandleTypeDef UART_HANDLE; + +static uint8_t s_uart_rxbuf[UART_BUFFER_SIZE]; static uint8_t s_lwesp_heap[HEAP_SIZE]; static uint8_t s_initialized; static osThreadId_t usart_ll_thread_id; static osMessageQueueId_t usart_ll_mbox_id; +void usart_rx_event_callback(UART_HandleTypeDef *huart, uint16_t Pos) { + // Count pos in buffer, notify UART LL thread. +} + +void usart_rx_cplt_callback(UART_HandleTypeDef *huart) { + // Circular DMA is used, so no complete event will be received normally +} + +void usart_error_callback(UART_HandleTypeDef *huart) { + // Error encountered, DMA aborted. +} + static void usart_ll_thread(void *arg) { for (;;) { } } static void configure_uart(uint32_t baudrate) { - // + // Register callbacks + HAL_UART_RegisterCallback(&UART_HANDLE, HAL_UART_RX_COMPLETE_CB_ID, usart_rx_cplt_callback); + HAL_UART_RegisterCallback(&UART_HANDLE, HAL_UART_ERROR_CB_ID, usart_error_callback); + HAL_UART_RegisterRxEventCallback(&UART_HANDLE, usart_rx_event_callback); + + // Enable DMA Rx + HAL_UART_Receive_DMA(&UART_HANDLE, s_uart_rxbuf, UART_BUFFER_SIZE); } static size_t send_data(const void *data, size_t len) { - HAL_UART_Transmit(&huart1, (uint8_t *)data, len, 1000); + HAL_UART_Transmit(&UART_HANDLE, (uint8_t *)data, len, 1000); return len; } @@ -36,11 +60,14 @@ lwespr_t lwesp_ll_init(lwesp_ll_t *ll) { lwesp_mem_region_t mem_regions[] = {{s_lwesp_heap, HEAP_SIZE}}; if (!s_initialized) { + // Internal heap management lwesp_mem_assignmemory(mem_regions, LWESP_ARRAYSIZE(mem_regions)); + // Initialize callbacks ll->send_fn = send_data; } + // Configure UART device and RX ring buffer configure_uart(ll->uart.baudrate); if(!s_initialized) { diff --git a/Core/Src/main.c b/Core/Src/main.c index 78f7043..7008127 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -41,10 +41,12 @@ /* Private variables ---------------------------------------------------------*/ -UART_HandleTypeDef hlpuart1; - RNG_HandleTypeDef hrng; +UART_HandleTypeDef huart4; +UART_HandleTypeDef huart1; +DMA_HandleTypeDef hdma_uart4_rx; + /* Definitions for defaultTask */ osThreadId_t defaultTaskHandle; const osThreadAttr_t defaultTask_attributes = { @@ -59,8 +61,10 @@ const osThreadAttr_t defaultTask_attributes = { /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); -static void MX_LPUART1_UART_Init(void); static void MX_RNG_Init(void); +static void MX_DMA_Init(void); +static void MX_UART4_Init(void); +static void MX_USART1_UART_Init(void); void StartDefaultTask(void *argument); /* USER CODE BEGIN PFP */ @@ -100,8 +104,10 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_LPUART1_UART_Init(); MX_RNG_Init(); + MX_DMA_Init(); + MX_UART4_Init(); + MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -211,54 +217,6 @@ void SystemClock_Config(void) HAL_RCC_EnableCSS(); } -/** - * @brief LPUART1 Initialization Function - * @param None - * @retval None - */ -static void MX_LPUART1_UART_Init(void) -{ - - /* USER CODE BEGIN LPUART1_Init 0 */ - - /* USER CODE END LPUART1_Init 0 */ - - /* USER CODE BEGIN LPUART1_Init 1 */ - - /* USER CODE END LPUART1_Init 1 */ - hlpuart1.Instance = LPUART1; - hlpuart1.Init.BaudRate = 115200; - hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; - hlpuart1.Init.StopBits = UART_STOPBITS_1; - hlpuart1.Init.Parity = UART_PARITY_NONE; - hlpuart1.Init.Mode = UART_MODE_TX_RX; - hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; - hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; - hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; - hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; - hlpuart1.FifoMode = UART_FIFOMODE_DISABLE; - if (HAL_UART_Init(&hlpuart1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN LPUART1_Init 2 */ - - /* USER CODE END LPUART1_Init 2 */ - -} - /** * @brief RNG Initialization Function * @param None @@ -286,6 +244,118 @@ static void MX_RNG_Init(void) } +/** + * @brief UART4 Initialization Function + * @param None + * @retval None + */ +static void MX_UART4_Init(void) +{ + + /* USER CODE BEGIN UART4_Init 0 */ + + /* USER CODE END UART4_Init 0 */ + + /* USER CODE BEGIN UART4_Init 1 */ + + /* USER CODE END UART4_Init 1 */ + huart4.Instance = UART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX_RX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART4_Init 2 */ + + /* USER CODE END UART4_Init 2 */ + +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + +} + /** * @brief GPIO Initialization Function * @param None @@ -293,11 +363,24 @@ static void MX_RNG_Init(void) */ static void MX_GPIO_Init(void) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : LED0_Pin */ + GPIO_InitStruct.Pin = LED0_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStruct); } @@ -318,7 +401,8 @@ void StartDefaultTask(void *argument) /* Infinite loop */ for(;;) { - osDelay(1); + HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); + osDelay(250); } /* USER CODE END 5 */ } diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index 3bf2cb2..88acdc5 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -23,6 +23,7 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_uart4_rx; /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ @@ -94,86 +95,6 @@ void HAL_MspInit(void) /* USER CODE END MspInit 1 */ } -/** -* @brief UART MSP Initialization -* This function configures the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspInit(UART_HandleTypeDef* huart) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(huart->Instance==LPUART1) - { - /* USER CODE BEGIN LPUART1_MspInit 0 */ - - /* USER CODE END LPUART1_MspInit 0 */ - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; - PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_D3PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_LPUART1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**LPUART1 GPIO Configuration - PA9 ------> LPUART1_TX - PA10 ------> LPUART1_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF3_LPUART; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* LPUART1 interrupt Init */ - HAL_NVIC_SetPriority(LPUART1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(LPUART1_IRQn); - /* USER CODE BEGIN LPUART1_MspInit 1 */ - - /* USER CODE END LPUART1_MspInit 1 */ - } - -} - -/** -* @brief UART MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) -{ - if(huart->Instance==LPUART1) - { - /* USER CODE BEGIN LPUART1_MspDeInit 0 */ - - /* USER CODE END LPUART1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_LPUART1_CLK_DISABLE(); - - /**LPUART1 GPIO Configuration - PA9 ------> LPUART1_TX - PA10 ------> LPUART1_RX - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); - - /* LPUART1 interrupt DeInit */ - HAL_NVIC_DisableIRQ(LPUART1_IRQn); - /* USER CODE BEGIN LPUART1_MspDeInit 1 */ - - /* USER CODE END LPUART1_MspDeInit 1 */ - } - -} - /** * @brief RNG MSP Initialization * This function configures the hardware resources used in this example @@ -199,6 +120,9 @@ void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) /* Peripheral clock enable */ __HAL_RCC_RNG_CLK_ENABLE(); + /* RNG interrupt Init */ + HAL_NVIC_SetPriority(HASH_RNG_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(HASH_RNG_IRQn); /* USER CODE BEGIN RNG_MspInit 1 */ /* USER CODE END RNG_MspInit 1 */ @@ -221,6 +145,9 @@ void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) /* USER CODE END RNG_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_RNG_CLK_DISABLE(); + + /* RNG interrupt DeInit */ + HAL_NVIC_DisableIRQ(HASH_RNG_IRQn); /* USER CODE BEGIN RNG_MspDeInit 1 */ /* USER CODE END RNG_MspDeInit 1 */ @@ -228,6 +155,168 @@ void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) } +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(huart->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspInit 0 */ + + /* USER CODE END UART4_MspInit 0 */ + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART4; + PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_UART4_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**UART4 GPIO Configuration + PB14 ------> UART4_RTS + PB15 ------> UART4_CTS + PD0 ------> UART4_RX + PD1 ------> UART4_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_UART4; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_UART4; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* UART4 DMA Init */ + /* UART4_RX Init */ + hdma_uart4_rx.Instance = DMA1_Stream0; + hdma_uart4_rx.Init.Request = DMA_REQUEST_UART4_RX; + hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart4_rx.Init.Mode = DMA_CIRCULAR; + hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(huart,hdmarx,hdma_uart4_rx); + + /* USER CODE BEGIN UART4_MspInit 1 */ + + /* USER CODE END UART4_MspInit 1 */ + } + else if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspDeInit 0 */ + + /* USER CODE END UART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART4_CLK_DISABLE(); + + /**UART4 GPIO Configuration + PB14 ------> UART4_RTS + PB15 ------> UART4_CTS + PD0 ------> UART4_RX + PD1 ------> UART4_TX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1); + + /* UART4 DMA DeInit */ + HAL_DMA_DeInit(huart->hdmarx); + /* USER CODE BEGIN UART4_MspDeInit 1 */ + + /* USER CODE END UART4_MspDeInit 1 */ + } + else if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 9ba7f20..3cb5b22 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -55,7 +55,8 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ -extern UART_HandleTypeDef hlpuart1; +extern RNG_HandleTypeDef hrng; +extern DMA_HandleTypeDef hdma_uart4_rx; extern TIM_HandleTypeDef htim7; /* USER CODE BEGIN EV */ @@ -202,6 +203,20 @@ void RCC_IRQHandler(void) /* USER CODE END RCC_IRQn 1 */ } +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_rx); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + /** * @brief This function handles TIM7 global interrupt. */ @@ -216,6 +231,20 @@ void TIM7_IRQHandler(void) /* USER CODE END TIM7_IRQn 1 */ } +/** + * @brief This function handles HASH and RNG global interrupts. + */ +void HASH_RNG_IRQHandler(void) +{ + /* USER CODE BEGIN HASH_RNG_IRQn 0 */ + + /* USER CODE END HASH_RNG_IRQn 0 */ + HAL_RNG_IRQHandler(&hrng); + /* USER CODE BEGIN HASH_RNG_IRQn 1 */ + + /* USER CODE END HASH_RNG_IRQn 1 */ +} + /** * @brief This function handles FPU global interrupt. */ @@ -243,20 +272,6 @@ void HSEM1_IRQHandler(void) /* USER CODE END HSEM1_IRQn 1 */ } -/** - * @brief This function handles LPUART1 global interrupt. - */ -void LPUART1_IRQHandler(void) -{ - /* USER CODE BEGIN LPUART1_IRQn 0 */ - - /* USER CODE END LPUART1_IRQn 0 */ - HAL_UART_IRQHandler(&hlpuart1); - /* USER CODE BEGIN LPUART1_IRQn 1 */ - - /* USER CODE END LPUART1_IRQn 1 */ -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/STM32H750VBT6_LwESP.ioc b/STM32H750VBT6_LwESP.ioc index 2839e3d..c01b46e 100644 --- a/STM32H750VBT6_LwESP.ioc +++ b/STM32H750VBT6_LwESP.ioc @@ -1,23 +1,24 @@ #MicroXplorer Configuration settings - do not modify -Bdma.LPUART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY -Bdma.LPUART1_RX.0.EventEnable=DISABLE -Bdma.LPUART1_RX.0.Instance=BDMA_Channel0 -Bdma.LPUART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE -Bdma.LPUART1_RX.0.MemInc=DMA_MINC_ENABLE -Bdma.LPUART1_RX.0.Mode=DMA_CIRCULAR -Bdma.LPUART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Bdma.LPUART1_RX.0.PeriphInc=DMA_PINC_DISABLE -Bdma.LPUART1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Bdma.LPUART1_RX.0.Priority=DMA_PRIORITY_LOW -Bdma.LPUART1_RX.0.RequestNumber=1 -Bdma.LPUART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber -Bdma.LPUART1_RX.0.SignalID=NONE -Bdma.LPUART1_RX.0.SyncEnable=DISABLE -Bdma.LPUART1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT -Bdma.LPUART1_RX.0.SyncRequestNumber=1 -Bdma.LPUART1_RX.0.SyncSignalID=NONE -Bdma.Request0=LPUART1_RX -Bdma.RequestsNb=1 +Dma.Request0=UART4_RX +Dma.RequestsNb=1 +Dma.UART4_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART4_RX.0.EventEnable=DISABLE +Dma.UART4_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART4_RX.0.Instance=DMA1_Stream0 +Dma.UART4_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART4_RX.0.MemInc=DMA_MINC_ENABLE +Dma.UART4_RX.0.Mode=DMA_CIRCULAR +Dma.UART4_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART4_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.UART4_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.UART4_RX.0.Priority=DMA_PRIORITY_LOW +Dma.UART4_RX.0.RequestNumber=1 +Dma.UART4_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.UART4_RX.0.SignalID=NONE +Dma.UART4_RX.0.SyncEnable=DISABLE +Dma.UART4_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.UART4_RX.0.SyncRequestNumber=1 +Dma.UART4_RX.0.SyncSignalID=NONE FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configENABLE_FPU FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL FREERTOS.configENABLE_FPU=1 @@ -25,39 +26,41 @@ FREERTOS.configTOTAL_HEAP_SIZE=65536 File.Version=6 GPIO.groupedBy=Group By Peripherals KeepUserPlacement=false -LPUART1.BaudRate=115200 -LPUART1.IPParameters=BaudRate Mcu.Family=STM32H7 -Mcu.IP0=BDMA -Mcu.IP1=CORTEX_M7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=DMA Mcu.IP2=FREERTOS -Mcu.IP3=LPUART1 -Mcu.IP4=NVIC -Mcu.IP5=RCC -Mcu.IP6=RNG -Mcu.IP7=SYS -Mcu.IPNb=8 +Mcu.IP3=NVIC +Mcu.IP4=RCC +Mcu.IP5=RNG +Mcu.IP6=SYS +Mcu.IP7=UART4 +Mcu.IP8=USART1 +Mcu.IPNb=9 Mcu.Name=STM32H750VBTx Mcu.Package=LQFP100 Mcu.Pin0=PC14-OSC32_IN (OSC32_IN) Mcu.Pin1=PC15-OSC32_OUT (OSC32_OUT) -Mcu.Pin10=VP_SYS_VS_tim7 +Mcu.Pin10=PD1 +Mcu.Pin11=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin12=VP_RNG_VS_RNG +Mcu.Pin13=VP_SYS_VS_tim7 Mcu.Pin2=PH0-OSC_IN (PH0) Mcu.Pin3=PH1-OSC_OUT (PH1) -Mcu.Pin4=PA9 -Mcu.Pin5=PA10 -Mcu.Pin6=PA11 -Mcu.Pin7=PA12 -Mcu.Pin8=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin9=VP_RNG_VS_RNG -Mcu.PinsNb=11 +Mcu.Pin4=PA1 +Mcu.Pin5=PB14 +Mcu.Pin6=PB15 +Mcu.Pin7=PA9 +Mcu.Pin8=PA10 +Mcu.Pin9=PD0 +Mcu.PinsNb=14 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32H750VBTx MxCube.Version=6.4.0 MxDb.Version=DB.6.0.40 -NVIC.BDMA_Channel0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.FLASH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true NVIC.FPU_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:false @@ -65,7 +68,6 @@ NVIC.ForceEnableDMAVector=true NVIC.HASH_RNG_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true NVIC.HSEM1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.LPUART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true NVIC.PVD_AVD_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true @@ -81,20 +83,38 @@ NVIC.TIM7_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true NVIC.TimeBase=TIM7_IRQn NVIC.TimeBaseIP=TIM7 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA1.GPIOParameters=GPIO_Label +PA1.GPIO_Label=LED0 +PA1.Locked=true +PA1.Signal=GPIO_Output +PA10.Locked=true PA10.Mode=Asynchronous -PA10.Signal=LPUART1_RX -PA11.Mode=CTS_RTS -PA11.Signal=LPUART1_CTS -PA12.Mode=CTS_RTS -PA12.Signal=LPUART1_RTS +PA10.Signal=USART1_RX +PA9.Locked=true PA9.Mode=Asynchronous -PA9.Signal=LPUART1_TX +PA9.Signal=USART1_TX +PB14.Locked=true +PB14.Mode=CTS_RTS +PB14.Signal=UART4_RTS +PB15.Locked=true +PB15.Mode=CTS_RTS +PB15.Signal=UART4_CTS +PC14-OSC32_IN\ (OSC32_IN).Locked=true PC14-OSC32_IN\ (OSC32_IN).Mode=LSE-External-Oscillator PC14-OSC32_IN\ (OSC32_IN).Signal=RCC_OSC32_IN +PC15-OSC32_OUT\ (OSC32_OUT).Locked=true PC15-OSC32_OUT\ (OSC32_OUT).Mode=LSE-External-Oscillator PC15-OSC32_OUT\ (OSC32_OUT).Signal=RCC_OSC32_OUT +PD0.Locked=true +PD0.Mode=Asynchronous +PD0.Signal=UART4_RX +PD1.Locked=true +PD1.Mode=Asynchronous +PD1.Signal=UART4_TX +PH0-OSC_IN\ (PH0).Locked=true PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN +PH1-OSC_OUT\ (PH1).Locked=true PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT PinOutPanel.RotationAngle=0 @@ -120,12 +140,12 @@ ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=STM32H750VBT6_LwESP.ioc ProjectManager.ProjectName=STM32H750VBT6_LwESP -ProjectManager.RegisterCallBack= +ProjectManager.RegisterCallBack=UART ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,4-MX_BDMA_Init-BDMA-false-HAL-true,5-MX_RNG_Init-RNG-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_RNG_Init-RNG-false-HAL-true,4-MX_DMA_Init-DMA-false-HAL-true,5-MX_UART4_Init-UART4-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true RCC.ADCFreq_Value=16125000 RCC.AHB12Freq_Value=150000000 RCC.AHB4Freq_Value=150000000 @@ -203,6 +223,8 @@ RCC.VCO3OutputFreq_Value=32250000 RCC.VCOInput1Freq_Value=4000000 RCC.VCOInput2Freq_Value=250000 RCC.VCOInput3Freq_Value=250000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_RNG_VS_RNG.Mode=RNG_Activate