Subversion Repositories EDIS_Ignition

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 18
Line 1... Line 1...
1
/**
1
/**
2
  ******************************************************************************
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_uart.h
3
  * @file    stm32f1xx_hal_uart.h
4
  * @author  MCD Application Team
4
  * @author  MCD Application Team
5
  * @brief   Header file of UART HAL module.
5
  * @brief   Header file of UART HAL module.
6
  ******************************************************************************
6
  ******************************************************************************
7
  * @attention
7
  * @attention
8
  *
8
  *
9
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
9
  * Copyright (c) 2016 STMicroelectronics.
10
  * All rights reserved.</center></h2>
10
  * All rights reserved.
11
  *
11
  *
12
  * This software component is licensed by ST under BSD 3-Clause license,
12
  * This software is licensed under terms that can be found in the LICENSE file
13
  * the "License"; You may not use this file except in compliance with the
13
  * in the root directory of this software component.
14
  * License. You may obtain a copy of the License at:
14
  * If no LICENSE file comes with this software, it is provided AS-IS.
15
  *                        opensource.org/licenses/BSD-3-Clause
15
  *
16
  *
16
  ******************************************************************************
17
  ******************************************************************************
17
  */
18
  */
18
 
19
 
19
/* Define to prevent recursive inclusion -------------------------------------*/
20
/* Define to prevent recursive inclusion -------------------------------------*/
20
#ifndef __STM32F1xx_HAL_UART_H
21
#ifndef __STM32F1xx_HAL_UART_H
21
#define __STM32F1xx_HAL_UART_H
22
#define __STM32F1xx_HAL_UART_H
22
 
23
 
23
#ifdef __cplusplus
24
#ifdef __cplusplus
24
extern "C" {
25
extern "C" {
25
#endif
26
#endif
26
 
27
 
27
/* Includes ------------------------------------------------------------------*/
28
/* Includes ------------------------------------------------------------------*/
28
#include "stm32f1xx_hal_def.h"
29
#include "stm32f1xx_hal_def.h"
29
 
30
 
30
/** @addtogroup STM32F1xx_HAL_Driver
31
/** @addtogroup STM32F1xx_HAL_Driver
31
  * @{
32
  * @{
32
  */
33
  */
33
 
34
 
34
/** @addtogroup UART
35
/** @addtogroup UART
35
  * @{
36
  * @{
36
  */
37
  */
37
 
38
 
38
/* Exported types ------------------------------------------------------------*/
39
/* Exported types ------------------------------------------------------------*/
39
/** @defgroup UART_Exported_Types UART Exported Types
40
/** @defgroup UART_Exported_Types UART Exported Types
40
  * @{
41
  * @{
41
  */
42
  */
42
 
43
 
43
/**
44
/**
44
  * @brief UART Init Structure definition
45
  * @brief UART Init Structure definition
45
  */
46
  */
46
typedef struct
47
typedef struct
47
{
48
{
48
  uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.
49
  uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.
49
                                           The baud rate is computed using the following formula:
50
                                           The baud rate is computed using the following formula:
50
                                           - IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))
51
                                           - IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))
51
                                           - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
52
                                           - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
52
 
53
 
53
  uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
54
  uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
54
                                           This parameter can be a value of @ref UART_Word_Length */
55
                                           This parameter can be a value of @ref UART_Word_Length */
55
 
56
 
56
  uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
57
  uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
57
                                           This parameter can be a value of @ref UART_Stop_Bits */
58
                                           This parameter can be a value of @ref UART_Stop_Bits */
58
 
59
 
59
  uint32_t Parity;                    /*!< Specifies the parity mode.
60
  uint32_t Parity;                    /*!< Specifies the parity mode.
60
                                           This parameter can be a value of @ref UART_Parity
61
                                           This parameter can be a value of @ref UART_Parity
61
                                           @note When parity is enabled, the computed parity is inserted
62
                                           @note When parity is enabled, the computed parity is inserted
62
                                                 at the MSB position of the transmitted data (9th bit when
63
                                                 at the MSB position of the transmitted data (9th bit when
63
                                                 the word length is set to 9 data bits; 8th bit when the
64
                                                 the word length is set to 9 data bits; 8th bit when the
64
                                                 word length is set to 8 data bits). */
65
                                                 word length is set to 8 data bits). */
65
 
66
 
66
  uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
67
  uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
67
                                           This parameter can be a value of @ref UART_Mode */
68
                                           This parameter can be a value of @ref UART_Mode */
68
 
69
 
69
  uint32_t HwFlowCtl;                 /*!< Specifies whether the hardware flow control mode is enabled or disabled.
70
  uint32_t HwFlowCtl;                 /*!< Specifies whether the hardware flow control mode is enabled or disabled.
70
                                           This parameter can be a value of @ref UART_Hardware_Flow_Control */
71
                                           This parameter can be a value of @ref UART_Hardware_Flow_Control */
71
 
72
 
72
  uint32_t OverSampling;              /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).
73
  uint32_t OverSampling;              /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).
73
                                           This parameter can be a value of @ref UART_Over_Sampling. This feature is only available
74
                                           This parameter can be a value of @ref UART_Over_Sampling. This feature is only available
74
                                           on STM32F100xx family, so OverSampling parameter should always be set to 16. */
75
                                           on STM32F100xx family, so OverSampling parameter should always be set to 16. */
75
} UART_InitTypeDef;
76
} UART_InitTypeDef;
76
 
77
 
77
/**
78
/**
78
  * @brief HAL UART State structures definition
79
  * @brief HAL UART State structures definition
79
  * @note  HAL UART State value is a combination of 2 different substates: gState and RxState.
80
  * @note  HAL UART State value is a combination of 2 different substates: gState and RxState.
80
  *        - gState contains UART state information related to global Handle management
81
  *        - gState contains UART state information related to global Handle management
81
  *          and also information related to Tx operations.
82
  *          and also information related to Tx operations.
82
  *          gState value coding follow below described bitmap :
83
  *          gState value coding follow below described bitmap :
83
  *          b7-b6  Error information
84
  *          b7-b6  Error information
84
  *             00 : No Error
85
  *             00 : No Error
85
  *             01 : (Not Used)
86
  *             01 : (Not Used)
86
  *             10 : Timeout
87
  *             10 : Timeout
87
  *             11 : Error
88
  *             11 : Error
88
  *          b5     Peripheral initialization status
89
  *          b5     Peripheral initialization status
89
  *             0  : Reset (Peripheral not initialized)
90
  *             0  : Reset (Peripheral not initialized)
90
  *             1  : Init done (Peripheral initialized. HAL UART Init function already called)
91
  *             1  : Init done (Peripheral initialized. HAL UART Init function already called)
91
  *          b4-b3  (not used)
92
  *          b4-b3  (not used)
92
  *             xx : Should be set to 00
93
  *             xx : Should be set to 00
93
  *          b2     Intrinsic process state
94
  *          b2     Intrinsic process state
94
  *             0  : Ready
95
  *             0  : Ready
95
  *             1  : Busy (Peripheral busy with some configuration or internal operations)
96
  *             1  : Busy (Peripheral busy with some configuration or internal operations)
96
  *          b1     (not used)
97
  *          b1     (not used)
97
  *             x  : Should be set to 0
98
  *             x  : Should be set to 0
98
  *          b0     Tx state
99
  *          b0     Tx state
99
  *             0  : Ready (no Tx operation ongoing)
100
  *             0  : Ready (no Tx operation ongoing)
100
  *             1  : Busy (Tx operation ongoing)
101
  *             1  : Busy (Tx operation ongoing)
101
  *        - RxState contains information related to Rx operations.
102
  *        - RxState contains information related to Rx operations.
102
  *          RxState value coding follow below described bitmap :
103
  *          RxState value coding follow below described bitmap :
103
  *          b7-b6  (not used)
104
  *          b7-b6  (not used)
104
  *             xx : Should be set to 00
105
  *             xx : Should be set to 00
105
  *          b5     Peripheral initialization status
106
  *          b5     Peripheral initialization status
106
  *             0  : Reset (Peripheral not initialized)
107
  *             0  : Reset (Peripheral not initialized)
107
  *             1  : Init done (Peripheral initialized)
108
  *             1  : Init done (Peripheral initialized)
108
  *          b4-b2  (not used)
109
  *          b4-b2  (not used)
109
  *            xxx : Should be set to 000
110
  *            xxx : Should be set to 000
110
  *          b1     Rx state
111
  *          b1     Rx state
111
  *             0  : Ready (no Rx operation ongoing)
112
  *             0  : Ready (no Rx operation ongoing)
112
  *             1  : Busy (Rx operation ongoing)
113
  *             1  : Busy (Rx operation ongoing)
113
  *          b0     (not used)
114
  *          b0     (not used)
114
  *             x  : Should be set to 0.
115
  *             x  : Should be set to 0.
115
  */
