19#if defined(USE_FULL_LL_DRIVER)
26#include "stm32_assert.h"
28#define assert_param(expr) ((void)0U)
35#if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5) || defined (UART7) || defined (UART8) || defined (UART9) || defined (UART10)
60#define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 12500000U)
63#define IS_LL_USART_BRR_MIN(__VALUE__) ((__VALUE__) >= 16U)
65#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
66 || ((__VALUE__) == LL_USART_DIRECTION_RX) \
67 || ((__VALUE__) == LL_USART_DIRECTION_TX) \
68 || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
70#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
71 || ((__VALUE__) == LL_USART_PARITY_EVEN) \
72 || ((__VALUE__) == LL_USART_PARITY_ODD))
74#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_8B) \
75 || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
77#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
78 || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
80#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
81 || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
83#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
84 || ((__VALUE__) == LL_USART_PHASE_2EDGE))
86#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
87 || ((__VALUE__) == LL_USART_POLARITY_HIGH))
89#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
90 || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
92#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
93 || ((__VALUE__) == LL_USART_STOPBITS_1) \
94 || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
95 || ((__VALUE__) == LL_USART_STOPBITS_2))
97#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
98 || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
99 || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
100 || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
124ErrorStatus LL_USART_DeInit(
const USART_TypeDef *USARTx)
126 ErrorStatus status = SUCCESS;
131 if (USARTx == USART1)
134 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
137 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART1);
139 else if (USARTx == USART2)
142 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART2);
145 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART2);
148 else if (USARTx == USART3)
151 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART3);
154 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART3);
158 else if (USARTx == USART6)
161 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART6);
164 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART6);
168 else if (USARTx == UART4)
171 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART4);
174 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART4);
178 else if (USARTx == UART5)
181 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART5);
184 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART5);
188 else if (USARTx == UART7)
191 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART7);
194 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART7);
198 else if (USARTx == UART8)
201 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART8);
204 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART8);
208 else if (USARTx == UART9)
211 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_UART9);
214 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_UART9);
218 else if (USARTx == UART10)
221 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_UART10);
224 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_UART10);
248ErrorStatus LL_USART_Init(USART_TypeDef *USARTx,
const LL_USART_InitTypeDef *USART_InitStruct)
250 ErrorStatus status = ERROR;
251 uint32_t periphclk = LL_RCC_PERIPH_FREQUENCY_NO;
252 LL_RCC_ClocksTypeDef rcc_clocks;
256 assert_param(IS_LL_USART_BAUDRATE(USART_InitStruct->BaudRate));
257 assert_param(IS_LL_USART_DATAWIDTH(USART_InitStruct->DataWidth));
258 assert_param(IS_LL_USART_STOPBITS(USART_InitStruct->StopBits));
259 assert_param(IS_LL_USART_PARITY(USART_InitStruct->Parity));
260 assert_param(IS_LL_USART_DIRECTION(USART_InitStruct->TransferDirection));
261 assert_param(IS_LL_USART_HWCONTROL(USART_InitStruct->HardwareFlowControl));
262 assert_param(IS_LL_USART_OVERSAMPLING(USART_InitStruct->OverSampling));
266 if (LL_USART_IsEnabled(USARTx) == 0U)
275 MODIFY_REG(USARTx->CR1,
276 (USART_CR1_M | USART_CR1_PCE | USART_CR1_PS |
277 USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8),
278 (USART_InitStruct->DataWidth | USART_InitStruct->Parity |
279 USART_InitStruct->TransferDirection | USART_InitStruct->OverSampling));
286 LL_USART_SetStopBitsLength(USARTx, USART_InitStruct->StopBits);
292 LL_USART_SetHWFlowCtrl(USARTx, USART_InitStruct->HardwareFlowControl);
297 LL_RCC_GetSystemClocksFreq(&rcc_clocks);
298 if (USARTx == USART1)
300 periphclk = rcc_clocks.PCLK2_Frequency;
302 else if (USARTx == USART2)
304 periphclk = rcc_clocks.PCLK1_Frequency;
307 else if (USARTx == USART3)
309 periphclk = rcc_clocks.PCLK1_Frequency;
313 else if (USARTx == USART6)
315 periphclk = rcc_clocks.PCLK2_Frequency;
319 else if (USARTx == UART4)
321 periphclk = rcc_clocks.PCLK1_Frequency;
325 else if (USARTx == UART5)
327 periphclk = rcc_clocks.PCLK1_Frequency;
331 else if (USARTx == UART7)
333 periphclk = rcc_clocks.PCLK1_Frequency;
337 else if (USARTx == UART8)
339 periphclk = rcc_clocks.PCLK1_Frequency;
343 else if (USARTx == UART9)
345 periphclk = rcc_clocks.PCLK2_Frequency;
349 else if (USARTx == UART10)
351 periphclk = rcc_clocks.PCLK2_Frequency;
363 if ((periphclk != LL_RCC_PERIPH_FREQUENCY_NO)
364 && (USART_InitStruct->BaudRate != 0U))
367 LL_USART_SetBaudRate(USARTx,
369 USART_InitStruct->OverSampling,
370 USART_InitStruct->BaudRate);
388void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct)
391 USART_InitStruct->BaudRate = 9600U;
392 USART_InitStruct->DataWidth = LL_USART_DATAWIDTH_8B;
393 USART_InitStruct->StopBits = LL_USART_STOPBITS_1;
394 USART_InitStruct->Parity = LL_USART_PARITY_NONE ;
395 USART_InitStruct->TransferDirection = LL_USART_DIRECTION_TX_RX;
396 USART_InitStruct->HardwareFlowControl = LL_USART_HWCONTROL_NONE;
397 USART_InitStruct->OverSampling = LL_USART_OVERSAMPLING_16;
412ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx,
const LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
414 ErrorStatus status = SUCCESS;
418 assert_param(IS_LL_USART_CLOCKOUTPUT(USART_ClockInitStruct->ClockOutput));
422 if (LL_USART_IsEnabled(USARTx) == 0U)
426 if (USART_ClockInitStruct->ClockOutput == LL_USART_CLOCK_DISABLE)
431 LL_USART_DisableSCLKOutput(USARTx);
439 assert_param(IS_LL_USART_CLOCKPOLARITY(USART_ClockInitStruct->ClockPolarity));
440 assert_param(IS_LL_USART_CLOCKPHASE(USART_ClockInitStruct->ClockPhase));
441 assert_param(IS_LL_USART_LASTBITCLKOUTPUT(USART_ClockInitStruct->LastBitClockPulse));
450 MODIFY_REG(USARTx->CR2,
451 USART_CR2_CLKEN | USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL,
452 USART_CR2_CLKEN | USART_ClockInitStruct->ClockPolarity |
453 USART_ClockInitStruct->ClockPhase | USART_ClockInitStruct->LastBitClockPulse);
471void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
474 USART_ClockInitStruct->ClockOutput = LL_USART_CLOCK_DISABLE;
475 USART_ClockInitStruct->ClockPolarity = LL_USART_POLARITY_LOW;
476 USART_ClockInitStruct->ClockPhase = LL_USART_PHASE_1EDGE;
477 USART_ClockInitStruct->LastBitClockPulse = LL_USART_LASTCLKPULSE_NO_OUTPUT;
#define assert_param(expr)
Header file of BUS LL module.
Header file of RCC LL module.
Header file of USART LL module.