Mercurial > public > ostc4
comparison Common/Drivers/STM32F4xx_HAL_DRIVER_v120/Inc/stm32f4xx_hal_smartcard.h @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
37:ccc45c0e1ea2 | 38:5f11787b4f42 |
---|---|
1 /** | |
2 ****************************************************************************** | |
3 * @file stm32f4xx_hal_smartcard.h | |
4 * @author MCD Application Team | |
5 * @version V1.2.0 | |
6 * @date 26-December-2014 | |
7 * @brief Header file of SMARTCARD HAL module. | |
8 ****************************************************************************** | |
9 * @attention | |
10 * | |
11 * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |
12 * | |
13 * Redistribution and use in source and binary forms, with or without modification, | |
14 * are permitted provided that the following conditions are met: | |
15 * 1. Redistributions of source code must retain the above copyright notice, | |
16 * this list of conditions and the following disclaimer. | |
17 * 2. Redistributions in binary form must reproduce the above copyright notice, | |
18 * this list of conditions and the following disclaimer in the documentation | |
19 * and/or other materials provided with the distribution. | |
20 * 3. Neither the name of STMicroelectronics nor the names of its contributors | |
21 * may be used to endorse or promote products derived from this software | |
22 * without specific prior written permission. | |
23 * | |
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
34 * | |
35 ****************************************************************************** | |
36 */ | |
37 | |
38 /* Define to prevent recursive inclusion -------------------------------------*/ | |
39 #ifndef __STM32F4xx_HAL_SMARTCARD_H | |
40 #define __STM32F4xx_HAL_SMARTCARD_H | |
41 | |
42 #ifdef __cplusplus | |
43 extern "C" { | |
44 #endif | |
45 | |
46 /* Includes ------------------------------------------------------------------*/ | |
47 #include "stm32f4xx_hal_def.h" | |
48 | |
49 /** @addtogroup STM32F4xx_HAL_Driver | |
50 * @{ | |
51 */ | |
52 | |
53 /** @addtogroup SMARTCARD | |
54 * @{ | |
55 */ | |
56 | |
57 /* Exported types ------------------------------------------------------------*/ | |
58 /** @defgroup SMARTCARD_Exported_Types SMARTCARD Exported Types | |
59 * @{ | |
60 */ | |
61 | |
62 /** | |
63 * @brief SMARTCARD Init Structure definition | |
64 */ | |
65 typedef struct | |
66 { | |
67 uint32_t BaudRate; /*!< This member configures the SmartCard communication baud rate. | |
68 The baud rate is computed using the following formula: | |
69 - IntegerDivider = ((PCLKx) / (8 * (hirda->Init.BaudRate))) | |
70 - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8) + 0.5 */ | |
71 | |
72 uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. | |
73 This parameter can be a value of @ref SMARTCARD_Word_Length */ | |
74 | |
75 uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. | |
76 This parameter can be a value of @ref SMARTCARD_Stop_Bits */ | |
77 | |
78 uint32_t Parity; /*!< Specifies the parity mode. | |
79 This parameter can be a value of @ref SMARTCARD_Parity | |
80 @note When parity is enabled, the computed parity is inserted | |
81 at the MSB position of the transmitted data (9th bit when | |
82 the word length is set to 9 data bits; 8th bit when the | |
83 word length is set to 8 data bits).*/ | |
84 | |
85 uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. | |
86 This parameter can be a value of @ref SMARTCARD_Mode */ | |
87 | |
88 uint32_t CLKPolarity; /*!< Specifies the steady state of the serial clock. | |
89 This parameter can be a value of @ref SMARTCARD_Clock_Polarity */ | |
90 | |
91 uint32_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made. | |
92 This parameter can be a value of @ref SMARTCARD_Clock_Phase */ | |
93 | |
94 uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted | |
95 data bit (MSB) has to be output on the SCLK pin in synchronous mode. | |
96 This parameter can be a value of @ref SMARTCARD_Last_Bit */ | |
97 | |
98 uint32_t Prescaler; /*!< Specifies the SmartCard Prescaler value used for dividing the system clock | |
99 to provide the smartcard clock | |
100 This parameter can be a value of @ref SMARTCARD_Prescaler */ | |
101 | |
102 uint32_t GuardTime; /*!< Specifies the SmartCard Guard Time value in terms of number of baud clocks | |
103 The value given in the register (5 significant bits) is multiplied by 2 | |
104 to give the division factor of the source clock frequency */ | |
105 | |
106 uint32_t NACKState; /*!< Specifies the SmartCard NACK Transmission state. | |
107 This parameter can be a value of @ref SmartCard_NACK_State */ | |
108 }SMARTCARD_InitTypeDef; | |
109 | |
110 /** | |
111 * @brief HAL State structures definition | |
112 */ | |
113 typedef enum | |
114 { | |
115 HAL_SMARTCARD_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ | |
116 HAL_SMARTCARD_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |
117 HAL_SMARTCARD_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |
118 HAL_SMARTCARD_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |
119 HAL_SMARTCARD_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |
120 HAL_SMARTCARD_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |
121 HAL_SMARTCARD_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |
122 HAL_SMARTCARD_STATE_ERROR = 0x04 /*!< Error */ | |
123 }HAL_SMARTCARD_StateTypeDef; | |
124 | |
125 /** | |
126 * @brief SMARTCARD handle Structure definition | |
127 */ | |
128 typedef struct | |
129 { | |
130 USART_TypeDef *Instance; /* USART registers base address */ | |
131 | |
132 SMARTCARD_InitTypeDef Init; /* SmartCard communication parameters */ | |
133 | |
134 uint8_t *pTxBuffPtr; /* Pointer to SmartCard Tx transfer Buffer */ | |
135 | |
136 uint16_t TxXferSize; /* SmartCard Tx Transfer size */ | |
137 | |
138 uint16_t TxXferCount; /* SmartCard Tx Transfer Counter */ | |
139 | |
140 uint8_t *pRxBuffPtr; /* Pointer to SmartCard Rx transfer Buffer */ | |
141 | |
142 uint16_t RxXferSize; /* SmartCard Rx Transfer size */ | |
143 | |
144 uint16_t RxXferCount; /* SmartCard Rx Transfer Counter */ | |
145 | |
146 DMA_HandleTypeDef *hdmatx; /* SmartCard Tx DMA Handle parameters */ | |
147 | |
148 DMA_HandleTypeDef *hdmarx; /* SmartCard Rx DMA Handle parameters */ | |
149 | |
150 HAL_LockTypeDef Lock; /* Locking object */ | |
151 | |
152 __IO HAL_SMARTCARD_StateTypeDef State; /* SmartCard communication state */ | |
153 | |
154 __IO uint32_t ErrorCode; /* SmartCard Error code */ | |
155 | |
156 }SMARTCARD_HandleTypeDef; | |
157 | |
158 /** | |
159 * @} | |
160 */ | |
161 | |
162 /* Exported constants --------------------------------------------------------*/ | |
163 /** @defgroup SMARTCARD_Exported_Constants SMARTCARD Exported constants | |
164 * @{ | |
165 */ | |
166 /** @defgroup SMARTCARD_Error_Code SMARTCARD Error Code | |
167 * @brief SMARTCARD Error Code | |
168 * @{ | |
169 */ | |
170 #define HAL_SMARTCARD_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |
171 #define HAL_SMARTCARD_ERROR_PE ((uint32_t)0x00000001) /*!< Parity error */ | |
172 #define HAL_SMARTCARD_ERROR_NE ((uint32_t)0x00000002) /*!< Noise error */ | |
173 #define HAL_SMARTCARD_ERROR_FE ((uint32_t)0x00000004) /*!< Frame error */ | |
174 #define HAL_SMARTCARD_ERROR_ORE ((uint32_t)0x00000008) /*!< Overrun error */ | |
175 #define HAL_SMARTCARD_ERROR_DMA ((uint32_t)0x00000010) /*!< DMA transfer error */ | |
176 /** | |
177 * @} | |
178 */ | |
179 | |
180 /** @defgroup SMARTCARD_Word_Length SMARTCARD Word Length | |
181 * @{ | |
182 */ | |
183 #define SMARTCARD_WORDLENGTH_8B ((uint32_t)0x00000000) | |
184 #define SMARTCARD_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |
185 /** | |
186 * @} | |
187 */ | |
188 | |
189 /** @defgroup SMARTCARD_Stop_Bits SMARTCARD Number of Stop Bits | |
190 * @{ | |
191 */ | |
192 #define SMARTCARD_STOPBITS_1 ((uint32_t)0x00000000) | |
193 #define SMARTCARD_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0) | |
194 #define SMARTCARD_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) | |
195 #define SMARTCARD_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1)) | |
196 /** | |
197 * @} | |
198 */ | |
199 | |
200 /** @defgroup SMARTCARD_Parity SMARTCARD Parity | |
201 * @{ | |
202 */ | |
203 #define SMARTCARD_PARITY_NONE ((uint32_t)0x00000000) | |
204 #define SMARTCARD_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |
205 #define SMARTCARD_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |
206 /** | |
207 * @} | |
208 */ | |
209 | |
210 /** @defgroup SMARTCARD_Mode SMARTCARD Mode | |
211 * @{ | |
212 */ | |
213 #define SMARTCARD_MODE_RX ((uint32_t)USART_CR1_RE) | |
214 #define SMARTCARD_MODE_TX ((uint32_t)USART_CR1_TE) | |
215 #define SMARTCARD_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) | |
216 /** | |
217 * @} | |
218 */ | |
219 | |
220 /** @defgroup SMARTCARD_Clock_Polarity SMARTCARD Clock Polarity | |
221 * @{ | |
222 */ | |
223 #define SMARTCARD_POLARITY_LOW ((uint32_t)0x00000000) | |
224 #define SMARTCARD_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) | |
225 /** | |
226 * @} | |
227 */ | |
228 | |
229 /** @defgroup SMARTCARD_Clock_Phase SMARTCARD Clock Phase | |
230 * @{ | |
231 */ | |
232 #define SMARTCARD_PHASE_1EDGE ((uint32_t)0x00000000) | |
233 #define SMARTCARD_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) | |
234 /** | |
235 * @} | |
236 */ | |
237 | |
238 /** @defgroup SMARTCARD_Last_Bit SMARTCARD Last Bit | |
239 * @{ | |
240 */ | |
241 #define SMARTCARD_LASTBIT_DISABLE ((uint32_t)0x00000000) | |
242 #define SMARTCARD_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) | |
243 /** | |
244 * @} | |
245 */ | |
246 | |
247 /** @defgroup SmartCard_NACK_State SMARTCARD NACK State | |
248 * @{ | |
249 */ | |
250 #define SMARTCARD_NACK_ENABLE ((uint32_t)USART_CR3_NACK) | |
251 #define SMARTCARD_NACK_DISABLE ((uint32_t)0x00000000) | |
252 /** | |
253 * @} | |
254 */ | |
255 | |
256 /** @defgroup SmartCard_DMA_Requests SMARTCARD DMA requests | |
257 * @{ | |
258 */ | |
259 #define SMARTCARD_DMAREQ_TX ((uint32_t)USART_CR3_DMAT) | |
260 #define SMARTCARD_DMAREQ_RX ((uint32_t)USART_CR3_DMAR) | |
261 /** | |
262 * @} | |
263 */ | |
264 | |
265 /** @defgroup SMARTCARD_Prescaler SMARTCARD Prescaler | |
266 * @{ | |
267 */ | |
268 #define SMARTCARD_PRESCALER_SYSCLK_DIV2 ((uint32_t)0x00000001) /*!< SYSCLK divided by 2 */ | |
269 #define SMARTCARD_PRESCALER_SYSCLK_DIV4 ((uint32_t)0x00000002) /*!< SYSCLK divided by 4 */ | |
270 #define SMARTCARD_PRESCALER_SYSCLK_DIV6 ((uint32_t)0x00000003) /*!< SYSCLK divided by 6 */ | |
271 #define SMARTCARD_PRESCALER_SYSCLK_DIV8 ((uint32_t)0x00000004) /*!< SYSCLK divided by 8 */ | |
272 #define SMARTCARD_PRESCALER_SYSCLK_DIV10 ((uint32_t)0x00000005) /*!< SYSCLK divided by 10 */ | |
273 #define SMARTCARD_PRESCALER_SYSCLK_DIV12 ((uint32_t)0x00000006) /*!< SYSCLK divided by 12 */ | |
274 #define SMARTCARD_PRESCALER_SYSCLK_DIV14 ((uint32_t)0x00000007) /*!< SYSCLK divided by 14 */ | |
275 #define SMARTCARD_PRESCALER_SYSCLK_DIV16 ((uint32_t)0x00000008) /*!< SYSCLK divided by 16 */ | |
276 #define SMARTCARD_PRESCALER_SYSCLK_DIV18 ((uint32_t)0x00000009) /*!< SYSCLK divided by 18 */ | |
277 #define SMARTCARD_PRESCALER_SYSCLK_DIV20 ((uint32_t)0x0000000A) /*!< SYSCLK divided by 20 */ | |
278 #define SMARTCARD_PRESCALER_SYSCLK_DIV22 ((uint32_t)0x0000000B) /*!< SYSCLK divided by 22 */ | |
279 #define SMARTCARD_PRESCALER_SYSCLK_DIV24 ((uint32_t)0x0000000C) /*!< SYSCLK divided by 24 */ | |
280 #define SMARTCARD_PRESCALER_SYSCLK_DIV26 ((uint32_t)0x0000000D) /*!< SYSCLK divided by 26 */ | |
281 #define SMARTCARD_PRESCALER_SYSCLK_DIV28 ((uint32_t)0x0000000E) /*!< SYSCLK divided by 28 */ | |
282 #define SMARTCARD_PRESCALER_SYSCLK_DIV30 ((uint32_t)0x0000000F) /*!< SYSCLK divided by 30 */ | |
283 #define SMARTCARD_PRESCALER_SYSCLK_DIV32 ((uint32_t)0x00000010) /*!< SYSCLK divided by 32 */ | |
284 #define SMARTCARD_PRESCALER_SYSCLK_DIV34 ((uint32_t)0x00000011) /*!< SYSCLK divided by 34 */ | |
285 #define SMARTCARD_PRESCALER_SYSCLK_DIV36 ((uint32_t)0x00000012) /*!< SYSCLK divided by 36 */ | |
286 #define SMARTCARD_PRESCALER_SYSCLK_DIV38 ((uint32_t)0x00000013) /*!< SYSCLK divided by 38 */ | |
287 #define SMARTCARD_PRESCALER_SYSCLK_DIV40 ((uint32_t)0x00000014) /*!< SYSCLK divided by 40 */ | |
288 #define SMARTCARD_PRESCALER_SYSCLK_DIV42 ((uint32_t)0x00000015) /*!< SYSCLK divided by 42 */ | |
289 #define SMARTCARD_PRESCALER_SYSCLK_DIV44 ((uint32_t)0x00000016) /*!< SYSCLK divided by 44 */ | |
290 #define SMARTCARD_PRESCALER_SYSCLK_DIV46 ((uint32_t)0x00000017) /*!< SYSCLK divided by 46 */ | |
291 #define SMARTCARD_PRESCALER_SYSCLK_DIV48 ((uint32_t)0x00000018) /*!< SYSCLK divided by 48 */ | |
292 #define SMARTCARD_PRESCALER_SYSCLK_DIV50 ((uint32_t)0x00000019) /*!< SYSCLK divided by 50 */ | |
293 #define SMARTCARD_PRESCALER_SYSCLK_DIV52 ((uint32_t)0x0000001A) /*!< SYSCLK divided by 52 */ | |
294 #define SMARTCARD_PRESCALER_SYSCLK_DIV54 ((uint32_t)0x0000001B) /*!< SYSCLK divided by 54 */ | |
295 #define SMARTCARD_PRESCALER_SYSCLK_DIV56 ((uint32_t)0x0000001C) /*!< SYSCLK divided by 56 */ | |
296 #define SMARTCARD_PRESCALER_SYSCLK_DIV58 ((uint32_t)0x0000001D) /*!< SYSCLK divided by 58 */ | |
297 #define SMARTCARD_PRESCALER_SYSCLK_DIV60 ((uint32_t)0x0000001E) /*!< SYSCLK divided by 60 */ | |
298 #define SMARTCARD_PRESCALER_SYSCLK_DIV62 ((uint32_t)0x0000001F) /*!< SYSCLK divided by 62 */ | |
299 /** | |
300 * @} | |
301 */ | |
302 | |
303 /** @defgroup SmartCard_Flags SMARTCARD Flags | |
304 * Elements values convention: 0xXXXX | |
305 * - 0xXXXX : Flag mask in the SR register | |
306 * @{ | |
307 */ | |
308 #define SMARTCARD_FLAG_TXE ((uint32_t)0x00000080) | |
309 #define SMARTCARD_FLAG_TC ((uint32_t)0x00000040) | |
310 #define SMARTCARD_FLAG_RXNE ((uint32_t)0x00000020) | |
311 #define SMARTCARD_FLAG_IDLE ((uint32_t)0x00000010) | |
312 #define SMARTCARD_FLAG_ORE ((uint32_t)0x00000008) | |
313 #define SMARTCARD_FLAG_NE ((uint32_t)0x00000004) | |
314 #define SMARTCARD_FLAG_FE ((uint32_t)0x00000002) | |
315 #define SMARTCARD_FLAG_PE ((uint32_t)0x00000001) | |
316 /** | |
317 * @} | |
318 */ | |
319 | |
320 /** @defgroup SmartCard_Interrupt_definition SMARTCARD Interrupts Definition | |
321 * Elements values convention: 0xY000XXXX | |
322 * - XXXX : Interrupt mask in the XX register | |
323 * - Y : Interrupt source register (2bits) | |
324 * - 01: CR1 register | |
325 * - 10: CR3 register | |
326 * @{ | |
327 */ | |
328 #define SMARTCARD_IT_PE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_PEIE)) | |
329 #define SMARTCARD_IT_TXE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_TXEIE)) | |
330 #define SMARTCARD_IT_TC ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_TCIE)) | |
331 #define SMARTCARD_IT_RXNE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_RXNEIE)) | |
332 #define SMARTCARD_IT_IDLE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_IDLEIE)) | |
333 #define SMARTCARD_IT_ERR ((uint32_t)(SMARTCARD_CR3_REG_INDEX << 28 | USART_CR3_EIE)) | |
334 /** | |
335 * @} | |
336 */ | |
337 | |
338 /** | |
339 * @} | |
340 */ | |
341 | |
342 /* Exported macro ------------------------------------------------------------*/ | |
343 /** @defgroup SMARTCARD_Exported_Macros SMARTCARD Exported Macros | |
344 * @{ | |
345 */ | |
346 | |
347 /** @brief Reset SMARTCARD handle state | |
348 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
349 * @retval None | |
350 */ | |
351 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SMARTCARD_STATE_RESET) | |
352 | |
353 /** @brief Flushs the Smartcard DR register | |
354 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
355 */ | |
356 #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) | |
357 | |
358 /** @brief Checks whether the specified Smartcard flag is set or not. | |
359 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
360 * @param __FLAG__: specifies the flag to check. | |
361 * This parameter can be one of the following values: | |
362 * @arg SMARTCARD_FLAG_TXE: Transmit data register empty flag | |
363 * @arg SMARTCARD_FLAG_TC: Transmission Complete flag | |
364 * @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag | |
365 * @arg SMARTCARD_FLAG_IDLE: Idle Line detection flag | |
366 * @arg SMARTCARD_FLAG_ORE: Overrun Error flag | |
367 * @arg SMARTCARD_FLAG_NE: Noise Error flag | |
368 * @arg SMARTCARD_FLAG_FE: Framing Error flag | |
369 * @arg SMARTCARD_FLAG_PE: Parity Error flag | |
370 * @retval The new state of __FLAG__ (TRUE or FALSE). | |
371 */ | |
372 #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |
373 | |
374 /** @brief Clears the specified Smartcard pending flags. | |
375 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
376 * @param __FLAG__: specifies the flag to check. | |
377 * This parameter can be any combination of the following values: | |
378 * @arg SMARTCARD_FLAG_TC: Transmission Complete flag. | |
379 * @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag. | |
380 * | |
381 * @note PE (Parity error), FE (Framing error), NE (Noise error) and ORE (Overrun | |
382 * error) flags are cleared by software sequence: a read operation to | |
383 * USART_SR register followed by a read operation to USART_DR register. | |
384 * @note RXNE flag can be also cleared by a read to the USART_DR register. | |
385 * @note TC flag can be also cleared by software sequence: a read operation to | |
386 * USART_SR register followed by a write operation to USART_DR register. | |
387 * @note TXE flag is cleared only by a write to the USART_DR register. | |
388 */ | |
389 #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) | |
390 | |
391 /** @brief Clear the SMARTCARD PE pending flag. | |
392 * @param __HANDLE__: specifies the USART Handle. | |
393 * This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |
394 * UART peripheral. | |
395 * @retval None | |
396 */ | |
397 #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) \ | |
398 do{ \ | |
399 __IO uint32_t tmpreg; \ | |
400 tmpreg = (__HANDLE__)->Instance->SR; \ | |
401 tmpreg = (__HANDLE__)->Instance->DR; \ | |
402 UNUSED(tmpreg); \ | |
403 } while(0) | |
404 | |
405 /** @brief Clear the SMARTCARD FE pending flag. | |
406 * @param __HANDLE__: specifies the USART Handle. | |
407 * This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |
408 * UART peripheral. | |
409 * @retval None | |
410 */ | |
411 #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |
412 | |
413 /** @brief Clear the SMARTCARD NE pending flag. | |
414 * @param __HANDLE__: specifies the USART Handle. | |
415 * This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |
416 * UART peripheral. | |
417 * @retval None | |
418 */ | |
419 #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |
420 | |
421 /** @brief Clear the SMARTCARD ORE pending flag. | |
422 * @param __HANDLE__: specifies the USART Handle. | |
423 * This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |
424 * UART peripheral. | |
425 * @retval None | |
426 */ | |
427 #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |
428 | |
429 /** @brief Clear the SMARTCARD IDLE pending flag. | |
430 * @param __HANDLE__: specifies the USART Handle. | |
431 * This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |
432 * UART peripheral. | |
433 * @retval None | |
434 */ | |
435 #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |
436 | |
437 | |
438 /** @brief Enables or disables the specified SmartCard interrupts. | |
439 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
440 * @param __INTERRUPT__: specifies the SMARTCARD interrupt source to check. | |
441 * This parameter can be one of the following values: | |
442 * @arg SMARTCARD_IT_TXE: Transmit Data Register empty interrupt | |
443 * @arg SMARTCARD_IT_TC: Transmission complete interrupt | |
444 * @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt | |
445 * @arg SMARTCARD_IT_IDLE: Idle line detection interrupt | |
446 * @arg SMARTCARD_IT_PE: Parity Error interrupt | |
447 * @arg SMARTCARD_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |
448 */ | |
449 #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)): \ | |
450 ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK))) | |
451 #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & SMARTCARD_IT_MASK)): \ | |
452 ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & SMARTCARD_IT_MASK))) | |
453 | |
454 /** @brief Checks whether the specified SmartCard interrupt has occurred or not. | |
455 * @param __HANDLE__: specifies the SmartCard Handle. | |
456 * @param __IT__: specifies the SMARTCARD interrupt source to check. | |
457 * This parameter can be one of the following values: | |
458 * @arg SMARTCARD_IT_TXE: Transmit Data Register empty interrupt | |
459 * @arg SMARTCARD_IT_TC: Transmission complete interrupt | |
460 * @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt | |
461 * @arg SMARTCARD_IT_IDLE: Idle line detection interrupt | |
462 * @arg SMARTCARD_IT_ERR: Error interrupt | |
463 * @arg SMARTCARD_IT_PE: Parity Error interrupt | |
464 * @retval The new state of __IT__ (TRUE or FALSE). | |
465 */ | |
466 #define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == 1)? (__HANDLE__)->Instance->CR1: (__HANDLE__)->Instance->CR3) & (((uint32_t)(__IT__)) & SMARTCARD_IT_MASK)) | |
467 | |
468 /** @brief Macro to enable the SMARTCARD's one bit sample method | |
469 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
470 * @retval None | |
471 */ | |
472 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) | |
473 | |
474 /** @brief Macro to disable the SMARTCARD's one bit sample method | |
475 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
476 * @retval None | |
477 */ | |
478 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) | |
479 | |
480 /** @brief Enable the USART associated to the SMARTCARD Handle | |
481 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
482 * SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device). | |
483 * @retval None | |
484 */ | |
485 #define __HAL_SMARTCARD_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |
486 | |
487 /** @brief Disable the USART associated to the SMARTCARD Handle | |
488 * @param __HANDLE__: specifies the SMARTCARD Handle. | |
489 * SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device). | |
490 * @retval None | |
491 */ | |
492 #define __HAL_SMARTCARD_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |
493 | |
494 /** @brief Macros to enable or disable the SmartCard DMA request. | |
495 * @param __HANDLE__: specifies the SmartCard Handle. | |
496 * @param __REQUEST__: specifies the SmartCard DMA request. | |
497 * This parameter can be one of the following values: | |
498 * @arg SMARTCARD_DMAREQ_TX: SmartCard DMA transmit request | |
499 * @arg SMARTCARD_DMAREQ_RX: SmartCard DMA receive request | |
500 */ | |
501 #define __HAL_SMARTCARD_DMA_REQUEST_ENABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 |= (__REQUEST__)) | |
502 #define __HAL_SMARTCARD_DMA_REQUEST_DISABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 &= ~(__REQUEST__)) | |
503 | |
504 /** | |
505 * @} | |
506 */ | |
507 | |
508 /* Exported functions --------------------------------------------------------*/ | |
509 /** @addtogroup SMARTCARD_Exported_Functions | |
510 * @{ | |
511 */ | |
512 | |
513 /** @addtogroup SMARTCARD_Exported_Functions_Group1 | |
514 * @{ | |
515 */ | |
516 /* Initialization/de-initialization functions **********************************/ | |
517 HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsc); | |
518 HAL_StatusTypeDef HAL_SMARTCARD_ReInit(SMARTCARD_HandleTypeDef *hsc); | |
519 HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsc); | |
520 void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsc); | |
521 void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsc); | |
522 /** | |
523 * @} | |
524 */ | |
525 | |
526 /** @addtogroup SMARTCARD_Exported_Functions_Group2 | |
527 * @{ | |
528 */ | |
529 /* IO operation functions *******************************************************/ | |
530 HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |
531 HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |
532 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |
533 HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |
534 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |
535 HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |
536 void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsc); | |
537 void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsc); | |
538 void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsc); | |
539 void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsc); | |
540 /** | |
541 * @} | |
542 */ | |
543 | |
544 /** @addtogroup SMARTCARD_Exported_Functions_Group3 | |
545 * @{ | |
546 */ | |
547 /* Peripheral State functions **************************************************/ | |
548 HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsc); | |
549 uint32_t HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsc); | |
550 | |
551 /** | |
552 * @} | |
553 */ | |
554 | |
555 /** | |
556 * @} | |
557 */ | |
558 /* Private types -------------------------------------------------------------*/ | |
559 /* Private variables ---------------------------------------------------------*/ | |
560 /* Private constants ---------------------------------------------------------*/ | |
561 /** @defgroup SMARTCARD_Private_Constants SMARTCARD Private Constants | |
562 * @{ | |
563 */ | |
564 | |
565 /** @brief SMARTCARD interruptions flag mask | |
566 * | |
567 */ | |
568 #define SMARTCARD_IT_MASK ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \ | |
569 USART_CR1_IDLEIE | USART_CR3_EIE ) | |
570 #define SMARTCARD_DIV(_PCLK_, _BAUD_) (((_PCLK_)*25)/(4*(_BAUD_))) | |
571 #define SMARTCARD_DIVMANT(_PCLK_, _BAUD_) (SMARTCARD_DIV((_PCLK_), (_BAUD_))/100) | |
572 #define SMARTCARD_DIVFRAQ(_PCLK_, _BAUD_) (((SMARTCARD_DIV((_PCLK_), (_BAUD_)) - (SMARTCARD_DIVMANT((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |
573 #define SMARTCARD_BRR(_PCLK_, _BAUD_) ((SMARTCARD_DIVMANT((_PCLK_), (_BAUD_)) << 4)|(SMARTCARD_DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0F)) | |
574 | |
575 #define SMARTCARD_CR1_REG_INDEX 1 | |
576 #define SMARTCARD_CR3_REG_INDEX 3 | |
577 /** | |
578 * @} | |
579 */ | |
580 | |
581 /* Private macros --------------------------------------------------------*/ | |
582 /** @defgroup SMARTCARD_Private_Macros SMARTCARD Private Macros | |
583 * @{ | |
584 */ | |
585 #define IS_SMARTCARD_WORD_LENGTH(LENGTH) (((LENGTH) == SMARTCARD_WORDLENGTH_8B) || \ | |
586 ((LENGTH) == SMARTCARD_WORDLENGTH_9B)) | |
587 #define IS_SMARTCARD_STOPBITS(STOPBITS) (((STOPBITS) == SMARTCARD_STOPBITS_1) || \ | |
588 ((STOPBITS) == SMARTCARD_STOPBITS_0_5) || \ | |
589 ((STOPBITS) == SMARTCARD_STOPBITS_1_5) || \ | |
590 ((STOPBITS) == SMARTCARD_STOPBITS_2)) | |
591 #define IS_SMARTCARD_PARITY(PARITY) (((PARITY) == SMARTCARD_PARITY_NONE) || \ | |
592 ((PARITY) == SMARTCARD_PARITY_EVEN) || \ | |
593 ((PARITY) == SMARTCARD_PARITY_ODD)) | |
594 #define IS_SMARTCARD_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3) == 0x00) && ((MODE) != (uint32_t)0x000000)) | |
595 #define IS_SMARTCARD_POLARITY(CPOL) (((CPOL) == SMARTCARD_POLARITY_LOW) || ((CPOL) == SMARTCARD_POLARITY_HIGH)) | |
596 #define IS_SMARTCARD_PHASE(CPHA) (((CPHA) == SMARTCARD_PHASE_1EDGE) || ((CPHA) == SMARTCARD_PHASE_2EDGE)) | |
597 #define IS_SMARTCARD_LASTBIT(LASTBIT) (((LASTBIT) == SMARTCARD_LASTBIT_DISABLE) || \ | |
598 ((LASTBIT) == SMARTCARD_LASTBIT_ENABLE)) | |
599 #define IS_SMARTCARD_NACK_STATE(NACK) (((NACK) == SMARTCARD_NACK_ENABLE) || \ | |
600 ((NACK) == SMARTCARD_NACK_DISABLE)) | |
601 #define IS_SMARTCARD_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001) | |
602 /** | |
603 * @} | |
604 */ | |
605 | |
606 /* Private functions ---------------------------------------------------------*/ | |
607 /** @defgroup SMARTCARD_Private_Functions SMARTCARD Private Functions | |
608 * @{ | |
609 */ | |
610 | |
611 /** | |
612 * @} | |
613 */ | |
614 | |
615 /** | |
616 * @} | |
617 */ | |
618 | |
619 /** | |
620 * @} | |
621 */ | |
622 #ifdef __cplusplus | |
623 } | |
624 #endif | |
625 | |
626 #endif /* __STM32F4xx_HAL_SMARTCARD_H */ | |
627 | |
628 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |