13#if defined(STM32) && defined(HAL_UART_MODULE_ENABLED)
25LinkedQueue<Stm32Uart> Stm32Uart::m_queue;
27: m_hwHandle(&hwHandle)
35 HAL_StatusTypeDef state = HAL_UART_Init(m_hwHandle);
38 if (state == HAL_ERROR)
43 else if (state == HAL_BUSY)
48 else if (state == HAL_TIMEOUT)
60 HAL_StatusTypeDef state = HAL_UART_DeInit(m_hwHandle);
63 if (state == HAL_ERROR)
68 else if (state == HAL_BUSY)
73 else if (state == HAL_TIMEOUT)
85 HAL_StatusTypeDef state = HAL_UART_AbortTransmit(m_hwHandle);
88 if (state == HAL_ERROR)
93 else if (state == HAL_BUSY)
98 else if (state == HAL_TIMEOUT)
111 HAL_StatusTypeDef state = HAL_UART_AbortReceive(m_hwHandle);
114 if (state == HAL_ERROR)
119 else if (state == HAL_BUSY)
124 else if (state == HAL_TIMEOUT)
136 SEMF_INFO(
"set format, bits %u, wire %u, parity %u, stop %u, flow %u", bits,
static_cast<uint32_t
>(wire),
static_cast<uint32_t
>(par),
137 static_cast<uint32_t
>(stop),
static_cast<uint32_t
>(flow));
144#if !defined(STM32F4) && !defined(STM32F1) && !defined(STM32F0)
146 m_hwHandle->Init.WordLength = UART_WORDLENGTH_7B;
150 m_hwHandle->Init.WordLength = UART_WORDLENGTH_8B;
153 m_hwHandle->Init.WordLength = UART_WORDLENGTH_9B;
165#if !defined(STM32F4) && !defined(STM32F1) && !defined(STM32F0)
167 m_hwHandle->Init.WordLength = UART_WORDLENGTH_7B;
171 m_hwHandle->Init.WordLength = UART_WORDLENGTH_8B;
174 m_hwHandle->Init.WordLength = UART_WORDLENGTH_9B;
186 m_hwHandle->Init.Mode = UART_MODE_RX;
189 m_hwHandle->Init.Mode = UART_MODE_TX;
192 m_hwHandle->Init.Mode = UART_MODE_TX_RX;
195 SEMF_ERROR(
"wire invalid %u",
static_cast<uint32_t
>(wire));
203 m_hwHandle->Init.Parity = UART_PARITY_NONE;
206 m_hwHandle->Init.Parity = UART_PARITY_ODD;
209 m_hwHandle->Init.Parity = UART_PARITY_EVEN;
212 SEMF_ERROR(
"parity invalid %u",
static_cast<uint32_t
>(par));
220 m_hwHandle->Init.StopBits = UART_STOPBITS_1;
223 m_hwHandle->Init.StopBits = UART_STOPBITS_2;
225#if !defined(STM32F4) && !defined(STM32F1)
227 m_hwHandle->Init.StopBits = UART_STOPBITS_0_5;
230 m_hwHandle->Init.StopBits = UART_STOPBITS_1_5;
234 SEMF_ERROR(
"stop bits invalid %u",
static_cast<uint32_t
>(stop));
242 m_hwHandle->Init.HwFlowCtl = UART_HWCONTROL_NONE;
245 m_hwHandle->Init.HwFlowCtl = UART_HWCONTROL_RTS;
248 m_hwHandle->Init.HwFlowCtl = UART_HWCONTROL_CTS;
251 m_hwHandle->Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
254 SEMF_ERROR(
"flow invalid %u",
static_cast<uint32_t
>(flow));
258 __HAL_UNLOCK(m_hwHandle);
265 m_hwHandle->Init.BaudRate =
baud;
266 __HAL_UNLOCK(m_hwHandle);
271 return m_hwHandle->Init.BaudRate;
294 if (m_hwHandle == &uart)
302 if (m_hwHandle == &uart)
310 __HAL_UNLOCK(m_hwHandle);
311 HAL_StatusTypeDef state = HAL_UART_Transmit_IT(m_hwHandle,
const_cast<uint8_t*
>(data),
static_cast<uint16_t
>(dataSize));
314 if (state == HAL_ERROR)
319 else if (state == HAL_BUSY)
324 else if (state == HAL_TIMEOUT)
335 __HAL_UNLOCK(m_hwHandle);
336 HAL_StatusTypeDef state = HAL_UART_Receive_IT(m_hwHandle, buffer,
static_cast<uint16_t
>(bufferSize));
339 if (state == HAL_ERROR)
344 else if (state == HAL_BUSY)
349 else if (state == HAL_TIMEOUT)
358HAL_StatusTypeDef Stm32Uart::halLock()
360 __HAL_LOCK(m_hwHandle);
Class for representing errors. Every error should have a unique source code. As a user feel encourage...
LinkedQueue is an managed single linked queue implementation.
UartHardware implemenation for STM32.
Stm32Uart(UART_HandleTypeDef &hwHandle)
Constructor.
void isrRead(UART_HandleTypeDef &uart)
Interrupt service routine for uart object receive.
uint32_t baud() override
Returns the currently used baud rate.
void stopWrite() override
void writeHardware(const uint8_t data[], size_t dataSize) override
Hardware will write data in interrupt mode.
void readHardware(uint8_t buffer[], size_t bufferSize) override
Hardware will read data in interrupt mode.
@ SetFormat_WordLengthInvalid
@ ReadHardware_HalTimeout
@ WriteHardware_HalTimeout
@ SetFormat_StopBitsInvalid
@ SetFormat_ParityInvalid
static LinkedQueue< Stm32Uart > * queue()
Get the list with all uarts.
void isrWritten(UART_HandleTypeDef &uart)
Interrupt service routine for uart object transmit.
static void systemIsrRead(UART_HandleTypeDef &uart)
System-wide interrupt service routine for uart receive.
static void systemIsrWritten(UART_HandleTypeDef &uart)
System-wide interrupt service routine for uart transmit.
void setBaud(uint32_t baud) override
Sets the baud rate.
void setFormat(uint8_t bits, WireMode wire, Parity par, StopBits stop, FlowControl flow) override
Sets the format for the spi slave device.
void onError(Error thrown)
Is called if an error occurred by hardware read or write access. Will throw error signal.
@ RtsFlowControl
Receive flow control setting, RXD, TXD and RTS pins are used.
@ RtsAndCtsFlowControl
Full flow control setting, RXD, TXD, CTS and RTS pins are used.
@ CtsFlowControl
Transmit flow control setting, RXD, TXD and CTS pins are used.
@ NoFlowControl
No flow control setting, only RXD and TXD pins are used.
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)