20 #if defined(USE_FULL_LL_DRIVER)
26 #ifdef USE_FULL_ASSERT
29 #define assert_param(expr) ((void)0U)
36 #if defined (USART1) || defined (USART2) || defined (USART3) || defined (UART4) || defined (UART5)
61 #define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 4500000U)
64 #define IS_LL_USART_BRR_MIN(__VALUE__) ((__VALUE__) >= 16U)
67 #define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
69 #define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
70 || ((__VALUE__) == LL_USART_DIRECTION_RX) \
71 || ((__VALUE__) == LL_USART_DIRECTION_TX) \
72 || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
74 #define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
75 || ((__VALUE__) == LL_USART_PARITY_EVEN) \
76 || ((__VALUE__) == LL_USART_PARITY_ODD))
78 #define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_8B) \
79 || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
81 #define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
82 || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
84 #define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
85 || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
87 #define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
88 || ((__VALUE__) == LL_USART_PHASE_2EDGE))
90 #define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
91 || ((__VALUE__) == LL_USART_POLARITY_HIGH))
93 #define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
94 || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
96 #define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
97 || ((__VALUE__) == LL_USART_STOPBITS_1) \
98 || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
99 || ((__VALUE__) == LL_USART_STOPBITS_2))
101 #define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
102 || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
103 || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
104 || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
138 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
141 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART1);
143 else if (USARTx ==
USART2)
146 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART2);
149 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART2);
152 else if (USARTx ==
USART3)
155 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART3);
158 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART3);
162 else if (USARTx == UART4)
165 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART4);
168 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART4);
172 else if (USARTx == UART5)
175 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART5);
178 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART5);
205 uint32_t periphclk = LL_RCC_PERIPH_FREQUENCY_NO;
206 LL_RCC_ClocksTypeDef rcc_clocks;
210 assert_param(IS_LL_USART_BAUDRATE(USART_InitStruct->BaudRate));
211 assert_param(IS_LL_USART_DATAWIDTH(USART_InitStruct->DataWidth));
212 assert_param(IS_LL_USART_STOPBITS(USART_InitStruct->StopBits));
213 assert_param(IS_LL_USART_PARITY(USART_InitStruct->Parity));
214 assert_param(IS_LL_USART_DIRECTION(USART_InitStruct->TransferDirection));
215 assert_param(IS_LL_USART_HWCONTROL(USART_InitStruct->HardwareFlowControl));
216 #if defined(USART_CR1_OVER8)
217 assert_param(IS_LL_USART_OVERSAMPLING(USART_InitStruct->OverSampling));
222 if (LL_USART_IsEnabled(USARTx) == 0U)
231 #if defined(USART_CR1_OVER8)
235 (USART_InitStruct->DataWidth | USART_InitStruct->Parity |
236 USART_InitStruct->TransferDirection | USART_InitStruct->OverSampling));
241 (USART_InitStruct->DataWidth | USART_InitStruct->Parity |
242 USART_InitStruct->TransferDirection));
250 LL_USART_SetStopBitsLength(USARTx, USART_InitStruct->StopBits);
256 LL_USART_SetHWFlowCtrl(USARTx, USART_InitStruct->HardwareFlowControl);
261 LL_RCC_GetSystemClocksFreq(&rcc_clocks);
264 periphclk = rcc_clocks.PCLK2_Frequency;
266 else if (USARTx ==
USART2)
268 periphclk = rcc_clocks.PCLK1_Frequency;
271 else if (USARTx ==
USART3)
273 periphclk = rcc_clocks.PCLK1_Frequency;
277 else if (USARTx == UART4)
279 periphclk = rcc_clocks.PCLK1_Frequency;
283 else if (USARTx == UART5)
285 periphclk = rcc_clocks.PCLK1_Frequency;
297 if ((periphclk != LL_RCC_PERIPH_FREQUENCY_NO)
298 && (USART_InitStruct->BaudRate != 0U))
301 #if defined(USART_CR1_OVER8)
302 LL_USART_SetBaudRate(USARTx,
304 USART_InitStruct->OverSampling,
305 USART_InitStruct->BaudRate);
307 LL_USART_SetBaudRate(USARTx,
309 USART_InitStruct->BaudRate);
331 void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct)
334 USART_InitStruct->BaudRate = 9600U;
335 USART_InitStruct->DataWidth = LL_USART_DATAWIDTH_8B;
336 USART_InitStruct->StopBits = LL_USART_STOPBITS_1;
337 USART_InitStruct->Parity = LL_USART_PARITY_NONE ;
338 USART_InitStruct->TransferDirection = LL_USART_DIRECTION_TX_RX;
339 USART_InitStruct->HardwareFlowControl = LL_USART_HWCONTROL_NONE;
340 #if defined(USART_CR1_OVER8)
341 USART_InitStruct->OverSampling = LL_USART_OVERSAMPLING_16;
363 assert_param(IS_LL_USART_CLOCKOUTPUT(USART_ClockInitStruct->ClockOutput));
367 if (LL_USART_IsEnabled(USARTx) == 0U)
371 if (USART_ClockInitStruct->ClockOutput == LL_USART_CLOCK_DISABLE)
376 LL_USART_DisableSCLKOutput(USARTx);
384 assert_param(IS_LL_USART_CLOCKPOLARITY(USART_ClockInitStruct->ClockPolarity));
385 assert_param(IS_LL_USART_CLOCKPHASE(USART_ClockInitStruct->ClockPhase));
386 assert_param(IS_LL_USART_LASTBITCLKOUTPUT(USART_ClockInitStruct->LastBitClockPulse));
398 USART_ClockInitStruct->ClockPhase | USART_ClockInitStruct->LastBitClockPulse);
416 void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
419 USART_ClockInitStruct->ClockOutput = LL_USART_CLOCK_DISABLE;
420 USART_ClockInitStruct->ClockPolarity = LL_USART_POLARITY_LOW;
421 USART_ClockInitStruct->ClockPhase = LL_USART_PHASE_1EDGE;
422 USART_ClockInitStruct->LastBitClockPulse = LL_USART_LASTCLKPULSE_NO_OUTPUT;