You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.7 KiB

12 months ago
12 months ago
12 months ago
  1. #pragma once
  2. #include <stddef.h>
  3. #include <stdio.h>
  4. #include "stm32basic/zsdk.hpp"
  5. #include "stm32halport/stm32halport.hpp"
  6. namespace iflytop {
  7. class HalUtils {
  8. public:
  9. static void uartdmainit(UART_HandleTypeDef* uart, DMA_HandleTypeDef* rxdma, uint32_t rxdmach, DMA_HandleTypeDef* txdma, uint32_t txdmach) {
  10. rxdma->Instance = getDmaStreamTypeDef(rxdma);
  11. rxdma->Init.Channel = rxdmach;
  12. rxdma->Init.Direction = DMA_PERIPH_TO_MEMORY;
  13. rxdma->Init.PeriphInc = DMA_PINC_DISABLE;
  14. rxdma->Init.MemInc = DMA_MINC_ENABLE;
  15. rxdma->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  16. rxdma->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  17. rxdma->Init.Mode = DMA_NORMAL;
  18. rxdma->Init.Priority = DMA_PRIORITY_LOW;
  19. rxdma->Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  20. ZASSERT(rxdma->Instance);
  21. if (HAL_DMA_Init(rxdma) != HAL_OK) {
  22. Error_Handler();
  23. }
  24. __HAL_LINKDMA(uart, hdmarx, *rxdma);
  25. txdma->Instance = getDmaStreamTypeDef(txdma);
  26. txdma->Init.Channel = txdmach;
  27. txdma->Init.Direction = DMA_MEMORY_TO_PERIPH;
  28. txdma->Init.PeriphInc = DMA_PINC_DISABLE;
  29. txdma->Init.MemInc = DMA_MINC_ENABLE;
  30. txdma->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  31. txdma->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  32. txdma->Init.Mode = DMA_NORMAL;
  33. txdma->Init.Priority = DMA_PRIORITY_LOW;
  34. txdma->Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  35. ZASSERT(rxdma->Instance);
  36. if (HAL_DMA_Init(txdma) != HAL_OK) {
  37. Error_Handler();
  38. }
  39. __HAL_LINKDMA(uart, hdmatx, *txdma);
  40. }
  41. };
  42. } // namespace iflytop