semf
stm32uart.h
Go to the documentation of this file.
1
10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32UART_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32UART_H_
12
15
16#if defined(STM32) && defined(HAL_UART_MODULE_ENABLED)
18namespace semf
19{
23class Stm32Uart : public UartHardware, public LinkedQueue<Stm32Uart>::Node
24{
25public:
27 enum class ErrorCode : uint8_t
28 {
29 Init_HalError = 0,
30 Init_HalBusy,
31 Init_HalTimeout,
32 Deinit_HalError,
33 Deinit_HalBusy,
34 Deinit_HalTimeout,
35 StopWrite_HalError,
36 StopWrite_HalBusy,
37 StopWrite_HalTimeout,
38 StopRead_HalError,
39 StopRead_HalBusy,
40 StopRead_HalTimeout,
41 SetFormat_WordLengthInvalid,
42 SetFormat_WireInvalid,
43 SetFormat_ParityInvalid,
44 SetFormat_StopBitsInvalid,
45 SetFormat_FlowInvalid,
46 WriteHardware_HalError,
47 WriteHardware_HalBusy,
48 WriteHardware_HalTimeout,
49 ReadHardware_HalError,
50 ReadHardware_HalBusy,
51 ReadHardware_HalTimeout
52 };
53
58 explicit Stm32Uart(UART_HandleTypeDef& hwHandle);
59 explicit Stm32Uart(const Stm32Uart& other) = delete;
60 virtual ~Stm32Uart() = default;
61
68 void init() override;
75 void deinit() override;
83 void stopWrite() override;
91 void stopRead() override;
100 void setFormat(uint8_t bits, WireMode wire, Parity par, StopBits stop, FlowControl flow) override;
101 void setBaud(uint32_t baud) override;
102 uint32_t baud() override;
112 static void systemIsrRead(UART_HandleTypeDef& uart);
117 static void systemIsrWritten(UART_HandleTypeDef& uart);
122 void isrRead(UART_HandleTypeDef& uart);
127 void isrWritten(UART_HandleTypeDef& uart);
128
129protected:
136 void writeHardware(const uint8_t data[], size_t dataSize) override;
143 void readHardware(uint8_t buffer[], size_t bufferSize) override;
144
145private:
151 HAL_StatusTypeDef halLock();
152
154 static LinkedQueue<Stm32Uart> m_queue;
156 UART_HandleTypeDef* m_hwHandle;
158 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32Uart;
159};
160} /* namespace semf */
161#endif
162#endif /* SEMF_HARDWAREABSTRACTION_STM32_STM32UART_H_ */
ClassID
Semf class IDs.
Definition: error.h:28
LinkedQueue is an managed single linked queue implementation.
Definition: linkedqueue.h:38
UartHardware implemenation for STM32.
Definition: stm32uart.h:24
virtual ~Stm32Uart()=default
Stm32Uart(UART_HandleTypeDef &hwHandle)
Constructor.
Definition: stm32uart.cpp:26
void isrRead(UART_HandleTypeDef &uart)
Interrupt service routine for uart object receive.
Definition: stm32uart.cpp:292
uint32_t baud() override
Returns the currently used baud rate.
Definition: stm32uart.cpp:269
void stopWrite() override
Definition: stm32uart.cpp:82
Stm32Uart(const Stm32Uart &other)=delete
void stopRead() override
Definition: stm32uart.cpp:108
void writeHardware(const uint8_t data[], size_t dataSize) override
Hardware will write data in interrupt mode.
Definition: stm32uart.cpp:308
void readHardware(uint8_t buffer[], size_t bufferSize) override
Hardware will read data in interrupt mode.
Definition: stm32uart.cpp:333
static LinkedQueue< Stm32Uart > * queue()
Get the list with all uarts.
Definition: stm32uart.cpp:274
void isrWritten(UART_HandleTypeDef &uart)
Interrupt service routine for uart object transmit.
Definition: stm32uart.cpp:300
void deinit() override
Definition: stm32uart.cpp:57
void init() override
Definition: stm32uart.cpp:32
static void systemIsrRead(UART_HandleTypeDef &uart)
System-wide interrupt service routine for uart receive.
Definition: stm32uart.cpp:280
static void systemIsrWritten(UART_HandleTypeDef &uart)
System-wide interrupt service routine for uart transmit.
Definition: stm32uart.cpp:286
void setBaud(uint32_t baud) override
Sets the baud rate.
Definition: stm32uart.cpp:261
void setFormat(uint8_t bits, WireMode wire, Parity par, StopBits stop, FlowControl flow) override
Sets the format for the spi slave device.
Definition: stm32uart.cpp:134
Class for using UART hardware.
Definition: uarthardware.h:22
Parity
Definition: uart.h:37
FlowControl
Definition: uart.h:29
WireMode
Definition: uart.h:52
StopBits
Definition: uart.h:44