#pragma once #include #include #include "stm32basic/zsdk.hpp" #include "stm32halport/stm32halport.hpp" namespace iflytop { class HalUtils { public: static void uartdmainit(UART_HandleTypeDef* uart, DMA_HandleTypeDef* rxdma, uint32_t rxdmach, DMA_HandleTypeDef* txdma, uint32_t txdmach) { rxdma->Instance = getDmaStreamTypeDef(rxdma); rxdma->Init.Channel = rxdmach; rxdma->Init.Direction = DMA_PERIPH_TO_MEMORY; rxdma->Init.PeriphInc = DMA_PINC_DISABLE; rxdma->Init.MemInc = DMA_MINC_ENABLE; rxdma->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; rxdma->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; rxdma->Init.Mode = DMA_NORMAL; rxdma->Init.Priority = DMA_PRIORITY_LOW; rxdma->Init.FIFOMode = DMA_FIFOMODE_DISABLE; ZASSERT(rxdma->Instance); if (HAL_DMA_Init(rxdma) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(uart, hdmarx, *rxdma); txdma->Instance = getDmaStreamTypeDef(txdma); txdma->Init.Channel = txdmach; txdma->Init.Direction = DMA_MEMORY_TO_PERIPH; txdma->Init.PeriphInc = DMA_PINC_DISABLE; txdma->Init.MemInc = DMA_MINC_ENABLE; txdma->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; txdma->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; txdma->Init.Mode = DMA_NORMAL; txdma->Init.Priority = DMA_PRIORITY_LOW; txdma->Init.FIFOMode = DMA_FIFOMODE_DISABLE; ZASSERT(rxdma->Instance); if (HAL_DMA_Init(txdma) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(uart, hdmatx, *txdma); } }; } // namespace iflytop