uart.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // Copyright 2024 Stefan Kerkmann
  2. // Copyright 2021 QMK
  3. // Copyright 2024 Stefan Kerkmann
  4. // SPDX-License-Identifier: GPL-2.0-or-later
  5. #pragma once
  6. #include <stdint.h>
  7. #include <stdbool.h>
  8. #include <hal.h>
  9. #include "gpio.h"
  10. #include "chibios_config.h"
  11. // ======== DEPRECATED DEFINES - DO NOT USE ========
  12. #ifdef SERIAL_DRIVER
  13. # define UART_DRIVER SERIAL_DRIVER
  14. #endif
  15. #ifdef SD1_TX_PIN
  16. # define UART_TX_PIN SD1_TX_PIN
  17. #endif
  18. #ifdef SD1_RX_PIN
  19. # define UART_RX_PIN SD1_RX_PIN
  20. #endif
  21. #ifdef SD1_CTS_PIN
  22. # define UART_CTS_PIN SD1_CTS_PIN
  23. #endif
  24. #ifdef SD1_RTS_PIN
  25. # define UART_RTS_PIN SD1_RTS_PIN
  26. #endif
  27. #ifdef SD1_TX_PAL_MODE
  28. # define UART_TX_PAL_MODE SD1_TX_PAL_MODE
  29. #endif
  30. #ifdef SD1_RX_PAL_MODE
  31. # define UART_RX_PAL_MODE SD1_RX_PAL_MODE
  32. #endif
  33. #ifdef SD1_CTS_PAL_MODE
  34. # define UART_RTS_PAL_MODE SD1_CTS_PAL_MODE
  35. #endif
  36. #ifdef SD1_RTS_PAL_MODE
  37. # define UART_TX_PAL_MODE SD1_RTS_PAL_MODE
  38. #endif
  39. #ifdef SD1_CR1
  40. # define UART_CR1 SD1_CR1
  41. #endif
  42. #ifdef SD1_CR2
  43. # define UART_CR2 SD1_CR2
  44. #endif
  45. #ifdef SD1_CR3
  46. # define UART_CR3 SD1_CR3
  47. #endif
  48. #ifdef SD1_WRDLEN
  49. # define UART_WRDLEN SD1_WRDLEN
  50. #endif
  51. #ifdef SD1_STPBIT
  52. # define UART_STPBIT SD1_STPBIT
  53. #endif
  54. #ifdef SD1_PARITY
  55. # define UART_PARITY SD1_PARITY
  56. #endif
  57. #ifdef SD1_ATFLCT
  58. # define UART_ATFLCT SD1_ATFLCT
  59. #endif
  60. // ========
  61. #ifndef UART_DRIVER
  62. # if (HAL_USE_SERIAL == TRUE)
  63. # define UART_DRIVER SD1
  64. # elif (HAL_USE_SIO == TRUE)
  65. # define UART_DRIVER SIOD1
  66. # endif
  67. #endif
  68. #ifndef UART_TX_PIN
  69. # define UART_TX_PIN A9
  70. #endif
  71. #ifndef UART_RX_PIN
  72. # define UART_RX_PIN A10
  73. #endif
  74. #ifndef UART_CTS_PIN
  75. # define UART_CTS_PIN A11
  76. #endif
  77. #ifndef UART_RTS_PIN
  78. # define UART_RTS_PIN A12
  79. #endif
  80. #ifdef USE_GPIOV1
  81. # ifndef UART_TX_PAL_MODE
  82. # define UART_TX_PAL_MODE PAL_MODE_ALTERNATE_PUSHPULL
  83. # endif
  84. # ifndef UART_RX_PAL_MODE
  85. # define UART_RX_PAL_MODE PAL_MODE_INPUT
  86. # endif
  87. # ifndef UART_CTS_PAL_MODE
  88. # define UART_CTS_PAL_MODE PAL_MODE_INPUT
  89. # endif
  90. # ifndef UART_RTS_PAL_MODE
  91. # define UART_RTS_PAL_MODE PAL_MODE_ALTERNATE_PUSHPULL
  92. # endif
  93. #else
  94. # ifndef UART_TX_PAL_MODE
  95. # define UART_TX_PAL_MODE 7
  96. # endif
  97. # ifndef UART_RX_PAL_MODE
  98. # define UART_RX_PAL_MODE 7
  99. # endif
  100. # ifndef UART_CTS_PAL_MODE
  101. # define UART_CTS_PAL_MODE 7
  102. # endif
  103. # ifndef UART_RTS_PAL_MODE
  104. # define UART_RTS_PAL_MODE 7
  105. # endif
  106. #endif
  107. #ifndef UART_CR1
  108. # define UART_CR1 0
  109. #endif
  110. #ifndef UART_CR2
  111. # define UART_CR2 0
  112. #endif
  113. #ifndef UART_CR3
  114. # define UART_CR3 0
  115. #endif
  116. #ifndef UART_WRDLEN
  117. # define UART_WRDLEN 3
  118. #endif
  119. #ifndef UART_STPBIT
  120. # define UART_STPBIT 0
  121. #endif
  122. #ifndef UART_PARITY
  123. # define UART_PARITY 0
  124. #endif
  125. #ifndef UART_ATFLCT
  126. # define UART_ATFLCT 0
  127. #endif
  128. /**
  129. * @brief Initialize the UART driver. This function must be called only once,
  130. * before any of the below functions can be called.
  131. *
  132. * @param baud The baud rate to transmit and receive at. This may depend on the
  133. * device you are communicating with. Common values are 1200, 2400, 4800, 9600,
  134. * 19200, 38400, 57600, and 115200.
  135. */
  136. void uart_init(uint32_t baud);
  137. /**
  138. * @brief Transmit a single byte.
  139. *
  140. * @param data The byte to transmit.
  141. */
  142. void uart_write(uint8_t data);
  143. /**
  144. * @brief Receive a single byte.
  145. *
  146. * @return uint8_t The byte read from the receive buffer. This function will
  147. * block if the buffer is empty (ie. no data to read).
  148. */
  149. uint8_t uart_read(void);
  150. /**
  151. * @brief Transmit multiple bytes.
  152. *
  153. * @param data A pointer to the data to write from.
  154. * @param length The number of bytes to write. Take care not to overrun the
  155. * length of `data`.
  156. */
  157. void uart_transmit(const uint8_t *data, uint16_t length);
  158. /**
  159. * @brief Receive multiple bytes.
  160. *
  161. * @param data A pointer to the buffer to read into.
  162. * @param length The number of bytes to read. Take care not to overrun the
  163. * length of `data`.
  164. */
  165. void uart_receive(uint8_t *data, uint16_t length);
  166. /**
  167. * @brief Return whether the receive buffer contains data. Call this function
  168. * to determine if `uart_read()` will return data immediately.
  169. *
  170. * @return true If there is data available to read.
  171. * @return false If there is no data available to read.
  172. */
  173. bool uart_available(void);