drv_usart_v2.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-06-01 KyleChan first version
  9. */
  10. #ifndef __DRV_USART_V2_H__
  11. #define __DRV_USART_V2_H__
  12. #include <rtthread.h>
  13. #include <rtdevice.h>
  14. #include <rthw.h>
  15. #include <drv_common.h>
  16. #include <drv_dma.h>
  17. #include <drv_config.h>
  18. int rt_hw_usart_init(void);
  19. #if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32WL) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32F0) \
  20. || defined(SOC_SERIES_STM32L0) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L5) \
  21. || defined(SOC_SERIES_STM32G4) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32F3) \
  22. || defined(SOC_SERIES_STM32U5) || defined(SOC_SERIES_STM32H5) || defined(SOC_SERIES_STM32H7RS)
  23. #define UART_SET_TDR(__HANDLE__, __DATA__) ((__HANDLE__)->Instance->TDR = (__DATA__))
  24. #define UART_GET_RDR(__HANDLE__, MASK) ((__HANDLE__)->Instance->RDR & MASK)
  25. #else
  26. #define UART_SET_TDR(__HANDLE__, __DATA__) ((__HANDLE__)->Instance->DR = (__DATA__))
  27. #define UART_GET_RDR(__HANDLE__, MASK) ((__HANDLE__)->Instance->DR & MASK)
  28. #endif
  29. #if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32L5) || defined(SOC_SERIES_STM32WL) \
  30. || defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32L0) || defined(SOC_SERIES_STM32G0) \
  31. || defined(SOC_SERIES_STM32G4) || defined(SOC_SERIES_STM32WB)|| defined(SOC_SERIES_STM32F3) || defined(SOC_SERIES_STM32U5) \
  32. || defined(SOC_SERIES_STM32H5) || defined(SOC_SERIES_STM32H7RS)
  33. #define UART_INSTANCE_CLEAR_FUNCTION __HAL_UART_CLEAR_FLAG
  34. #elif defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32H7) \
  35. || defined(SOC_SERIES_STM32MP1)
  36. #define UART_INSTANCE_CLEAR_FUNCTION __HAL_UART_CLEAR_IT
  37. #endif
  38. #define UART_RX_DMA_IT_IDLE_FLAG 0x00
  39. #define UART_RX_DMA_IT_HT_FLAG 0x01
  40. #define UART_RX_DMA_IT_TC_FLAG 0x02
  41. /* stm32 config class */
  42. struct stm32_uart_config
  43. {
  44. const char *name;
  45. USART_TypeDef *Instance;
  46. IRQn_Type irq_type;
  47. #ifdef RT_SERIAL_USING_DMA
  48. struct dma_config *dma_rx;
  49. struct dma_config *dma_tx;
  50. #endif
  51. };
  52. /* stm32 uart dirver class */
  53. struct stm32_uart
  54. {
  55. UART_HandleTypeDef handle;
  56. struct stm32_uart_config *config;
  57. #ifdef RT_SERIAL_USING_DMA
  58. struct
  59. {
  60. DMA_HandleTypeDef handle;
  61. rt_size_t remaining_cnt;
  62. } dma_rx;
  63. struct
  64. {
  65. DMA_HandleTypeDef handle;
  66. } dma_tx;
  67. #endif
  68. rt_uint16_t uart_dma_flag;
  69. struct rt_serial_device serial;
  70. };
  71. #endif /* __DRV_USART_H__ */