116
  */
116
typedef enum
117
typedef enum
117
{
118
{
118
  HAL_UART_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet Initialized
119
  HAL_UART_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet Initialized
119
                                                   Value is allowed for gState and RxState */
120
                                                   Value is allowed for gState and RxState */
120
  HAL_UART_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use
121
  HAL_UART_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use
121
                                                   Value is allowed for gState and RxState */
122
                                                   Value is allowed for gState and RxState */
122
  HAL_UART_STATE_BUSY              = 0x24U,    /*!< an internal process is ongoing
123
  HAL_UART_STATE_BUSY              = 0x24U,    /*!< an internal process is ongoing
123
                                                   Value is allowed for gState only */
124
                                                   Value is allowed for gState only */
124
  HAL_UART_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoing
125
  HAL_UART_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoing
125
                                                   Value is allowed for gState only */
126
                                                   Value is allowed for gState only */
126
  HAL_UART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing
127
  HAL_UART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing
127
                                                   Value is allowed for RxState only */
128
                                                   Value is allowed for RxState only */
128
  HAL_UART_STATE_BUSY_TX_RX        = 0x23U,    /*!< Data Transmission and Reception process is ongoing
129
  HAL_UART_STATE_BUSY_TX_RX        = 0x23U,    /*!< Data Transmission and Reception process is ongoing
129
                                                   Not to be used for neither gState nor RxState.
130
                                                   Not to be used for neither gState nor RxState.
130
                                                   Value is result of combination (Or) between gState and RxState values */
131
                                                   Value is result of combination (Or) between gState and RxState values */
131
  HAL_UART_STATE_TIMEOUT           = 0xA0U,    /*!< Timeout state
132
  HAL_UART_STATE_TIMEOUT           = 0xA0U,    /*!< Timeout state
132
                                                   Value is allowed for gState only */
133
                                                   Value is allowed for gState only */
133
  HAL_UART_STATE_ERROR             = 0xE0U     /*!< Error
134
  HAL_UART_STATE_ERROR             = 0xE0U     /*!< Error
134
                                                   Value is allowed for gState only */
135
                                                   Value is allowed for gState only */
135
} HAL_UART_StateTypeDef;
136
} HAL_UART_StateTypeDef;
136
 
137
 
137
/**
138
/**
138
  * @brief HAL UART Reception type definition
139
  * @brief HAL UART Reception type definition
139
  * @note  HAL UART Reception type value aims to identify which type of Reception is ongoing.
140
  * @note  HAL UART Reception type value aims to identify which type of Reception is ongoing.
140
  *        This parameter can be a value of @ref UART_Reception_Type_Values :
141
  *        It is expected to admit following values :
141
  *           HAL_UART_RECEPTION_STANDARD         = 0x00U,
142
  *           HAL_UART_RECEPTION_STANDARD         = 0x00U,
142
  *           HAL_UART_RECEPTION_TOIDLE           = 0x01U,
143
  *           HAL_UART_RECEPTION_TOIDLE           = 0x01U,
143
  */
144
  */
144
typedef uint32_t HAL_UART_RxTypeTypeDef;
145
typedef uint32_t HAL_UART_RxTypeTypeDef;
145
 
146
 
146
/**
147
/**
147
  * @brief HAL UART Rx Event type definition
148
  * @brief  UART handle Structure definition
148
  * @note  HAL UART Rx Event type value aims to identify which type of Event has occurred
149
  */
149
  *        leading to call of the RxEvent callback.
150
typedef struct __UART_HandleTypeDef
150
  *        This parameter can be a value of @ref UART_RxEvent_Type_Values :
151
{
151
  *           HAL_UART_RXEVENT_TC                 = 0x00U,
152
  USART_TypeDef                 *Instance;        /*!< UART registers base address        */
152
  *           HAL_UART_RXEVENT_HT                 = 0x01U,
153
 
153
  *           HAL_UART_RXEVENT_IDLE               = 0x02U,
154
  UART_InitTypeDef              Init;             /*!< UART communication parameters      */
154
  */
155
 
155
typedef uint32_t HAL_UART_RxEventTypeTypeDef;
156
  uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */
156
 
157
 
157
/**
158
  uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */
158
  * @brief  UART handle Structure definition
159
 
159
  */
160
  __IO uint16_t                 TxXferCount;      /*!< UART Tx Transfer Counter           */
160
typedef struct __UART_HandleTypeDef
161
 
161
{
162
  uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */
162
  USART_TypeDef                 *Instance;        /*!< UART registers base address        */
163
 
163
 
164
  uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */
164
  UART_InitTypeDef              Init;             /*!< UART communication parameters      */
165
 
165
 
166
  __IO uint16_t                 RxXferCount;      /*!< UART Rx Transfer Counter           */
166
  const uint8_t                 *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */
167
 
167
 
168
  __IO HAL_UART_RxTypeTypeDef ReceptionType;      /*!< Type of ongoing reception          */
168
  uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */
169
 
169
 
170
  DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */
170
  __IO uint16_t                 TxXferCount;      /*!< UART Tx Transfer Counter           */
171
 
171
 
172
  DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */
172
  uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */
173
 
173
 
174
  HAL_LockTypeDef               Lock;             /*!< Locking object                     */
174
  uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */
175
 
175
 
176
  __IO HAL_UART_StateTypeDef    gState;           /*!< UART state information related to global Handle management
176
  __IO uint16_t                 RxXferCount;      /*!< UART Rx Transfer Counter           */
177
                                                       and also related to Tx operations.
177
 
178
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
178
  __IO HAL_UART_RxTypeTypeDef ReceptionType;      /*!< Type of ongoing reception          */
179
 
179
 
180
  __IO HAL_UART_StateTypeDef    RxState;          /*!< UART state information related to Rx operations.
180
  __IO HAL_UART_RxEventTypeTypeDef RxEventType;   /*!< Type of Rx Event                   */
181
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
181
 
182
 
182
  DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */
183
  __IO uint32_t                 ErrorCode;        /*!< UART Error code                    */
183
 
184
 
184
  DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */
185
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
185
 
186
  void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Tx Half Complete Callback        */
186
  HAL_LockTypeDef               Lock;             /*!< Locking object                     */
187
  void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Tx Complete Callback             */
187
 
188
  void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Rx Half Complete Callback        */
188
  __IO HAL_UART_StateTypeDef    gState;           /*!< UART state information related to global Handle management
189
  void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Rx Complete Callback             */
189
                                                       and also related to Tx operations.
190
  void (* ErrorCallback)(struct __UART_HandleTypeDef *huart);             /*!< UART Error Callback                   */
190
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
191
  void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Abort Complete Callback          */
191
 
192
  void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */
192
  __IO HAL_UART_StateTypeDef    RxState;          /*!< UART state information related to Rx operations.
193
  void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart);  /*!< UART Abort Receive Complete Callback  */
193
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
194
  void (* WakeupCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Wakeup Callback                  */
194
 
195
  void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback     */
195
  __IO uint32_t                 ErrorCode;        /*!< UART Error code                    */
196
 
196
 
197
  void (* MspInitCallback)(struct __UART_HandleTypeDef *huart);           /*!< UART Msp Init callback                */
197
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
198
  void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Msp DeInit callback              */
198
  void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Tx Half Complete Callback        */
199
#endif  /* USE_HAL_UART_REGISTER_CALLBACKS */
199
  void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Tx Complete Callback             */
200
 
200
  void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Rx Half Complete Callback        */
201
} UART_HandleTypeDef;
201
  void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Rx Complete Callback             */
202
 
202
  void (* ErrorCallback)(struct __UART_HandleTypeDef *huart);             /*!< UART Error Callback                   */
203
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
203
  void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Abort Complete Callback          */
204
/**
204
  void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */
205
  * @brief  HAL UART Callback ID enumeration definition
205
  void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart);  /*!< UART Abort Receive Complete Callback  */
206
  */
206
  void (* WakeupCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Wakeup Callback                  */
207
typedef enum
207
  void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback     */
208
{
208
 
209
  HAL_UART_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< UART Tx Half Complete Callback ID        */
209
  void (* MspInitCallback)(struct __UART_HandleTypeDef *huart);           /*!< UART Msp Init callback                */
210
  HAL_UART_TX_COMPLETE_CB_ID             = 0x01U,    /*!< UART Tx Complete Callback ID             */
210
  void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Msp DeInit callback              */
211
  HAL_UART_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< UART Rx Half Complete Callback ID        */
211
#endif  /* USE_HAL_UART_REGISTER_CALLBACKS */
212
  HAL_UART_RX_COMPLETE_CB_ID             = 0x03U,    /*!< UART Rx Complete Callback ID             */
212
 
213
  HAL_UART_ERROR_CB_ID                   = 0x04U,    /*!< UART Error Callback ID                   */
213
} UART_HandleTypeDef;
214
  HAL_UART_ABORT_COMPLETE_CB_ID          = 0x05U,    /*!< UART Abort Complete Callback ID          */
214
 
215
  HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U,    /*!< UART Abort Transmit Complete Callback ID */
215
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
216
  HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x07U,    /*!< UART Abort Receive Complete Callback ID  */
216
/**
217
  HAL_UART_WAKEUP_CB_ID                  = 0x08U,    /*!< UART Wakeup Callback ID                  */
217
  * @brief  HAL UART Callback ID enumeration definition
218
 
218
  */
219
  HAL_UART_MSPINIT_CB_ID                 = 0x0BU,    /*!< UART MspInit callback ID                 */
219
typedef enum
220
  HAL_UART_MSPDEINIT_CB_ID               = 0x0CU     /*!< UART MspDeInit callback ID               */
220
{
221
 
221
  HAL_UART_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< UART Tx Half Complete Callback ID        */
222
} HAL_UART_CallbackIDTypeDef;
222
  HAL_UART_TX_COMPLETE_CB_ID             = 0x01U,    /*!< UART Tx Complete Callback ID             */
223
 
223
  HAL_UART_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< UART Rx Half Complete Callback ID        */
224
/**
224
  HAL_UART_RX_COMPLETE_CB_ID             = 0x03U,    /*!< UART Rx Complete Callback ID             */
225
  * @brief  HAL UART Callback pointer definition
225
  HAL_UART_ERROR_CB_ID                   = 0x04U,    /*!< UART Error Callback ID                   */
226
  */
226
  HAL_UART_ABORT_COMPLETE_CB_ID          = 0x05U,    /*!< UART Abort Complete Callback ID          */
227
typedef  void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart);  /*!< pointer to an UART callback function */
227
  HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U,    /*!< UART Abort Transmit Complete Callback ID */
228
typedef  void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos);   /*!< pointer to a UART Rx Event specific callback function */
228
  HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x07U,    /*!< UART Abort Receive Complete Callback ID  */
