ciu32f003_std_uart(2).c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_uart.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief UART STD库驱动。
  6. * 实现UART初始化等API。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /************************************************************************************************/
  16. /**
  17. * @addtogroup CIU32F003_STD_Driver
  18. * @{
  19. */
  20. /**
  21. * @addtogroup UART
  22. * @{
  23. *
  24. */
  25. /************************************************************************************************/
  26. /*------------------------------------------includes--------------------------------------------*/
  27. #include "ciu32f003_std.h"
  28. #ifdef STD_UART_PERIPHERAL_USED
  29. /*-------------------------------------------functions------------------------------------------*/
  30. /************************************************************************************************/
  31. /**
  32. * @addtogroup UART_External_Functions
  33. * @{
  34. *
  35. */
  36. /************************************************************************************************/
  37. /**
  38. * @brief UART初始化
  39. * @param uartx UART外设
  40. * @param uart_init_param UART初始化结构体
  41. * @retval 无
  42. */
  43. void std_uart_init(UART_t *uartx,std_uart_init_t *uart_init_param)
  44. {
  45. uint32_t pclk;
  46. /* 设置 UART 字长 、收发模式、校验*/
  47. MODIFY_REG(uartx->CR1,
  48. (UART_CR1_WL|UART_CR1_TE|UART_CR1_RE|UART_CR1_PTS|UART_CR1_PEN),
  49. (uart_init_param->wordlength|uart_init_param->direction|uart_init_param->parity));
  50. /* 设置UART停止位 */
  51. std_uart_set_stopbits(uartx,uart_init_param->stopbits);
  52. /* 获取UART时钟频率 */
  53. pclk = std_rcc_get_pclkfreq();
  54. /* BRR取值范围[0x10,0xFFFF] */
  55. if(uart_init_param->baudrate != 0)
  56. {
  57. uartx->BRR = (pclk + (uart_init_param->baudrate>>1))/uart_init_param->baudrate;
  58. }
  59. }
  60. /**
  61. * @brief UART去初始化
  62. * @param uartx UART外设
  63. * @retval 无
  64. */
  65. void std_uart_deinit(UART_t *uartx)
  66. {
  67. /* UART 的RCC时钟复位 */
  68. if(uartx == UART1)
  69. {
  70. std_rcc_apb2_reset(RCC_PERIPH_RESET_UART1);
  71. }
  72. else if(uartx == UART2)
  73. {
  74. std_rcc_apb1_reset(RCC_PERIPH_RESET_UART2);
  75. }
  76. }
  77. /**
  78. * @brief UART结构体初始化
  79. * @param uart_init_struct UART初始化结构体
  80. * @retval 无
  81. */
  82. void std_uart_struct_init(std_uart_init_t *uart_init_struct)
  83. {
  84. uart_init_struct->baudrate = 115200;
  85. uart_init_struct->wordlength = UART_WORDLENGTH_8BITS;
  86. uart_init_struct->stopbits = UART_STOPBITS_1;
  87. uart_init_struct->direction = UART_DIRECTION_SEND_RECEIVE;
  88. uart_init_struct->parity = UART_PARITY_NONE;
  89. }
  90. /**
  91. * @}
  92. */
  93. #endif /* STD_UART_PERIPHERAL_USED */
  94. /**
  95. * @}
  96. */
  97. /**
  98. * @}
  99. */