7#include <stm32cubemx_helper/device.hpp>
17template <UART_HandleTypeDef *Handle, UartType TxType>
class UartTx;
18template <UART_HandleTypeDef *Handle, UartType RxType>
class UartRx;
24 bool transmit(
const uint8_t *data,
size_t size, uint32_t timeout) {
25 if (HAL_UART_Transmit_DMA(Handle, data, size) != HAL_OK) {
26 HAL_UART_AbortTransmit_IT(Handle);
30 while (Handle->gState != HAL_UART_STATE_READY) {
32 HAL_UART_AbortTransmit_IT(Handle);
47 UartRx(
size_t buf_size) : buf_(buf_size) {
48 HAL_UART_Receive_DMA(Handle, buf_.data(), buf_.size());
53 bool receive(uint8_t *data,
size_t size, uint32_t timeout) {
61 for (
size_t i = 0; i < size; ++i) {
62 data[i] = buf_[read_idx_];
71 size_t write_idx = buf_.size() - __HAL_DMA_GET_COUNTER(Handle->hdmarx);
72 return (buf_.size() + write_idx - read_idx_) % buf_.size();
76 std::vector<uint8_t> buf_;
82 void advance(
size_t len) { read_idx_ = (read_idx_ + len) % buf_.size(); }
Definition utility.hpp:12
bool is_timeout(uint32_t &timeout)
Definition utility.hpp:16
size_t available()
Definition uart_dma.hpp:70
~UartRx()
Definition uart_dma.hpp:51
UartRx(size_t buf_size)
Definition uart_dma.hpp:47
void flush()
Definition uart_dma.hpp:68
bool receive(uint8_t *data, size_t size, uint32_t timeout)
Definition uart_dma.hpp:53
bool transmit(const uint8_t *data, size_t size, uint32_t timeout)
Definition uart_dma.hpp:24
UartType
Definition uart_type.hpp:6
@ DMA
Definition uart_type.hpp:9