229
 
229
  HAL_UART_WAKEUP_CB_ID                  = 0x08U,    /*!< UART Wakeup Callback ID                  */
230
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
230
 
231
 
231
  HAL_UART_MSPINIT_CB_ID                 = 0x0BU,    /*!< UART MspInit callback ID                 */
232
/**
232
  HAL_UART_MSPDEINIT_CB_ID               = 0x0CU     /*!< UART MspDeInit callback ID               */
233
  * @}
233
 
234
  */
234
} HAL_UART_CallbackIDTypeDef;
235
 
235
 
236
/* Exported constants --------------------------------------------------------*/
236
/**
237
/** @defgroup UART_Exported_Constants UART Exported Constants
237
  * @brief  HAL UART Callback pointer definition
238
  * @{
238
  */
239
  */
239
typedef  void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart);  /*!< pointer to an UART callback function */
240
 
240
typedef  void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos);   /*!< pointer to a UART Rx Event specific callback function */
241
/** @defgroup UART_Error_Code UART Error Code
241
 
242
  * @{
242
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
243
  */
243
 
244
#define HAL_UART_ERROR_NONE              0x00000000U   /*!< No error            */
244
/**
245
#define HAL_UART_ERROR_PE                0x00000001U   /*!< Parity error        */
245
  * @}
246
#define HAL_UART_ERROR_NE                0x00000002U   /*!< Noise error         */
246
  */
247
#define HAL_UART_ERROR_FE                0x00000004U   /*!< Frame error         */
247
 
248
#define HAL_UART_ERROR_ORE               0x00000008U   /*!< Overrun error       */
248
/* Exported constants --------------------------------------------------------*/
249
#define HAL_UART_ERROR_DMA               0x00000010U   /*!< DMA transfer error  */
249
/** @defgroup UART_Exported_Constants UART Exported Constants
250
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
250
  * @{
251
#define  HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U   /*!< Invalid Callback error  */
251
  */
252
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
252
 
253
/**
253
/** @defgroup UART_Error_Code UART Error Code
254
  * @}
254
  * @{
255
  */
255
  */
256
 
256
#define HAL_UART_ERROR_NONE              0x00000000U   /*!< No error            */
257
/** @defgroup UART_Word_Length UART Word Length
257
#define HAL_UART_ERROR_PE                0x00000001U   /*!< Parity error        */
258
  * @{
258
#define HAL_UART_ERROR_NE                0x00000002U   /*!< Noise error         */
259
  */
259
#define HAL_UART_ERROR_FE                0x00000004U   /*!< Frame error         */
260
#define UART_WORDLENGTH_8B                  0x00000000U
260
#define HAL_UART_ERROR_ORE               0x00000008U   /*!< Overrun error       */
261
#define UART_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M)
261
#define HAL_UART_ERROR_DMA               0x00000010U   /*!< DMA transfer error  */
262
/**
262
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
263
  * @}
263
#define  HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U   /*!< Invalid Callback error  */
264
  */
264
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
265
 
265
/**
266
/** @defgroup UART_Stop_Bits UART Number of Stop Bits
266
  * @}
267
  * @{
267
  */
268
  */
268
 
269
#define UART_STOPBITS_1                     0x00000000U
269
/** @defgroup UART_Word_Length UART Word Length
270
#define UART_STOPBITS_2                     ((uint32_t)USART_CR2_STOP_1)
270
  * @{
271
/**
271
  */
272
  * @}
272
#define UART_WORDLENGTH_8B                  0x00000000U
273
  */
273
#define UART_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M)
274
 
274
/**
275
/** @defgroup UART_Parity UART Parity
275
  * @}
276
  * @{
276
  */
277
  */
277
 
278
#define UART_PARITY_NONE                    0x00000000U
278
/** @defgroup UART_Stop_Bits UART Number of Stop Bits
279
#define UART_PARITY_EVEN                    ((uint32_t)USART_CR1_PCE)
279
  * @{
280
#define UART_PARITY_ODD                     ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
280
  */
281
/**
281
#define UART_STOPBITS_1                     0x00000000U
282
  * @}
282
#define UART_STOPBITS_2                     ((uint32_t)USART_CR2_STOP_1)
283
  */
283
/**
284
 
284
  * @}
285
/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control
285
  */
286
  * @{
286
 
287
  */
287
/** @defgroup UART_Parity UART Parity
288
#define UART_HWCONTROL_NONE                  0x00000000U
288
  * @{
289
#define UART_HWCONTROL_RTS                   ((uint32_t)USART_CR3_RTSE)
289
  */
290
#define UART_HWCONTROL_CTS                   ((uint32_t)USART_CR3_CTSE)
290
#define UART_PARITY_NONE                    0x00000000U
291
#define UART_HWCONTROL_RTS_CTS               ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE))
291
#define UART_PARITY_EVEN                    ((uint32_t)USART_CR1_PCE)
292
/**
292
#define UART_PARITY_ODD                     ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
293
  * @}
293
/**
294
  */
294
  * @}
295
 
295
  */
296
/** @defgroup UART_Mode UART Transfer Mode
296
 
297
  * @{
297
/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control
298
  */
298
  * @{
299
#define UART_MODE_RX                        ((uint32_t)USART_CR1_RE)
299
  */
300
#define UART_MODE_TX                        ((uint32_t)USART_CR1_TE)
300
#define UART_HWCONTROL_NONE                  0x00000000U
301
#define UART_MODE_TX_RX                     ((uint32_t)(USART_CR1_TE | USART_CR1_RE))
301
#define UART_HWCONTROL_RTS                   ((uint32_t)USART_CR3_RTSE)
302
/**
302
#define UART_HWCONTROL_CTS                   ((uint32_t)USART_CR3_CTSE)
303
  * @}
303
#define UART_HWCONTROL_RTS_CTS               ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE))
304
  */
304
/**
305
 
305
  * @}
306
/** @defgroup UART_State UART State
306
  */
307
  * @{
307
 
308
  */
308
/** @defgroup UART_Mode UART Transfer Mode
309
#define UART_STATE_DISABLE                  0x00000000U
309
  * @{
310
#define UART_STATE_ENABLE                   ((uint32_t)USART_CR1_UE)
310
  */
311
/**
311
#define UART_MODE_RX                        ((uint32_t)USART_CR1_RE)
312
  * @}
312
#define UART_MODE_TX                        ((uint32_t)USART_CR1_TE)
313
  */
313
#define UART_MODE_TX_RX                     ((uint32_t)(USART_CR1_TE | USART_CR1_RE))
314
 
314
/**
315
/** @defgroup UART_Over_Sampling UART Over Sampling
315
  * @}
316
  * @{
316
  */
317
  */
317
 
318
#define UART_OVERSAMPLING_16                    0x00000000U
318
/** @defgroup UART_State UART State
319
#if defined(USART_CR1_OVER8)
319
  * @{
320
#define UART_OVERSAMPLING_8                     ((uint32_t)USART_CR1_OVER8)
320
  */
321
#endif /* USART_CR1_OVER8 */
321
#define UART_STATE_DISABLE                  0x00000000U
322
/**
322
#define UART_STATE_ENABLE                   ((uint32_t)USART_CR1_UE)
323
  * @}
323
/**
324
  */
324
  * @}
325
 
325
  */
326
/** @defgroup UART_LIN_Break_Detection_Length  UART LIN Break Detection Length
326
 
327
  * @{
327
/** @defgroup UART_Over_Sampling UART Over Sampling
328
  */
328
  * @{
329
#define UART_LINBREAKDETECTLENGTH_10B      0x00000000U
329
  */
330
#define UART_LINBREAKDETECTLENGTH_11B      ((uint32_t)USART_CR2_LBDL)
330
#define UART_OVERSAMPLING_16                    0x00000000U
331
/**
331
#if defined(USART_CR1_OVER8)
332
  * @}
332
#define UART_OVERSAMPLING_8                     ((uint32_t)USART_CR1_OVER8)
333
  */
333
#endif /* USART_CR1_OVER8 */
334
 
334
/**
335
/** @defgroup UART_WakeUp_functions  UART Wakeup Functions
335
  * @}
336
  * @{
336
  */
337
  */
337
 
338
#define UART_WAKEUPMETHOD_IDLELINE                0x00000000U
338
/** @defgroup UART_LIN_Break_Detection_Length  UART LIN Break Detection Length
339
#define UART_WAKEUPMETHOD_ADDRESSMARK             ((uint32_t)USART_CR1_WAKE)
339
  * @{
340
/**
340
  */
341
  * @}
341
#define UART_LINBREAKDETECTLENGTH_10B      0x00000000U
342
  */
342
#define UART_LINBREAKDETECTLENGTH_11B      ((uint32_t)USART_CR2_LBDL)
343
 
343
/**
344
/** @defgroup UART_Flags   UART FLags
344
  * @}
345
  *        Elements values convention: 0xXXXX
345
  */
346
  *           - 0xXXXX  : Flag mask in the SR register
346
 
347
  * @{
347
/** @defgroup UART_WakeUp_functions  UART Wakeup Functions
348
  */
348
  * @{
349
#define UART_FLAG_CTS                       ((uint32_t)USART_SR_CTS)
349
  */
350
#define UART_FLAG_LBD                       ((uint32_t)USART_SR_LBD)
350
#define UART_WAKEUPMETHOD_IDLELINE                0x00000000U
351
#define UART_FLAG_TXE                       ((uint32_t)USART_SR_TXE)
351
#define UART_WAKEUPMETHOD_ADDRESSMARK             ((uint32_t)USART_CR1_WAKE)
352
#define UART_FLAG_TC                        ((uint32_t)USART_SR_TC)
352
/**
353
#define UART_FLAG_RXNE                      ((uint32_t)USART_SR_RXNE)
353
  * @}
354
#define UART_FLAG_IDLE                      ((uint32_t)USART_SR_IDLE)
354
  */
355
#define UART_FLAG_ORE                       ((uint32_t)USART_SR_ORE)
355
 
356
#define UART_FLAG_NE                        ((uint32_t)USART_SR_NE)
356
/** @defgroup UART_Flags   UART FLags
357
#define UART_FLAG_FE                        ((uint32_t)USART_SR_FE)
357
  *        Elements values convention: 0xXXXX
358
#define UART_FLAG_PE                        ((uint32_t)USART_SR_PE)
358
  *           - 0xXXXX  : Flag mask in the SR register
359
/**
359
  * @{
360
  * @}
360
  */
361
  */
361
#define UART_FLAG_CTS                       ((uint32_t)USART_SR_CTS)
362
 
362
#define UART_FLAG_LBD                       ((uint32_t)USART_SR_LBD)
363
/** @defgroup UART_Interrupt_definition  UART Interrupt Definitions
363
#define UART_FLAG_TXE                       ((uint32_t)USART_SR_TXE)
364
  *        Elements values convention: 0xY000XXXX
364
#define UART_FLAG_TC                        ((uint32_t)USART_SR_TC)
365
  *           - XXXX  : Interrupt mask (16 bits) in the Y register
365
#define UART_FLAG_RXNE                      ((uint32_t)USART_SR_RXNE)
366
  *           - Y  : Interrupt source register (2bits)
366
#define UART_FLAG_IDLE                      ((uint32_t)USART_SR_IDLE)
367
  *                   - 0001: CR1 register
367
#define UART_FLAG_ORE                       ((uint32_t)USART_SR_ORE)
368
  *                   - 0010: CR2 register
368
#define UART_FLAG_NE                        ((uint32_t)USART_SR_NE)
369
  *                   - 0011: CR3 register
369
#define UART_FLAG_FE                        ((uint32_t)USART_SR_FE)
370
  * @{
370
#define UART_FLAG_PE                        ((uint32_t)USART_SR_PE)
371
  */
371
/**
372
 
372
  * @}
373
#define UART_IT_PE                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
373
  */
374
#define UART_IT_TXE                      ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
374
 
375
#define UART_IT_TC                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
375
/** @defgroup UART_Interrupt_definition  UART Interrupt Definitions
376
#define UART_IT_RXNE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
376
  *        Elements values convention: 0xY000XXXX
377
#define UART_IT_IDLE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
377
  *           - XXXX  : Interrupt mask (16 bits) in the Y register
378
 
378
  *           - Y  : Interrupt source register (2bits)
379
#define UART_IT_LBD                      ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))
379
  *                   - 0001: CR1 register
380
 
380
  *                   - 0010: CR2 register
381
#define UART_IT_CTS                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))
381
  *                   - 0011: CR3 register
382
#define UART_IT_ERR                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE))
382
  * @{
383
/**
383
  */
384
  * @}
384
 
385
  */
385
#define UART_IT_PE                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
386
 
386
#define UART_IT_TXE                      ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
387
/** @defgroup UART_RECEPTION_TYPE_Values  UART Reception type values
387
#define UART_IT_TC                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
388
  * @{
388
#define UART_IT_RXNE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
389
  */
389
#define UART_IT_IDLE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
390
#define HAL_UART_RECEPTION_STANDARD          (0x00000000U)             /*!< Standard reception                       */
390
 
391
#define HAL_UART_RECEPTION_TOIDLE            (0x00000001U)             /*!< Reception till completion or IDLE event  */
391
#define UART_IT_LBD                      ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))
392
/**
392
 
393
  * @}
393
#define UART_IT_CTS                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))
394
  */
394
#define UART_IT_ERR                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE))
395
 
395
/**
396
/**
396
  * @}
397
  * @}
397
  */
398
  */
398
 
399
 
399
/** @defgroup UART_Reception_Type_Values  UART Reception type values
400
/* Exported macro ------------------------------------------------------------*/
400
  * @{
401
/** @defgroup UART_Exported_Macros UART Exported Macros
401
  */
402
  * @{
402
#define HAL_UART_RECEPTION_STANDARD          (0x00000000U)             /*!< Standard reception                       */
403
  */
403
#define HAL_UART_RECEPTION_TOIDLE            (0x00000001U)             /*!< Reception till completion or IDLE event  */
404
 
404
/**
405
/** @brief Reset UART handle gstate & RxState
405
  * @}
406
  * @param  __HANDLE__ specifies the UART Handle.
406
  */
407
  *         UART Handle selects the USARTx or UARTy peripheral
407
 
408
  *         (USART,UART availability and x,y values depending on device).
408
/** @defgroup UART_RxEvent_Type_Values  UART RxEvent type values
409
  * @retval None
409
  * @{
410
  */
410
  */
411
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
411
#define HAL_UART_RXEVENT_TC                  (0x00000000U)             /*!< RxEvent linked to Transfer Complete event */
412
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
412
#define HAL_UART_RXEVENT_HT                  (0x00000001U)             /*!< RxEvent linked to Half Transfer event     */
413
                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
413
#define HAL_UART_RXEVENT_IDLE                (0x00000002U)
414
                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
414
/**
415
                                                       (__HANDLE__)->MspInitCallback = NULL;             \
415
  * @}
416
                                                       (__HANDLE__)->MspDeInitCallback = NULL;           \
416
  */
417
                                                     } while(0U)
417
 
418
#else
418
/**
419
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
419
  * @}
420
                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
420
  */
421
                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
421
 
422
                                                     } while(0U)
422
/* Exported macro ------------------------------------------------------------*/
423
#endif /*USE_HAL_UART_REGISTER_CALLBACKS */
423
/** @defgroup UART_Exported_Macros UART Exported Macros
424
 
424
  * @{
425
/** @brief  Flushes the UART DR register
425
  */
426
  * @param  __HANDLE__ specifies the UART Handle.
426
 
427
  *         UART Handle selects the USARTx or UARTy peripheral
427
/** @brief Reset UART handle gstate & RxState
428
  *         (USART,UART availability and x,y values depending on device).
428
  * @param  __HANDLE__ specifies the UART Handle.
429
  */
429
  *         UART Handle selects the USARTx or UARTy peripheral
430
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
430
  *         (USART,UART availability and x,y values depending on device).
431
 
431
  * @retval None
432
/** @brief  Checks whether the specified UART flag is set or not.
432
  */
433
  * @param  __HANDLE__ specifies the UART Handle.
433
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
434
  *         UART Handle selects the USARTx or UARTy peripheral
434
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
435
  *         (USART,UART availability and x,y values depending on device).
435
                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
436
  * @param  __FLAG__ specifies the flag to check.
436
                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
437
  *        This parameter can be one of the following values:
437
                                                       (__HANDLE__)->MspInitCallback = NULL;             \
438
  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5)
438
                                                       (__HANDLE__)->MspDeInitCallback = NULL;           \
439
  *            @arg UART_FLAG_LBD:  LIN Break detection flag
439
                                                     } while(0U)
440
  *            @arg UART_FLAG_TXE:  Transmit data register empty flag
440
#else
441
  *            @arg UART_FLAG_TC:   Transmission Complete flag
441
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
442
  *            @arg UART_FLAG_RXNE: Receive data register not empty flag
442
                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
443
  *            @arg UART_FLAG_IDLE: Idle Line detection flag
443
                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
444
  *            @arg UART_FLAG_ORE:  Overrun Error flag
444
                                                     } while(0U)
445
  *            @arg UART_FLAG_NE:   Noise Error flag
445
#endif /*USE_HAL_UART_REGISTER_CALLBACKS */
446
  *            @arg UART_FLAG_FE:   Framing Error flag
446
 
447
  *            @arg UART_FLAG_PE:   Parity Error flag
447
/** @brief  Flushes the UART DR register
448
  * @retval The new state of __FLAG__ (TRUE or FALSE).
448
  * @param  __HANDLE__ specifies the UART Handle.
449
  */
449
  *         UART Handle selects the USARTx or UARTy peripheral
450
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
450
  *         (USART,UART availability and x,y values depending on device).
451
 
451
  */
452
/** @brief  Clears the specified UART pending flag.
452
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
453
  * @param  __HANDLE__ specifies the UART Handle.
453
 
454
  *         UART Handle selects the USARTx or UARTy peripheral
454
/** @brief  Checks whether the specified UART flag is set or not.
455
  *         (USART,UART availability and x,y values depending on device).
455
  * @param  __HANDLE__ specifies the UART Handle.
456
  * @param  __FLAG__ specifies the flag to check.
456
  *         UART Handle selects the USARTx or UARTy peripheral
457
  *          This parameter can be any combination of the following values:
457
  *         (USART,UART availability and x,y values depending on device).
458
  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5).
458
  * @param  __FLAG__ specifies the flag to check.
459
  *            @arg UART_FLAG_LBD:  LIN Break detection flag.
459
  *        This parameter can be one of the following values:
460
  *            @arg UART_FLAG_TC:   Transmission Complete flag.
460
  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5)
461
  *            @arg UART_FLAG_RXNE: Receive data register not empty flag.
461
  *            @arg UART_FLAG_LBD:  LIN Break detection flag
462
  *
462
  *            @arg UART_FLAG_TXE:  Transmit data register empty flag
463
  * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun
463
  *            @arg UART_FLAG_TC:   Transmission Complete flag
464
  *          error) and IDLE (Idle line detected) flags are cleared by software
464
  *            @arg UART_FLAG_RXNE: Receive data register not empty flag
465
  *          sequence: a read operation to USART_SR register followed by a read
465
  *            @arg UART_FLAG_IDLE: Idle Line detection flag
466
  *          operation to USART_DR register.
466
  *            @arg UART_FLAG_ORE:  Overrun Error flag
467
  * @note   RXNE flag can be also cleared by a read to the USART_DR register.
467
  *            @arg UART_FLAG_NE:   Noise Error flag
468
  * @note   TC flag can be also cleared by software sequence: a read operation to
468
  *            @arg UART_FLAG_FE:   Framing Error flag
469
  *          USART_SR register followed by a write operation to USART_DR register.
469
  *            @arg UART_FLAG_PE:   Parity Error flag
470
  * @note   TXE flag is cleared only by a write to the USART_DR register.
470
  * @retval The new state of __FLAG__ (TRUE or FALSE).
471
  *
471
  */
472
  * @retval None
472
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
473
  */
473
 
474
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
474
/** @brief  Clears the specified UART pending flag.
475
 
475
  * @param  __HANDLE__ specifies the UART Handle.
476
/** @brief  Clears the UART PE pending flag.
476
  *         UART Handle selects the USARTx or UARTy peripheral
477
  * @param  __HANDLE__ specifies the UART Handle.
477
  *         (USART,UART availability and x,y values depending on device).
478
  *         UART Handle selects the USARTx or UARTy peripheral
478
  * @param  __FLAG__ specifies the flag to check.
479
  *         (USART,UART availability and x,y values depending on device).
479
  *          This parameter can be any combination of the following values:
480
  * @retval None
480
  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5).
481
  */
481
  *            @arg UART_FLAG_LBD:  LIN Break detection flag.
482
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)     \
482
  *            @arg UART_FLAG_TC:   Transmission Complete flag.
483
  do{                                           \
483
  *            @arg UART_FLAG_RXNE: Receive data register not empty flag.
484
    __IO uint32_t tmpreg = 0x00U;               \
484
  *
485
    tmpreg = (__HANDLE__)->Instance->SR;        \
485
  * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun
486
    tmpreg = (__HANDLE__)->Instance->DR;        \
486
  *          error) and IDLE (Idle line detected) flags are cleared by software
487
    UNUSED(tmpreg);                             \
487
  *          sequence: a read operation to USART_SR register followed by a read
488
  } while(0U)
488
  *          operation to USART_DR register.
489
 
