21 #ifndef __STM32F1xx_LL_USART_H
22 #define __STM32F1xx_LL_USART_H
35 #if defined (USART1) || defined (USART2) || defined (USART3) || defined (UART4) || defined (UART5)
50 #define USART_POSITION_GTPR_GT USART_GTPR_GT_Pos
56 #if defined(USE_FULL_LL_DRIVER)
66 #if defined(USE_FULL_LL_DRIVER)
95 uint32_t TransferDirection;
100 uint32_t HardwareFlowControl;
105 uint32_t OverSampling;
110 } LL_USART_InitTypeDef;
117 uint32_t ClockOutput;
124 uint32_t ClockPolarity;
136 uint32_t LastBitClockPulse;
143 } LL_USART_ClockInitTypeDef;
159 #define LL_USART_SR_PE USART_SR_PE
160 #define LL_USART_SR_FE USART_SR_FE
161 #define LL_USART_SR_NE USART_SR_NE
162 #define LL_USART_SR_ORE USART_SR_ORE
163 #define LL_USART_SR_IDLE USART_SR_IDLE
164 #define LL_USART_SR_RXNE USART_SR_RXNE
165 #define LL_USART_SR_TC USART_SR_TC
166 #define LL_USART_SR_TXE USART_SR_TXE
167 #define LL_USART_SR_LBD USART_SR_LBD
168 #define LL_USART_SR_CTS USART_SR_CTS
177 #define LL_USART_CR1_IDLEIE USART_CR1_IDLEIE
178 #define LL_USART_CR1_RXNEIE USART_CR1_RXNEIE
179 #define LL_USART_CR1_TCIE USART_CR1_TCIE
180 #define LL_USART_CR1_TXEIE USART_CR1_TXEIE
181 #define LL_USART_CR1_PEIE USART_CR1_PEIE
182 #define LL_USART_CR2_LBDIE USART_CR2_LBDIE
183 #define LL_USART_CR3_EIE USART_CR3_EIE
184 #define LL_USART_CR3_CTSIE USART_CR3_CTSIE
192 #define LL_USART_DIRECTION_NONE 0x00000000U
193 #define LL_USART_DIRECTION_RX USART_CR1_RE
194 #define LL_USART_DIRECTION_TX USART_CR1_TE
195 #define LL_USART_DIRECTION_TX_RX (USART_CR1_TE |USART_CR1_RE)
203 #define LL_USART_PARITY_NONE 0x00000000U
204 #define LL_USART_PARITY_EVEN USART_CR1_PCE
205 #define LL_USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS)
213 #define LL_USART_WAKEUP_IDLELINE 0x00000000U
214 #define LL_USART_WAKEUP_ADDRESSMARK USART_CR1_WAKE
222 #define LL_USART_DATAWIDTH_8B 0x00000000U
223 #define LL_USART_DATAWIDTH_9B USART_CR1_M
231 #define LL_USART_OVERSAMPLING_16 0x00000000U
232 #if defined(USART_CR1_OVER8)
233 #define LL_USART_OVERSAMPLING_8 USART_CR1_OVER8
239 #if defined(USE_FULL_LL_DRIVER)
244 #define LL_USART_CLOCK_DISABLE 0x00000000U
245 #define LL_USART_CLOCK_ENABLE USART_CR2_CLKEN
254 #define LL_USART_LASTCLKPULSE_NO_OUTPUT 0x00000000U
255 #define LL_USART_LASTCLKPULSE_OUTPUT USART_CR2_LBCL
263 #define LL_USART_PHASE_1EDGE 0x00000000U
264 #define LL_USART_PHASE_2EDGE USART_CR2_CPHA
272 #define LL_USART_POLARITY_LOW 0x00000000U
273 #define LL_USART_POLARITY_HIGH USART_CR2_CPOL
281 #define LL_USART_STOPBITS_0_5 USART_CR2_STOP_0
282 #define LL_USART_STOPBITS_1 0x00000000U
283 #define LL_USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1)
284 #define LL_USART_STOPBITS_2 USART_CR2_STOP_1
292 #define LL_USART_HWCONTROL_NONE 0x00000000U
293 #define LL_USART_HWCONTROL_RTS USART_CR3_RTSE
294 #define LL_USART_HWCONTROL_CTS USART_CR3_CTSE
295 #define LL_USART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE)
303 #define LL_USART_IRDA_POWER_NORMAL 0x00000000U
304 #define LL_USART_IRDA_POWER_LOW USART_CR3_IRLP
312 #define LL_USART_LINBREAK_DETECT_10B 0x00000000U
313 #define LL_USART_LINBREAK_DETECT_11B USART_CR2_LBDL
338 #define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
346 #define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
362 #define __LL_USART_DIV_SAMPLING8_100(__PERIPHCLK__, __BAUDRATE__) (((__PERIPHCLK__)*25)/(2*(__BAUDRATE__)))
363 #define __LL_USART_DIVMANT_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__))/100)
364 #define __LL_USART_DIVFRAQ_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 8 + 50) / 100)
367 #define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \
368 ((__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0xF8) << 1)) + \
369 (__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0x07))
378 #define __LL_USART_DIV_SAMPLING16_100(__PERIPHCLK__, __BAUDRATE__) (((__PERIPHCLK__)*25)/(4*(__BAUDRATE__)))
379 #define __LL_USART_DIVMANT_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__))/100)
380 #define __LL_USART_DIVFRAQ_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 16) + 50) / 100)
383 #define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \
384 (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0xF0)) + \
385 (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0x0F))
607 #if defined(USART_CR1_OVER8)
632 return (uint32_t)(
READ_BIT(USARTx->
CR1, USART_CR1_OVER8));
975 #if defined(USART_CR3_ONEBIT)
1006 return (
READ_BIT(USARTx->
CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT));
1010 #if defined(USART_CR1_OVER8)
1029 if (OverSampling == LL_USART_OVERSAMPLING_8)
1031 USARTx->
BRR = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate));
1035 USARTx->
BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate));
1053 uint32_t usartdiv = 0x0U;
1054 uint32_t brrresult = 0x0U;
1056 usartdiv = USARTx->
BRR;
1058 if (OverSampling == LL_USART_OVERSAMPLING_8)
1060 if ((usartdiv & 0xFFF7U) != 0U)
1062 usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ;
1063 brrresult = (PeriphClk * 2U) / usartdiv;
1068 if ((usartdiv & 0xFFFFU) != 0U)
1070 brrresult = PeriphClk / usartdiv;
1090 USARTx->
BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate));
1104 uint32_t usartdiv = 0x0U;
1105 uint32_t brrresult = 0x0U;
1107 usartdiv = USARTx->
BRR;
1109 if ((usartdiv & 0xFFFFU) != 0U)
1111 brrresult = PeriphClk / usartdiv;
1926 __IO uint32_t tmpreg;
1927 tmpreg = USARTx->
SR;
1929 tmpreg = USARTx->
DR;
1945 __IO uint32_t tmpreg;
1946 tmpreg = USARTx->
SR;
1948 tmpreg = USARTx->
DR;
1964 __IO uint32_t tmpreg;
1965 tmpreg = USARTx->
SR;
1967 tmpreg = USARTx->
DR;
1983 __IO uint32_t tmpreg;
1984 tmpreg = USARTx->
SR;
1986 tmpreg = USARTx->
DR;
2002 __IO uint32_t tmpreg;
2003 tmpreg = USARTx->
SR;
2005 tmpreg = USARTx->
DR;
2433 return ((uint32_t) & (USARTx->
DR));
2487 USARTx->
DR = Value & 0x1FFU;
2535 #if defined(USE_FULL_LL_DRIVER)
2541 void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct);
2543 void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct);