STM CMSIS
stm32f4xx_hal_smartcard.h
Go to the documentation of this file.
1 
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 
57 /* Exported types ------------------------------------------------------------*/
65 typedef struct
66 {
67  uint32_t BaudRate;
72  uint32_t WordLength;
75  uint32_t StopBits;
78  uint32_t Parity;
85  uint32_t Mode;
88  uint32_t CLKPolarity;
91  uint32_t CLKPhase;
94  uint32_t CLKLastBit;
98  uint32_t Prescaler;
103  uint32_t GuardTime;
105  uint32_t NACKState;
108 
148 typedef enum
149 {
168 
172 typedef struct
173 {
174  USART_TypeDef *Instance; /* USART registers base address */
175 
176  SMARTCARD_InitTypeDef Init; /* SmartCard communication parameters */
177 
178  uint8_t *pTxBuffPtr; /* Pointer to SmartCard Tx transfer Buffer */
179 
180  uint16_t TxXferSize; /* SmartCard Tx Transfer size */
181 
182  uint16_t TxXferCount; /* SmartCard Tx Transfer Counter */
183 
184  uint8_t *pRxBuffPtr; /* Pointer to SmartCard Rx transfer Buffer */
185 
186  uint16_t RxXferSize; /* SmartCard Rx Transfer size */
187 
188  uint16_t RxXferCount; /* SmartCard Rx Transfer Counter */
189 
190  DMA_HandleTypeDef *hdmatx; /* SmartCard Tx DMA Handle parameters */
191 
192  DMA_HandleTypeDef *hdmarx; /* SmartCard Rx DMA Handle parameters */
193 
194  HAL_LockTypeDef Lock; /* Locking object */
195 
196  __IO HAL_SMARTCARD_StateTypeDef gState; /* SmartCard state information related to global Handle management
197  and also related to Tx operations.
198  This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */
199 
200  __IO HAL_SMARTCARD_StateTypeDef RxState; /* SmartCard state information related to Rx operations.
201  This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */
202 
203  __IO uint32_t ErrorCode; /* SmartCard Error code */
204 
206 
211 /* Exported constants --------------------------------------------------------*/
219 #define HAL_SMARTCARD_ERROR_NONE ((uint32_t)0x00000000U)
220 #define HAL_SMARTCARD_ERROR_PE ((uint32_t)0x00000001U)
221 #define HAL_SMARTCARD_ERROR_NE ((uint32_t)0x00000002U)
222 #define HAL_SMARTCARD_ERROR_FE ((uint32_t)0x00000004U)
223 #define HAL_SMARTCARD_ERROR_ORE ((uint32_t)0x00000008U)
224 #define HAL_SMARTCARD_ERROR_DMA ((uint32_t)0x00000010U)
232 #define SMARTCARD_WORDLENGTH_9B ((uint32_t)USART_CR1_M)
233 
240 #define SMARTCARD_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0)
241 #define SMARTCARD_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1))
242 
249 #define SMARTCARD_PARITY_EVEN ((uint32_t)USART_CR1_PCE)
250 #define SMARTCARD_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
251 
258 #define SMARTCARD_MODE_RX ((uint32_t)USART_CR1_RE)
259 #define SMARTCARD_MODE_TX ((uint32_t)USART_CR1_TE)
260 #define SMARTCARD_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
261 
268 #define SMARTCARD_POLARITY_LOW ((uint32_t)0x00000000U)
269 #define SMARTCARD_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL)
270 
277 #define SMARTCARD_PHASE_1EDGE ((uint32_t)0x00000000U)
278 #define SMARTCARD_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA)
279 
286 #define SMARTCARD_LASTBIT_DISABLE ((uint32_t)0x00000000U)
287 #define SMARTCARD_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL)
288 
295 #define SMARTCARD_NACK_ENABLE ((uint32_t)USART_CR3_NACK)
296 #define SMARTCARD_NACK_DISABLE ((uint32_t)0x00000000U)
297 
304 #define SMARTCARD_DMAREQ_TX ((uint32_t)USART_CR3_DMAT)
305 #define SMARTCARD_DMAREQ_RX ((uint32_t)USART_CR3_DMAR)
306 
313 #define SMARTCARD_PRESCALER_SYSCLK_DIV2 ((uint32_t)0x00000001U)
314 #define SMARTCARD_PRESCALER_SYSCLK_DIV4 ((uint32_t)0x00000002U)
315 #define SMARTCARD_PRESCALER_SYSCLK_DIV6 ((uint32_t)0x00000003U)
316 #define SMARTCARD_PRESCALER_SYSCLK_DIV8 ((uint32_t)0x00000004U)
317 #define SMARTCARD_PRESCALER_SYSCLK_DIV10 ((uint32_t)0x00000005U)
318 #define SMARTCARD_PRESCALER_SYSCLK_DIV12 ((uint32_t)0x00000006U)
319 #define SMARTCARD_PRESCALER_SYSCLK_DIV14 ((uint32_t)0x00000007U)
320 #define SMARTCARD_PRESCALER_SYSCLK_DIV16 ((uint32_t)0x00000008U)
321 #define SMARTCARD_PRESCALER_SYSCLK_DIV18 ((uint32_t)0x00000009U)
322 #define SMARTCARD_PRESCALER_SYSCLK_DIV20 ((uint32_t)0x0000000AU)
323 #define SMARTCARD_PRESCALER_SYSCLK_DIV22 ((uint32_t)0x0000000BU)
324 #define SMARTCARD_PRESCALER_SYSCLK_DIV24 ((uint32_t)0x0000000CU)
325 #define SMARTCARD_PRESCALER_SYSCLK_DIV26 ((uint32_t)0x0000000DU)
326 #define SMARTCARD_PRESCALER_SYSCLK_DIV28 ((uint32_t)0x0000000EU)
327 #define SMARTCARD_PRESCALER_SYSCLK_DIV30 ((uint32_t)0x0000000FU)
328 #define SMARTCARD_PRESCALER_SYSCLK_DIV32 ((uint32_t)0x00000010U)
329 #define SMARTCARD_PRESCALER_SYSCLK_DIV34 ((uint32_t)0x00000011U)
330 #define SMARTCARD_PRESCALER_SYSCLK_DIV36 ((uint32_t)0x00000012U)
331 #define SMARTCARD_PRESCALER_SYSCLK_DIV38 ((uint32_t)0x00000013U)
332 #define SMARTCARD_PRESCALER_SYSCLK_DIV40 ((uint32_t)0x00000014U)
333 #define SMARTCARD_PRESCALER_SYSCLK_DIV42 ((uint32_t)0x00000015U)
334 #define SMARTCARD_PRESCALER_SYSCLK_DIV44 ((uint32_t)0x00000016U)
335 #define SMARTCARD_PRESCALER_SYSCLK_DIV46 ((uint32_t)0x00000017U)
336 #define SMARTCARD_PRESCALER_SYSCLK_DIV48 ((uint32_t)0x00000018U)
337 #define SMARTCARD_PRESCALER_SYSCLK_DIV50 ((uint32_t)0x00000019U)
338 #define SMARTCARD_PRESCALER_SYSCLK_DIV52 ((uint32_t)0x0000001AU)
339 #define SMARTCARD_PRESCALER_SYSCLK_DIV54 ((uint32_t)0x0000001BU)
340 #define SMARTCARD_PRESCALER_SYSCLK_DIV56 ((uint32_t)0x0000001CU)
341 #define SMARTCARD_PRESCALER_SYSCLK_DIV58 ((uint32_t)0x0000001DU)
342 #define SMARTCARD_PRESCALER_SYSCLK_DIV60 ((uint32_t)0x0000001EU)
343 #define SMARTCARD_PRESCALER_SYSCLK_DIV62 ((uint32_t)0x0000001FU)
353 #define SMARTCARD_FLAG_TXE ((uint32_t)0x00000080U)
354 #define SMARTCARD_FLAG_TC ((uint32_t)0x00000040U)
355 #define SMARTCARD_FLAG_RXNE ((uint32_t)0x00000020U)
356 #define SMARTCARD_FLAG_IDLE ((uint32_t)0x00000010U)
357 #define SMARTCARD_FLAG_ORE ((uint32_t)0x00000008U)
358 #define SMARTCARD_FLAG_NE ((uint32_t)0x00000004U)
359 #define SMARTCARD_FLAG_FE ((uint32_t)0x00000002U)
360 #define SMARTCARD_FLAG_PE ((uint32_t)0x00000001U)
361 
373 #define SMARTCARD_IT_PE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
374 #define SMARTCARD_IT_TXE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
375 #define SMARTCARD_IT_TC ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
376 #define SMARTCARD_IT_RXNE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
377 #define SMARTCARD_IT_IDLE ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
378 #define SMARTCARD_IT_ERR ((uint32_t)(SMARTCARD_CR3_REG_INDEX << 28U | USART_CR3_EIE))
379 
387 /* Exported macro ------------------------------------------------------------*/
396 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) do{ \
397  (__HANDLE__)->gState = HAL_SMARTCARD_STATE_RESET; \
398  (__HANDLE__)->RxState = HAL_SMARTCARD_STATE_RESET; \
399  } while(0)
400 
404 #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
405 
420 #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
421 
437 #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
438 
445 #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) \
446  do{ \
447  __IO uint32_t tmpreg = 0x00U; \
448  tmpreg = (__HANDLE__)->Instance->SR; \
449  tmpreg = (__HANDLE__)->Instance->DR; \
450  UNUSED(tmpreg); \
451  } while(0)
452 
459 #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
460 
467 #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
468 
475 #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
476 
483 #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
484 
496 #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == 1U)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)): \
497  ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)))
498 #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == 1U)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & SMARTCARD_IT_MASK)): \
499  ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & SMARTCARD_IT_MASK)))
500 
513 #define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == 1U)? (__HANDLE__)->Instance->CR1: (__HANDLE__)->Instance->CR3) & (((uint32_t)(__IT__)) & SMARTCARD_IT_MASK))
514 
519 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
520 
525 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT))
526 
532 #define __HAL_SMARTCARD_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)
533 
539 #define __HAL_SMARTCARD_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE)
540 
548 #define __HAL_SMARTCARD_DMA_REQUEST_ENABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 |= (__REQUEST__))
549 #define __HAL_SMARTCARD_DMA_REQUEST_DISABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 &= ~(__REQUEST__))
550 
555 /* Exported functions --------------------------------------------------------*/
563 /* Initialization/de-initialization functions **********************************/
564 HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsc);
565 HAL_StatusTypeDef HAL_SMARTCARD_ReInit(SMARTCARD_HandleTypeDef *hsc);
566 HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsc);
567 void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsc);
568 void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsc);
576 /* IO operation functions *******************************************************/
577 HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout);
578 HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout);
579 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
580 HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
581 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
582 HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
583 
584 void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsc);
585 void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsc);
586 void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsc);
587 void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsc);
595 /* Peripheral State functions **************************************************/
596 HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsc);
597 uint32_t HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsc);
598 
606 /* Private types -------------------------------------------------------------*/
607 /* Private variables ---------------------------------------------------------*/
608 /* Private constants ---------------------------------------------------------*/
616 #define SMARTCARD_IT_MASK ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \
617  USART_CR1_IDLEIE | USART_CR3_EIE )
618 
619 #define SMARTCARD_DIV(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(4U*(_BAUD_)))
620 #define SMARTCARD_DIVMANT(_PCLK_, _BAUD_) (SMARTCARD_DIV((_PCLK_), (_BAUD_))/100U)
621 #define SMARTCARD_DIVFRAQ(_PCLK_, _BAUD_) (((SMARTCARD_DIV((_PCLK_), (_BAUD_)) - (SMARTCARD_DIVMANT((_PCLK_), (_BAUD_)) * 100U)) * 16U + 50U) / 100U)
622 /* SMARTCARD BRR = mantissa + overflow + fraction
623  = (SMARTCARD DIVMANT << 4) + (SMARTCARD DIVFRAQ & 0xF0) + (SMARTCARD DIVFRAQ & 0x0FU) */
624 #define SMARTCARD_BRR(_PCLK_, _BAUD_) (((SMARTCARD_DIVMANT((_PCLK_), (_BAUD_)) << 4U) + \
625  (SMARTCARD_DIVFRAQ((_PCLK_), (_BAUD_)) & 0xF0U)) + \
626  (SMARTCARD_DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0FU))
627 
628 #define SMARTCARD_CR1_REG_INDEX 1U
629 #define SMARTCARD_CR3_REG_INDEX 3U
630 
634 /* Private macros --------------------------------------------------------*/
638 #define IS_SMARTCARD_WORD_LENGTH(LENGTH) ((LENGTH) == SMARTCARD_WORDLENGTH_9B)
639 #define IS_SMARTCARD_STOPBITS(STOPBITS) (((STOPBITS) == SMARTCARD_STOPBITS_0_5) || \
640  ((STOPBITS) == SMARTCARD_STOPBITS_1_5))
641 #define IS_SMARTCARD_PARITY(PARITY) (((PARITY) == SMARTCARD_PARITY_EVEN) || \
642  ((PARITY) == SMARTCARD_PARITY_ODD))
643 #define IS_SMARTCARD_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3U) == 0x00U) && ((MODE) != (uint32_t)0x000000U))
644 #define IS_SMARTCARD_POLARITY(CPOL) (((CPOL) == SMARTCARD_POLARITY_LOW) || ((CPOL) == SMARTCARD_POLARITY_HIGH))
645 #define IS_SMARTCARD_PHASE(CPHA) (((CPHA) == SMARTCARD_PHASE_1EDGE) || ((CPHA) == SMARTCARD_PHASE_2EDGE))
646 #define IS_SMARTCARD_LASTBIT(LASTBIT) (((LASTBIT) == SMARTCARD_LASTBIT_DISABLE) || \
647  ((LASTBIT) == SMARTCARD_LASTBIT_ENABLE))
648 #define IS_SMARTCARD_NACK_STATE(NACK) (((NACK) == SMARTCARD_NACK_ENABLE) || \
649  ((NACK) == SMARTCARD_NACK_DISABLE))
650 #define IS_SMARTCARD_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001U)
651 
655 /* Private functions ---------------------------------------------------------*/
671 #ifdef __cplusplus
672 }
673 #endif
674 
675 #endif /* __STM32F4xx_HAL_SMARTCARD_H */
676 
677 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
uint32_t Prescaler
Definition: stm32f4xx_hal_smartcard.h:98
uint32_t NACKState
Definition: stm32f4xx_hal_smartcard.h:105
Definition: stm32f4xx_hal_smartcard.h:152
This file contains HAL common defines, enumeration, macros and structures definitions.
uint32_t BaudRate
Definition: stm32f4xx_hal_smartcard.h:67
Definition: stm32f4xx_hal_smartcard.h:150
Definition: stm32f4xx_hal_smartcard.h:160
Definition: stm32f4xx_hal_smartcard.h:156
SMARTCARD Init Structure definition.
Definition: stm32f4xx_hal_smartcard.h:65
uint32_t WordLength
Definition: stm32f4xx_hal_smartcard.h:72
Definition: stm32f4xx_hal_smartcard.h:165
Definition: stm32f4xx_hal_smartcard.h:154
uint32_t CLKPolarity
Definition: stm32f4xx_hal_smartcard.h:88
Definition: stm32f4xx_hal_smartcard.h:158
HAL_StatusTypeDef
HAL Status structures definition.
Definition: stm32f4xx_hal_def.h:57
#define __IO
Definition: core_cm0.h:213
Universal Synchronous Asynchronous Receiver Transmitter.
Definition: stm32f401xc.h:518
SMARTCARD handle Structure definition.
Definition: stm32f4xx_hal_smartcard.h:172
uint32_t StopBits
Definition: stm32f4xx_hal_smartcard.h:75
uint32_t CLKLastBit
Definition: stm32f4xx_hal_smartcard.h:94
uint32_t Mode
Definition: stm32f4xx_hal_smartcard.h:85
HAL_LockTypeDef
HAL Lock structures definition.
Definition: stm32f4xx_hal_def.h:68
HAL_SMARTCARD_StateTypeDef
HAL SMARTCARD State structures definition.
Definition: stm32f4xx_hal_smartcard.h:148
DMA handle Structure definition.
Definition: stm32f4xx_hal_dma.h:157
uint32_t CLKPhase
Definition: stm32f4xx_hal_smartcard.h:91
Definition: stm32f4xx_hal_smartcard.h:163
uint32_t GuardTime
Definition: stm32f4xx_hal_smartcard.h:103
uint32_t Parity
Definition: stm32f4xx_hal_smartcard.h:78