489
  * @note   RXNE flag can be also cleared by a read to the USART_DR register.
490
/** @brief  Clears the UART FE pending flag.
490
  * @note   TC flag can be also cleared by software sequence: a read operation to
491
  * @param  __HANDLE__ specifies the UART Handle.
491
  *          USART_SR register followed by a write operation to USART_DR register.
492
  *         UART Handle selects the USARTx or UARTy peripheral
492
  * @note   TXE flag is cleared only by a write to the USART_DR register.
493
  *         (USART,UART availability and x,y values depending on device).
493
  *
494
  * @retval None
494
  * @retval None
495
  */
495
  */
496
#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
496
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
497
 
497
 
498
/** @brief  Clears the UART NE pending flag.
498
/** @brief  Clears the UART PE pending flag.
499
  * @param  __HANDLE__ specifies the UART Handle.
499
  * @param  __HANDLE__ specifies the UART Handle.
500
  *         UART Handle selects the USARTx or UARTy peripheral
500
  *         UART Handle selects the USARTx or UARTy peripheral
501
  *         (USART,UART availability and x,y values depending on device).
501
  *         (USART,UART availability and x,y values depending on device).
502
  * @retval None
502
  * @retval None
503
  */
503
  */
504
#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
504
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)     \
505
 
505
  do{                                           \
506
/** @brief  Clears the UART ORE pending flag.
506
    __IO uint32_t tmpreg = 0x00U;               \
507
  * @param  __HANDLE__ specifies the UART Handle.
507
    tmpreg = (__HANDLE__)->Instance->SR;        \
508
  *         UART Handle selects the USARTx or UARTy peripheral
508
    tmpreg = (__HANDLE__)->Instance->DR;        \
509
  *         (USART,UART availability and x,y values depending on device).
509
    UNUSED(tmpreg);                             \
510
  * @retval None
510
  } while(0U)
511
  */
511
 
512
#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
512
/** @brief  Clears the UART FE pending flag.
513
 
513
  * @param  __HANDLE__ specifies the UART Handle.
514
/** @brief  Clears the UART IDLE pending flag.
514
  *         UART Handle selects the USARTx or UARTy peripheral
515
  * @param  __HANDLE__ specifies the UART Handle.
515
  *         (USART,UART availability and x,y values depending on device).
516
  *         UART Handle selects the USARTx or UARTy peripheral
516
  * @retval None
517
  *         (USART,UART availability and x,y values depending on device).
517
  */
518
  * @retval None
518
#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
519
  */
519
 
520
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
520
/** @brief  Clears the UART NE pending flag.
521
 
521
  * @param  __HANDLE__ specifies the UART Handle.
522
/** @brief  Enable the specified UART interrupt.
522
  *         UART Handle selects the USARTx or UARTy peripheral
523
  * @param  __HANDLE__ specifies the UART Handle.
523
  *         (USART,UART availability and x,y values depending on device).
524
  *         UART Handle selects the USARTx or UARTy peripheral
524
  * @retval None
525
  *         (USART,UART availability and x,y values depending on device).
525
  */
526
  * @param  __INTERRUPT__ specifies the UART interrupt source to enable.
526
#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
527
  *          This parameter can be one of the following values:
527
 
528
  *            @arg UART_IT_CTS:  CTS change interrupt
528
/** @brief  Clears the UART ORE pending flag.
529
  *            @arg UART_IT_LBD:  LIN Break detection interrupt
529
  * @param  __HANDLE__ specifies the UART Handle.
530
  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt
530
  *         UART Handle selects the USARTx or UARTy peripheral
531
  *            @arg UART_IT_TC:   Transmission complete interrupt
531
  *         (USART,UART availability and x,y values depending on device).
532
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
532
  * @retval None
533
  *            @arg UART_IT_IDLE: Idle line detection interrupt
533
  */
534
  *            @arg UART_IT_PE:   Parity Error interrupt
534
#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
535
  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
535
 
536
  * @retval None
536
/** @brief  Clears the UART IDLE pending flag.
537
  */
537
  * @param  __HANDLE__ specifies the UART Handle.
538
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \
538
  *         UART Handle selects the USARTx or UARTy peripheral
539
                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \
539
  *         (USART,UART availability and x,y values depending on device).
540
                                                           ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK)))
540
  * @retval None
541
 
541
  */
542
/** @brief  Disable the specified UART interrupt.
542
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
543
  * @param  __HANDLE__ specifies the UART Handle.
543
 
544
  *         UART Handle selects the USARTx or UARTy peripheral
544
/** @brief  Enable the specified UART interrupt.
545
  *         (USART,UART availability and x,y values depending on device).
545
  * @param  __HANDLE__ specifies the UART Handle.
546
  * @param  __INTERRUPT__ specifies the UART interrupt source to disable.
546
  *         UART Handle selects the USARTx or UARTy peripheral
547
  *          This parameter can be one of the following values:
547
  *         (USART,UART availability and x,y values depending on device).
548
  *            @arg UART_IT_CTS:  CTS change interrupt
548
  * @param  __INTERRUPT__ specifies the UART interrupt source to enable.
549
  *            @arg UART_IT_LBD:  LIN Break detection interrupt
549
  *          This parameter can be one of the following values:
550
  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt
550
  *            @arg UART_IT_CTS:  CTS change interrupt
551
  *            @arg UART_IT_TC:   Transmission complete interrupt
551
  *            @arg UART_IT_LBD:  LIN Break detection interrupt
552
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
552
  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt
553
  *            @arg UART_IT_IDLE: Idle line detection interrupt
553
  *            @arg UART_IT_TC:   Transmission complete interrupt
554
  *            @arg UART_IT_PE:   Parity Error interrupt
554
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
555
  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
555
  *            @arg UART_IT_IDLE: Idle line detection interrupt
556
  * @retval None
556
  *            @arg UART_IT_PE:   Parity Error interrupt
557
  */
557
  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
558
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
558
  * @retval None
559
                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
559
  */
560
                                                           ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK)))
560
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \
561
 
561
                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \
562
/** @brief  Checks whether the specified UART interrupt source is enabled or not.
562
                                                           ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK)))
563
  * @param  __HANDLE__ specifies the UART Handle.
563
 
564
  *         UART Handle selects the USARTx or UARTy peripheral
564
/** @brief  Disable the specified UART interrupt.
565
  *         (USART,UART availability and x,y values depending on device).
565
  * @param  __HANDLE__ specifies the UART Handle.
566
  * @param  __IT__ specifies the UART interrupt source to check.
566
  *         UART Handle selects the USARTx or UARTy peripheral
567
  *          This parameter can be one of the following values:
567
  *         (USART,UART availability and x,y values depending on device).
568
  *            @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
568
  * @param  __INTERRUPT__ specifies the UART interrupt source to disable.
569
  *            @arg UART_IT_LBD: LIN Break detection interrupt
569
  *          This parameter can be one of the following values:
570
  *            @arg UART_IT_TXE: Transmit Data Register empty interrupt
570
  *            @arg UART_IT_CTS:  CTS change interrupt
571
  *            @arg UART_IT_TC:  Transmission complete interrupt
571
  *            @arg UART_IT_LBD:  LIN Break detection interrupt
572
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
572
  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt
573
  *            @arg UART_IT_IDLE: Idle line detection interrupt
573
  *            @arg UART_IT_TC:   Transmission complete interrupt
574
  *            @arg UART_IT_ERR: Error interrupt
574
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
575
  * @retval The new state of __IT__ (TRUE or FALSE).
575
  *            @arg UART_IT_IDLE: Idle line detection interrupt
576
  */
576
  *            @arg UART_IT_PE:   Parity Error interrupt
577
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \
577
  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
578
                                                      (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK))
578
  * @retval None
579
 
579
  */
580
/** @brief  Enable CTS flow control
580
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
581
  * @note   This macro allows to enable CTS hardware flow control for a given UART instance,
581
                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
582
  *         without need to call HAL_UART_Init() function.
582
                                                           ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK)))
583
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
583
 
584
  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
584
/** @brief  Checks whether the specified UART interrupt source is enabled or not.
585
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
585
  * @param  __HANDLE__ specifies the UART Handle.
586
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
586
  *         UART Handle selects the USARTx or UARTy peripheral
587
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
587
  *         (USART,UART availability and x,y values depending on device).
588
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
588
  * @param  __IT__ specifies the UART interrupt source to check.
589
  * @param  __HANDLE__ specifies the UART Handle.
589
  *          This parameter can be one of the following values:
590
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
590
  *            @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
591
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
591
  *            @arg UART_IT_LBD: LIN Break detection interrupt
592
  * @retval None
592
  *            @arg UART_IT_TXE: Transmit Data Register empty interrupt
593
  */
593
  *            @arg UART_IT_TC:  Transmission complete interrupt
594
#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__)        \
594
  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt
595
  do{                                                      \
595
  *            @arg UART_IT_IDLE: Idle line detection interrupt
596
    SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE);  \
596
  *            @arg UART_IT_ERR: Error interrupt
597
    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE;        \
597
  * @retval The new state of __IT__ (TRUE or FALSE).
598
  } while(0U)
598
  */
599
 
599
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \
600
/** @brief  Disable CTS flow control
600
                                                       (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK))
601
  * @note   This macro allows to disable CTS hardware flow control for a given UART instance,
601
 
602
  *         without need to call HAL_UART_Init() function.
602
/** @brief  Enable CTS flow control
603
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
603
  * @note   This macro allows to enable CTS hardware flow control for a given UART instance,
604
  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
604
  *         without need to call HAL_UART_Init() function.
605
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
605
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
606
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
606
  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
607
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
607
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
608
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
608
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
609
  * @param  __HANDLE__ specifies the UART Handle.
609
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
610
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
610
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
611
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
611
  * @param  __HANDLE__ specifies the UART Handle.
612
  * @retval None
612
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
613
  */
613
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
614
#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__)        \
614
  * @retval None
615
  do{                                                       \
615
  */
616
    CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \
616
#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__)        \
617
    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE);      \
617
  do{                                                      \
618
  } while(0U)
618
    ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE);  \
619
 
619
    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE;        \
620
/** @brief  Enable RTS flow control
620
  } while(0U)
621
  *         This macro allows to enable RTS hardware flow control for a given UART instance,
621
 
622
  *         without need to call HAL_UART_Init() function.
622
/** @brief  Disable CTS flow control
623
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
623
  * @note   This macro allows to disable CTS hardware flow control for a given UART instance,
624
  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
624
  *         without need to call HAL_UART_Init() function.
625
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
625
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
626
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
626
  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
627
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
627
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
628
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
628
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
629
  * @param  __HANDLE__ specifies the UART Handle.
629
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
630
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
630
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
631
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
631
  * @param  __HANDLE__ specifies the UART Handle.
632
  * @retval None
632
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
633
  */
633
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
634
#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__)       \
634
  * @retval None
635
  do{                                                     \
635
  */
636
    SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \
636
#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__)        \
637
    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE;       \
637
  do{                                                       \
638
  } while(0U)
638
    ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \
639
 
639
    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE);      \
640
/** @brief  Disable RTS flow control
640
  } while(0U)
641
  *         This macro allows to disable RTS hardware flow control for a given UART instance,
641
 
642
  *         without need to call HAL_UART_Init() function.
642
/** @brief  Enable RTS flow control
643
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
643
  *         This macro allows to enable RTS hardware flow control for a given UART instance,
644
  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
644
  *         without need to call HAL_UART_Init() function.
645
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
645
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
646
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
646
  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
647
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
647
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
648
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
648
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
649
  * @param  __HANDLE__ specifies the UART Handle.
649
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
650
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
650
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
651
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
651
  * @param  __HANDLE__ specifies the UART Handle.
652
  * @retval None
652
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
653
  */
653
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
654
#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__)       \
654
  * @retval None
655
  do{                                                      \
655
  */
656
    CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\
656
#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__)       \
657
    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE);     \
657
  do{                                                     \
658
  } while(0U)
658
    ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \
659
#if defined(USART_CR3_ONEBIT)
659
    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE;       \
660
 
660
  } while(0U)
661
/** @brief  Macro to enable the UART's one bit sample method
661
 
662
  * @param  __HANDLE__ specifies the UART Handle.
662
/** @brief  Disable RTS flow control
663
  * @retval None
663
  *         This macro allows to disable RTS hardware flow control for a given UART instance,
664
  */
664
  *         without need to call HAL_UART_Init() function.
665
#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
665
  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
666
 
666
  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
667
/** @brief  Macro to disable the UART's one bit sample method
667
  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
668
  * @param  __HANDLE__ specifies the UART Handle.
668
  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
669
  * @retval None
669
  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
670
  */
670
  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
671
#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT))
671
  * @param  __HANDLE__ specifies the UART Handle.
672
#endif /* UART_ONE_BIT_SAMPLE_Feature */
672
  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).
673
 
673
  *         It is used to select the USART peripheral (USART availability and x value depending on device).
674
/** @brief  Enable UART
674
  * @retval None
675
  * @param  __HANDLE__ specifies the UART Handle.
675
  */
676
  * @retval None
676
#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__)       \
677
  */
677
  do{                                                      \
678
#define __HAL_UART_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_UE)
678
    ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\
679
 
679
    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE);     \
680
/** @brief  Disable UART
680
  } while(0U)
681
  * @param  __HANDLE__ specifies the UART Handle.
681
#if defined(USART_CR3_ONEBIT)
682
  * @retval None
682
 
683
  */
683
/** @brief  Macro to enable the UART's one bit sample method
684
#define __HAL_UART_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR1 &=  ~USART_CR1_UE)
684
  * @param  __HANDLE__ specifies the UART Handle.
685
/**
685
  * @retval None
686
  * @}
686
  */
687
  */
687
#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
688
 
688
 
689
/* Exported functions --------------------------------------------------------*/
689
/** @brief  Macro to disable the UART's one bit sample method
690
/** @addtogroup UART_Exported_Functions
690
  * @param  __HANDLE__ specifies the UART Handle.
691
  * @{
691
  * @retval None
692
  */
692
  */
693
 
693
#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\
694
/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions
694
                                                       &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT))
695
  * @{
695
#endif /* UART_ONE_BIT_SAMPLE_Feature */
696
  */
696
 
697
 
697
/** @brief  Enable UART
698
/* Initialization/de-initialization functions  **********************************/
698
  * @param  __HANDLE__ specifies the UART Handle.
699
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
699
  * @retval None
700
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart);
700
  */
701
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);
701
#define __HAL_UART_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_UE)
702
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod);
702
 
703
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
703
/** @brief  Disable UART
704
void HAL_UART_MspInit(UART_HandleTypeDef *huart);
704
  * @param  __HANDLE__ specifies the UART Handle.
705
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
705
  * @retval None
706
 
706
  */
707
/* Callbacks Register/UnRegister functions  ***********************************/
707
#define __HAL_UART_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR1 &=  ~USART_CR1_UE)
708
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
708
/**
709
HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);
709
  * @}
710
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
710
  */
711
 
711
 
712
HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback);
712
/* Exported functions --------------------------------------------------------*/
713
HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart);
713
/** @addtogroup UART_Exported_Functions
714
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
714
  * @{
715
 
715
  */
716
/**
716
 
717
  * @}
717
/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions
718
  */
718
  * @{
719
 
719
  */
720
/** @addtogroup UART_Exported_Functions_Group2 IO operation functions
720
 
721
  * @{
721
/* Initialization/de-initialization functions  **********************************/
722
  */
722
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
723
 
723
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart);
724
/* IO operation functions *******************************************************/
724
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);
725
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
725
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod);
726
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
726
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
727
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
727
void HAL_UART_MspInit(UART_HandleTypeDef *huart);
728
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
728
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
729
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
729
 
730
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
730
/* Callbacks Register/UnRegister functions  ***********************************/
731
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
731
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
732
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
732
HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
733
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
733
                                            pUART_CallbackTypeDef pCallback);
734
 
734
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
735
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, uint32_t Timeout);
735
 
736
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
736
HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback);
737
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
737
HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart);
738
 
738
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
739
/* Transfer Abort functions */
739
 
740
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);
740
/**
741
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);
741
  * @}
742
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);
742
  */
743
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart);
743
 
744
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);
744
/** @addtogroup UART_Exported_Functions_Group2 IO operation functions
745
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart);
745
  * @{
746
 
746
  */
747
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
747
 
748
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
748
/* IO operation functions *******************************************************/
749
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
749
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
750
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
750
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
751
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
751
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
752
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
752
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
753
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart);
753
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
754
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);
754
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
755
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
755
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
756
 
756
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
757
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);
757
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
758
 
758
 
759
/**
759
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,
760
  * @}
760
                                           uint32_t Timeout);
761
  */
761
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
762
 
762
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
763
/** @addtogroup UART_Exported_Functions_Group3
763
 
764
  * @{
764
HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart);
765
  */
765
 
766
/* Peripheral Control functions  ************************************************/
766
/* Transfer Abort functions */
767
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
767
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);
768
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart);
768
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);
769
HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart);
769
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);
770
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart);
770
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart);
771
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart);
771
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);
772
/**
772
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart);
773
  * @}
773
 
774
  */
774
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
775
 
775
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
776
/** @addtogroup UART_Exported_Functions_Group4
776
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
777
  * @{
777
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
778
  */
778
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
779
/* Peripheral State functions  **************************************************/
779
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
780
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart);
780
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart);
781
uint32_t              HAL_UART_GetError(UART_HandleTypeDef *huart);
781
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);
782
/**
782
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
783
  * @}
783
 
784
  */
784
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);
785
 
785
 
786
/**
786
/**
787
  * @}
787
  * @}
788
  */
788
  */
789
/* Private types -------------------------------------------------------------*/
789
 
790
/* Private variables ---------------------------------------------------------*/
790
/** @addtogroup UART_Exported_Functions_Group3
791
/* Private constants ---------------------------------------------------------*/
791
  * @{
792
/** @defgroup UART_Private_Constants UART Private Constants
792
  */
793
  * @{
793
/* Peripheral Control functions  ************************************************/
794
  */
794
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
795
/** @brief UART interruptions flag mask
795
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart);
796
  *
796
HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart);
797
  */
797
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart);
798
#define UART_IT_MASK                     0x0000FFFFU
798
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart);
799
 
799
/**
800
#define UART_CR1_REG_INDEX               1U
800
  * @}
801
#define UART_CR2_REG_INDEX               2U
801
  */
802
#define UART_CR3_REG_INDEX               3U
802
 
803
/**
803
/** @addtogroup UART_Exported_Functions_Group4
804
  * @}
804
  * @{
805
  */
805
  */
806
 
806
/* Peripheral State functions  **************************************************/
807
/* Private macros ------------------------------------------------------------*/
807
HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart);
808
/** @defgroup UART_Private_Macros UART Private Macros
808
uint32_t              HAL_UART_GetError(const UART_HandleTypeDef *huart);
809
  * @{
809
/**
810
  */
810
  * @}
811
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \
811
  */
812
                                     ((LENGTH) == UART_WORDLENGTH_9B))
812
 
813
#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B))
813
/**
814
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \
814
  * @}
815
                                    ((STOPBITS) == UART_STOPBITS_2))
815
  */
816
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \
816
/* Private types -------------------------------------------------------------*/
817
                                ((PARITY) == UART_PARITY_EVEN) || \
817
/* Private variables ---------------------------------------------------------*/
818
                                ((PARITY) == UART_PARITY_ODD))
818
/* Private constants ---------------------------------------------------------*/
819
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\
819
/** @defgroup UART_Private_Constants UART Private Constants
820
                              (((CONTROL) == UART_HWCONTROL_NONE) || \
820
  * @{
821
                               ((CONTROL) == UART_HWCONTROL_RTS) || \
821
  */
822
                               ((CONTROL) == UART_HWCONTROL_CTS) || \
822
/** @brief UART interruptions flag mask
823
                               ((CONTROL) == UART_HWCONTROL_RTS_CTS))
823
  *
824
#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U))
824
  */
825
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \
825
#define UART_IT_MASK                     0x0000FFFFU
826
                              ((STATE) == UART_STATE_ENABLE))
826
 
827
#if defined(USART_CR1_OVER8)
827
#define UART_CR1_REG_INDEX               1U
828
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \
828
#define UART_CR2_REG_INDEX               2U
829
                                        ((SAMPLING) == UART_OVERSAMPLING_8))
829
#define UART_CR3_REG_INDEX               3U
830
#endif /* USART_CR1_OVER8 */
830
/**
831
#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16))
831
  * @}
832
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \
832
  */
833
                                                 ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B))
833
 
834
#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \
834
/* Private macros ------------------------------------------------------------*/
835
                                      ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK))
835
/** @defgroup UART_Private_Macros UART Private Macros
836
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 4500000U)
836
  * @{
837
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU)
837
  */
838
 
838
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \
839
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_)            (((_PCLK_)*25U)/(4U*(_BAUD_)))
839
                                     ((LENGTH) == UART_WORDLENGTH_9B))
840
#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_)        (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U)
840
#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B))
841
#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_)        ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U) + 50U) / 100U)
841
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \
842
/* UART BRR = mantissa + overflow + fraction
842
                                    ((STOPBITS) == UART_STOPBITS_2))
843
            = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */
843
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \
844
#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_)            (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \
844
                                ((PARITY) == UART_PARITY_EVEN) || \
845
                                                        (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \
845
                                ((PARITY) == UART_PARITY_ODD))
846
                                                        (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU))
846
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\
847
 
847
                              (((CONTROL) == UART_HWCONTROL_NONE) || \
848
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_)             (((_PCLK_)*25U)/(2U*(_BAUD_)))
848
                               ((CONTROL) == UART_HWCONTROL_RTS) || \
849
#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_)         (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U)
849
                               ((CONTROL) == UART_HWCONTROL_CTS) || \
850
#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_)         ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U) + 50U) / 100U)
850
                               ((CONTROL) == UART_HWCONTROL_RTS_CTS))
851
/* UART BRR = mantissa + overflow + fraction
851
#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U))
852
            = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */
852
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \
853
#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_)             (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \
853
                              ((STATE) == UART_STATE_ENABLE))
854
                                                        ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \
854
#if defined(USART_CR1_OVER8)
855
                                                        (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U))
855
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \
856
 
856
                                        ((SAMPLING) == UART_OVERSAMPLING_8))
857
/**
857
#endif /* USART_CR1_OVER8 */
858
  * @}
858
#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16))
859
  */
859
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \
860
 
860
                                                 ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B))
861
/* Private functions ---------------------------------------------------------*/
861
#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \
862
/** @defgroup UART_Private_Functions UART Private Functions
862
                                      ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK))
863
  * @{
863
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 4500000U)
864
  */
864
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU)
865
 
865
 
866
HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
866
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_)            (((_PCLK_)*25U)/(4U*(_BAUD_)))
867
HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
867
#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_)        (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U)
868
 
868
#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_)        ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U)\
869
/**
869
                                                         + 50U) / 100U)
870
  * @}
870
/* UART BRR = mantissa + overflow + fraction
871
  */
871
            = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */
872
 
872
#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_)            (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \
873
/**
873
                                                         (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \
874
  * @}
874
                                                        (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU))
875
  */
875
 
876
 
876
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_)             (((_PCLK_)*25U)/(2U*(_BAUD_)))
877
/**
877
#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_)         (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U)
878
  * @}
878
#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_)         ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U)\
879
  */
879
                                                         + 50U) / 100U)
880
 
880
/* UART BRR = mantissa + overflow + fraction
881
#ifdef __cplusplus
881
            = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */
882
}
882
#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_)             (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \
883
#endif
883
                                                         ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \
884
 
884
                                                        (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U))
885
#endif /* __STM32F1xx_HAL_UART_H */
885
 
886
 
886
/**
887
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
887
  * @}
-
 
888
  */
-
 
889
 
-
 
890
/* Private functions ---------------------------------------------------------*/
-
 
891
/** @defgroup UART_Private_Functions UART Private Functions
-
 
892
  * @{
-
 
893
  */
-
 
894
 
-
 
895
HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
-
 
896
HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
-
 
897
 
-
 
898
/**
-
 
899
  * @}
-
 
900
  */
-
 
901
 
-
 
902
/**
-
 
903
  * @}
-
 
904
  */
-
 
905
 
-
 
906
/**
-
 
907
  * @}
-
 
908
  */
-
 
909
 
-
 
910
#ifdef __cplusplus
-
 
911
}
-
 
912
#endif
-
 
913
 
-
 
914
#endif /* __STM32F1xx_HAL_UART_H */
-
 
915