Subversion Repositories DashDisplay

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_hal_smartcard.h
  4.   * @author  MCD Application Team
  5.   * @version V1.0.4
  6.   * @date    29-April-2016
  7.   * @brief   Header file of SMARTCARD HAL module.
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * <h2><center>&copy; COPYRIGHT(c) 2016 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 __STM32F1xx_HAL_SMARTCARD_H
  40. #define __STM32F1xx_HAL_SMARTCARD_H
  41.  
  42. #ifdef __cplusplus
  43.  extern "C" {
  44. #endif
  45.  
  46. /* Includes ------------------------------------------------------------------*/
  47. #include "stm32f1xx_hal_def.h"
  48.  
  49. /** @addtogroup STM32F1xx_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. /**
  64.   * @brief SMARTCARD Init Structure definition
  65.   */
  66. typedef struct
  67. {
  68.   uint32_t BaudRate;                  /*!< This member configures the SmartCard communication baud rate.
  69.                                            The baud rate is computed using the following formula:
  70.                                            - IntegerDivider = ((PCLKx) / (16 * (hsmartcard->Init.BaudRate)))
  71.                                            - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
  72.  
  73.   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
  74.                                            This parameter can be a value of @ref SMARTCARD_Word_Length */
  75.  
  76.   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
  77.                                            This parameter can be a value of @ref SMARTCARD_Stop_Bits */
  78.  
  79.   uint32_t Parity;                    /*!< Specifies the parity mode.
  80.                                            This parameter can be a value of @ref SMARTCARD_Parity
  81.                                            @note When parity is enabled, the computed parity is inserted
  82.                                                  at the MSB position of the transmitted data (9th bit when
  83.                                                  the word length is set to 9 data bits; 8th bit when the
  84.                                                  word length is set to 8 data bits).*/
  85.  
  86.   uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
  87.                                            This parameter can be a value of @ref SMARTCARD_Mode */
  88.  
  89.   uint32_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
  90.                                            This parameter can be a value of @ref SMARTCARD_Clock_Polarity */
  91.  
  92.   uint32_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
  93.                                            This parameter can be a value of @ref SMARTCARD_Clock_Phase */
  94.  
  95.   uint32_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
  96.                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
  97.                                            This parameter can be a value of @ref SMARTCARD_Last_Bit */
  98.  
  99.   uint32_t Prescaler;                 /*!< Specifies the SmartCard Prescaler value used for dividing the system clock
  100.                                            to provide the smartcard clock. The value given in the register (5 significant bits)
  101.                                            is multiplied by 2 to give the division factor of the source clock frequency.
  102.                                            This parameter can be a value of @ref SMARTCARD_Prescaler */
  103.  
  104.   uint32_t GuardTime;                 /*!< Specifies the SmartCard Guard Time value in terms of number of baud clocks */
  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. /**
  127.   * @brief  SMARTCARD handle Structure definition
  128.   */
  129. typedef struct
  130. {
  131.   USART_TypeDef                    *Instance;        /*!< USART registers base address */
  132.  
  133.   SMARTCARD_InitTypeDef            Init;             /*!< SmartCard communication parameters */
  134.  
  135.   uint8_t                          *pTxBuffPtr;      /*!< Pointer to SmartCard Tx transfer Buffer */
  136.  
  137.   uint16_t                         TxXferSize;       /*!< SmartCard Tx Transfer size */
  138.  
  139.   uint16_t                         TxXferCount;      /*!< SmartCard Tx Transfer Counter */
  140.  
  141.   uint8_t                          *pRxBuffPtr;      /*!< Pointer to SmartCard Rx transfer Buffer */
  142.  
  143.   uint16_t                         RxXferSize;       /*!< SmartCard Rx Transfer size */
  144.  
  145.   uint16_t                         RxXferCount;      /*!< SmartCard Rx Transfer Counter */
  146.  
  147.   DMA_HandleTypeDef                *hdmatx;          /*!< SmartCard Tx DMA Handle parameters */
  148.  
  149.   DMA_HandleTypeDef                *hdmarx;          /*!< SmartCard Rx DMA Handle parameters */
  150.  
  151.   HAL_LockTypeDef                  Lock;             /*!< Locking object */
  152.  
  153.   __IO HAL_SMARTCARD_StateTypeDef  State;            /*!< SmartCard communication state */
  154.  
  155.   __IO uint32_t  ErrorCode;        /*!< SmartCard Error code */
  156. }SMARTCARD_HandleTypeDef;
  157.  
  158. /**
  159.   * @}
  160.   */
  161.  
  162. /* Exported constants --------------------------------------------------------*/
  163. /** @defgroup SMARTCARD_Exported_Constants  SMARTCARD Exported constants
  164.   * @{
  165.   */
  166.  
  167. /** @defgroup SMARTCARD_Error_Codes SMARTCARD Error Codes
  168.   * @{
  169.   */
  170. #define HAL_SMARTCARD_ERROR_NONE      ((uint32_t)0x00)    /*!< No error            */
  171. #define HAL_SMARTCARD_ERROR_PE        ((uint32_t)0x01)    /*!< Parity error        */
  172. #define HAL_SMARTCARD_ERROR_NE        ((uint32_t)0x02)    /*!< Noise error         */
  173. #define HAL_SMARTCARD_ERROR_FE        ((uint32_t)0x04)    /*!< frame error         */
  174. #define HAL_SMARTCARD_ERROR_ORE       ((uint32_t)0x08)    /*!< Overrun error       */
  175. #define HAL_SMARTCARD_ERROR_DMA       ((uint32_t)0x10)     /*!< DMA transfer error  */
  176.  
  177. /**
  178.   * @}
  179.   */
  180.  
  181.  
  182. /** @defgroup SMARTCARD_Word_Length SMARTCARD Word Length
  183.   * @{
  184.   */
  185. #define SMARTCARD_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M)
  186.  
  187. /**
  188.   * @}
  189.   */
  190.  
  191. /** @defgroup SMARTCARD_Stop_Bits SMARTCARD Number of Stop Bits
  192.   * @{
  193.   */
  194. #define SMARTCARD_STOPBITS_0_5                   ((uint32_t)USART_CR2_STOP_0)
  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_EVEN                    ((uint32_t)USART_CR1_PCE)
  204. #define SMARTCARD_PARITY_ODD                     ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
  205. /**
  206.   * @}
  207.   */
  208.  
  209. /** @defgroup SMARTCARD_Mode SMARTCARD Mode
  210.   * @{
  211.   */
  212. #define SMARTCARD_MODE_RX                        ((uint32_t)USART_CR1_RE)
  213. #define SMARTCARD_MODE_TX                        ((uint32_t)USART_CR1_TE)
  214. #define SMARTCARD_MODE_TX_RX                     ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
  215. /**
  216.   * @}
  217.   */
  218.  
  219. /** @defgroup SMARTCARD_Clock_Polarity  SMARTCARD Clock Polarity
  220.   * @{
  221.   */
  222. #define SMARTCARD_POLARITY_LOW                   ((uint32_t)0x00000000)
  223. #define SMARTCARD_POLARITY_HIGH                  ((uint32_t)USART_CR2_CPOL)
  224. /**
  225.   * @}
  226.   */
  227.  
  228. /** @defgroup SMARTCARD_Clock_Phase SMARTCARD Clock Phase
  229.   * @{
  230.   */
  231. #define SMARTCARD_PHASE_1EDGE                    ((uint32_t)0x00000000)
  232. #define SMARTCARD_PHASE_2EDGE                    ((uint32_t)USART_CR2_CPHA)
  233. /**
  234.   * @}
  235.   */
  236.  
  237. /** @defgroup SMARTCARD_Last_Bit  SMARTCARD Last Bit
  238.   * @{
  239.   */
  240. #define SMARTCARD_LASTBIT_DISABLE                ((uint32_t)0x00000000)
  241. #define SMARTCARD_LASTBIT_ENABLE                 ((uint32_t)USART_CR2_LBCL)
  242. /**
  243.   * @}
  244.   */
  245.  
  246. /** @defgroup SMARTCARD_NACK_State   SMARTCARD NACK State
  247.   * @{
  248.   */
  249. #define SMARTCARD_NACK_ENABLE                    ((uint32_t)USART_CR3_NACK)
  250. #define SMARTCARD_NACK_DISABLE                   ((uint32_t)0x00000000)
  251. /**
  252.   * @}
  253.   */
  254.  
  255. /** @defgroup SMARTCARD_DMA_Requests SMARTCARD DMA requests
  256.   * @{
  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.  
  266. /** @defgroup SMARTCARD_Prescaler SMARTCARD Prescaler
  267.   * @{
  268.   */
  269. #define SMARTCARD_PRESCALER_SYSCLK_DIV2         ((uint32_t)0x00000001)          /*!< SYSCLK divided by 2 */
  270. #define SMARTCARD_PRESCALER_SYSCLK_DIV4         ((uint32_t)0x00000002)          /*!< SYSCLK divided by 4 */
  271. #define SMARTCARD_PRESCALER_SYSCLK_DIV6         ((uint32_t)0x00000003)          /*!< SYSCLK divided by 6 */
  272. #define SMARTCARD_PRESCALER_SYSCLK_DIV8         ((uint32_t)0x00000004)          /*!< SYSCLK divided by 8 */
  273. #define SMARTCARD_PRESCALER_SYSCLK_DIV10        ((uint32_t)0x00000005)          /*!< SYSCLK divided by 10 */
  274. #define SMARTCARD_PRESCALER_SYSCLK_DIV12        ((uint32_t)0x00000006)          /*!< SYSCLK divided by 12 */
  275. #define SMARTCARD_PRESCALER_SYSCLK_DIV14        ((uint32_t)0x00000007)          /*!< SYSCLK divided by 14 */
  276. #define SMARTCARD_PRESCALER_SYSCLK_DIV16        ((uint32_t)0x00000008)          /*!< SYSCLK divided by 16 */
  277. #define SMARTCARD_PRESCALER_SYSCLK_DIV18        ((uint32_t)0x00000009)          /*!< SYSCLK divided by 18 */
  278. #define SMARTCARD_PRESCALER_SYSCLK_DIV20        ((uint32_t)0x0000000A)          /*!< SYSCLK divided by 20 */
  279. #define SMARTCARD_PRESCALER_SYSCLK_DIV22        ((uint32_t)0x0000000B)          /*!< SYSCLK divided by 22 */
  280. #define SMARTCARD_PRESCALER_SYSCLK_DIV24        ((uint32_t)0x0000000C)          /*!< SYSCLK divided by 24 */
  281. #define SMARTCARD_PRESCALER_SYSCLK_DIV26        ((uint32_t)0x0000000D)          /*!< SYSCLK divided by 26 */
  282. #define SMARTCARD_PRESCALER_SYSCLK_DIV28        ((uint32_t)0x0000000E)          /*!< SYSCLK divided by 28 */
  283. #define SMARTCARD_PRESCALER_SYSCLK_DIV30        ((uint32_t)0x0000000F)          /*!< SYSCLK divided by 30 */
  284. #define SMARTCARD_PRESCALER_SYSCLK_DIV32        ((uint32_t)0x00000010)          /*!< SYSCLK divided by 32 */
  285. #define SMARTCARD_PRESCALER_SYSCLK_DIV34        ((uint32_t)0x00000011)          /*!< SYSCLK divided by 34 */
  286. #define SMARTCARD_PRESCALER_SYSCLK_DIV36        ((uint32_t)0x00000012)          /*!< SYSCLK divided by 36 */
  287. #define SMARTCARD_PRESCALER_SYSCLK_DIV38        ((uint32_t)0x00000013)          /*!< SYSCLK divided by 38 */
  288. #define SMARTCARD_PRESCALER_SYSCLK_DIV40        ((uint32_t)0x00000014)          /*!< SYSCLK divided by 40 */
  289. #define SMARTCARD_PRESCALER_SYSCLK_DIV42        ((uint32_t)0x00000015)          /*!< SYSCLK divided by 42 */
  290. #define SMARTCARD_PRESCALER_SYSCLK_DIV44        ((uint32_t)0x00000016)          /*!< SYSCLK divided by 44 */
  291. #define SMARTCARD_PRESCALER_SYSCLK_DIV46        ((uint32_t)0x00000017)          /*!< SYSCLK divided by 46 */
  292. #define SMARTCARD_PRESCALER_SYSCLK_DIV48        ((uint32_t)0x00000018)          /*!< SYSCLK divided by 48 */
  293. #define SMARTCARD_PRESCALER_SYSCLK_DIV50        ((uint32_t)0x00000019)          /*!< SYSCLK divided by 50 */
  294. #define SMARTCARD_PRESCALER_SYSCLK_DIV52        ((uint32_t)0x0000001A)          /*!< SYSCLK divided by 52 */
  295. #define SMARTCARD_PRESCALER_SYSCLK_DIV54        ((uint32_t)0x0000001B)          /*!< SYSCLK divided by 54 */
  296. #define SMARTCARD_PRESCALER_SYSCLK_DIV56        ((uint32_t)0x0000001C)          /*!< SYSCLK divided by 56 */
  297. #define SMARTCARD_PRESCALER_SYSCLK_DIV58        ((uint32_t)0x0000001D)          /*!< SYSCLK divided by 58 */
  298. #define SMARTCARD_PRESCALER_SYSCLK_DIV60        ((uint32_t)0x0000001E)          /*!< SYSCLK divided by 60 */
  299. #define SMARTCARD_PRESCALER_SYSCLK_DIV62        ((uint32_t)0x0000001F)          /*!< SYSCLK divided by 62 */
  300. /**
  301.   * @}
  302.   */
  303.  
  304.  
  305.  
  306. /** @defgroup SMARTCARD_Flags    SMARTCARD Flags
  307.   *        Elements values convention: 0xXXXX
  308.   *           - 0xXXXX  : Flag mask in the SR register
  309.   * @{
  310.   */
  311.  
  312. #define SMARTCARD_FLAG_TXE                      ((uint32_t)USART_SR_TXE)
  313. #define SMARTCARD_FLAG_TC                       ((uint32_t)USART_SR_TC)
  314. #define SMARTCARD_FLAG_RXNE                     ((uint32_t)USART_SR_RXNE)
  315. #define SMARTCARD_FLAG_IDLE                     ((uint32_t)USART_SR_IDLE)
  316. #define SMARTCARD_FLAG_ORE                      ((uint32_t)USART_SR_ORE)
  317. #define SMARTCARD_FLAG_NE                       ((uint32_t)USART_SR_NE)
  318. #define SMARTCARD_FLAG_FE                       ((uint32_t)USART_SR_FE)
  319. #define SMARTCARD_FLAG_PE                       ((uint32_t)USART_SR_PE)
  320. /**
  321.   * @}
  322.   */
  323.  
  324. /** @defgroup SMARTCARD_Interrupt_definition     SMARTCARD Interrupts Definition
  325.   *        Elements values convention: 0xY000XXXX
  326.   *           - XXXX  : Interrupt mask (16 bits) in the Y register
  327.   *           - Y  : Interrupt source register (4 bits)
  328.   *                 - 0001: CR1 register
  329.   *                 - 0010: CR3 register
  330.  
  331.   *
  332.   * @{
  333.   */
  334.  
  335. #define SMARTCARD_IT_PE                         ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_PEIE))
  336. #define SMARTCARD_IT_TXE                        ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_TXEIE))
  337. #define SMARTCARD_IT_TC                         ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_TCIE))
  338. #define SMARTCARD_IT_RXNE                       ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_RXNEIE))
  339. #define SMARTCARD_IT_IDLE                       ((uint32_t)(SMARTCARD_CR1_REG_INDEX << 28 | USART_CR1_IDLEIE))
  340. #define SMARTCARD_IT_ERR                        ((uint32_t)(SMARTCARD_CR3_REG_INDEX << 28 | USART_CR3_EIE))
  341.  
  342. /**
  343.   * @}
  344.   */
  345.  
  346. /**
  347.   * @}
  348.   */
  349.  
  350.    
  351. /* Exported macro ------------------------------------------------------------*/
  352. /** @defgroup SMARTCARD_Exported_Macros SMARTCARD Exported Macros
  353.   * @{
  354.   */
  355.  
  356.  
  357. /** @brief Reset SMARTCARD handle state
  358.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  359.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  360.   * @retval None
  361.   */
  362. #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SMARTCARD_STATE_RESET)
  363.  
  364. /** @brief  Flush the Smartcard DR register
  365.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  366.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  367.   * @retval None
  368.   */
  369. #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
  370.    
  371. /** @brief  Check whether the specified Smartcard flag is set or not.
  372.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  373.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  374.   * @param  __FLAG__: specifies the flag to check.
  375.   *         This parameter can be one of the following values:
  376.   *            @arg SMARTCARD_FLAG_TXE:  Transmit data register empty flag
  377.   *            @arg SMARTCARD_FLAG_TC:   Transmission Complete flag
  378.   *            @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag
  379.   *            @arg SMARTCARD_FLAG_IDLE: Idle Line detection flag
  380.   *            @arg SMARTCARD_FLAG_ORE:  OverRun Error flag
  381.   *            @arg SMARTCARD_FLAG_NE:   Noise Error flag
  382.   *            @arg SMARTCARD_FLAG_FE:   Framing Error flag
  383.   *            @arg SMARTCARD_FLAG_PE:   Parity Error flag
  384.   * @retval The new state of __FLAG__ (TRUE or FALSE).
  385.   */
  386. #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
  387.  
  388. /** @brief  Clear the specified Smartcard pending flags.
  389.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  390.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  391.   * @param  __FLAG__: specifies the flag to check.
  392.   *         This parameter can be any combination of the following values:
  393.   *            @arg SMARTCARD_FLAG_TC:   Transmission Complete flag.
  394.   *            @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag.
  395.   * @retval None
  396.   *  
  397.   * @note   PE (Parity error), FE (Framing error), NE (Noise error) and ORE (OverRun
  398.   *          error) flags are cleared by software sequence: a read operation to
  399.   *          USART_SR register followed by a read operation to USART_DR register.
  400.   * @note   RXNE flag can be also cleared by a read to the USART_DR register.
  401.   * @note   TC flag can be also cleared by software sequence: a read operation to
  402.   *          USART_SR register followed by a write operation to USART_DR register.
  403.   * @note   TXE flag is cleared only by a write to the USART_DR register.
  404.   *  
  405.   * @retval None
  406.   */
  407. #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
  408.  
  409. /** @brief  Clear the SMARTCARD PE pending flag.
  410.   * @param  __HANDLE__: specifies the USART Handle.
  411.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  412.   * @retval None
  413.   */
  414. #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) \
  415. do{                                                        \
  416.     __IO uint32_t tmpreg;                                  \
  417.     tmpreg = (__HANDLE__)->Instance->SR;                   \
  418.     tmpreg = (__HANDLE__)->Instance->DR;                   \
  419.     UNUSED(tmpreg);                                        \
  420. }while(0)  
  421.  
  422.  
  423.  
  424. /** @brief  Clear the SMARTCARD FE pending flag.
  425.   * @param  __HANDLE__: specifies the USART Handle.
  426.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  427.   * @retval None
  428.   */
  429. #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
  430.  
  431. /** @brief  Clear the SMARTCARD NE pending flag.
  432.   * @param  __HANDLE__: specifies the USART Handle.
  433.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  434.   * @retval None
  435.   */
  436. #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
  437.  
  438. /** @brief  Clear the SMARTCARD ORE pending flag.
  439.   * @param  __HANDLE__: specifies the USART Handle.
  440.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  441.   * @retval None
  442.   */
  443. #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
  444.  
  445. /** @brief  Clear the SMARTCARD IDLE pending flag.
  446.   * @param  __HANDLE__: specifies the USART Handle.
  447.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  448.   * @retval None
  449.   */
  450. #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)
  451.  
  452. /** @brief  Enable the specified SmartCard interrupt.
  453.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  454.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  455.   * @param  __INTERRUPT__: specifies the SMARTCARD interrupt to enable.
  456.   *          This parameter can be one of the following values:
  457.   *            @arg SMARTCARD_IT_TXE:  Transmit Data Register empty interrupt
  458.   *            @arg SMARTCARD_IT_TC:   Transmission complete interrupt
  459.   *            @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt
  460.   *            @arg SMARTCARD_IT_IDLE: Idle line detection interrupt
  461.   *            @arg SMARTCARD_IT_PE:   Parity Error interrupt
  462.   *            @arg SMARTCARD_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  463.   * @retval None
  464.   */
  465. #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28) == SMARTCARD_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)): \
  466.                                                                ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)))
  467.  
  468. /** @brief  Disable the specified SmartCard interrupts.
  469.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  470.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  471.   * @param  __INTERRUPT__: specifies the SMARTCARD interrupt to disable.
  472.   *          This parameter can be one of the following values:
  473.   *            @arg SMARTCARD_IT_TXE:  Transmit Data Register empty interrupt
  474.   *            @arg SMARTCARD_IT_TC:   Transmission complete interrupt
  475.   *            @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt
  476.   *            @arg SMARTCARD_IT_IDLE: Idle line detection interrupt
  477.   *            @arg SMARTCARD_IT_PE:   Parity Error interrupt
  478.   *            @arg SMARTCARD_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  479.   */
  480. #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28) == SMARTCARD_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & SMARTCARD_IT_MASK)): \
  481.                                                                ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & SMARTCARD_IT_MASK)))
  482.  
  483. /** @brief  Check whether the specified SmartCard interrupt has occurred or not.
  484.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  485.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  486.   * @param  __IT__: specifies the SMARTCARD interrupt source to check.
  487.   *          This parameter can be one of the following values:
  488.   *            @arg SMARTCARD_IT_TXE: Transmit Data Register empty interrupt
  489.   *            @arg SMARTCARD_IT_TC:  Transmission complete interrupt
  490.   *            @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt
  491.   *            @arg SMARTCARD_IT_IDLE: Idle line detection interrupt
  492.   *            @arg SMARTCARD_IT_ERR: Error interrupt
  493.   *            @arg SMARTCARD_IT_PE: Parity Error interrupt
  494.   * @retval The new state of __IT__ (TRUE or FALSE).
  495.   */
  496. #define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == SMARTCARD_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1: (__HANDLE__)->Instance->CR3) & (((uint32_t)(__IT__)) & SMARTCARD_IT_MASK))
  497.  
  498. /** @brief  Enable the USART associated to the SMARTCARD Handle
  499.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  500.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  501.   * @retval None
  502.   */
  503. #define __HAL_SMARTCARD_ENABLE(__HANDLE__)               (SET_BIT((__HANDLE__)->Instance->CR1, USART_CR1_UE))
  504.  
  505. /** @brief  Disable the USART associated to the SMARTCARD Handle
  506.   * @param  __HANDLE__: specifies the SMARTCARD Handle.
  507.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  508.   * @retval None
  509.   */
  510. #define __HAL_SMARTCARD_DISABLE(__HANDLE__)              (CLEAR_BIT((__HANDLE__)->Instance->CR1, USART_CR1_UE))
  511.  
  512. /** @brief  Enable the SmartCard DMA request.
  513.   * @param  __HANDLE__: specifies the SmartCard Handle.
  514.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  515.   * @param  __REQUEST__: specifies the SmartCard DMA request.
  516.   *         This parameter can be one of the following values:
  517.   *            @arg SMARTCARD_DMAREQ_TX: SmartCard DMA transmit request
  518.   *            @arg SMARTCARD_DMAREQ_RX: SmartCard DMA receive request
  519.   * @retval None
  520.   */
  521. #define __HAL_SMARTCARD_DMA_REQUEST_ENABLE(__HANDLE__, __REQUEST__)    (SET_BIT((__HANDLE__)->Instance->CR3, (__REQUEST__)))
  522.  
  523. /** @brief  Disable the SmartCard DMA request.
  524.   * @param  __HANDLE__: specifies the SmartCard Handle.
  525.   *         SMARTCARD Handle selects the USARTx peripheral (USART availability and x value depending on device).
  526.   * @param  __REQUEST__: specifies the SmartCard DMA request.
  527.   *         This parameter can be one of the following values:
  528.   *            @arg SMARTCARD_DMAREQ_TX: SmartCard DMA transmit request
  529.   *            @arg SMARTCARD_DMAREQ_RX: SmartCard DMA receive request
  530.   * @retval None
  531.   */
  532. #define __HAL_SMARTCARD_DMA_REQUEST_DISABLE(__HANDLE__, __REQUEST__)   (CLEAR_BIT((__HANDLE__)->Instance->CR3, (__REQUEST__)))
  533.  
  534.  
  535. /**
  536.   * @}
  537.   */
  538.  
  539.  
  540. /* Private macros --------------------------------------------------------*/
  541. /** @defgroup SMARTCARD_Private_Macros   SMARTCARD Private Macros
  542.   * @{
  543.   */
  544.  
  545. #define SMARTCARD_CR1_REG_INDEX                 1    
  546. #define SMARTCARD_CR3_REG_INDEX                 3    
  547.  
  548. #define SMARTCARD_DIV(__PCLK__, __BAUD__)                (((__PCLK__)*25)/(4*(__BAUD__)))
  549. #define SMARTCARD_DIVMANT(__PCLK__, __BAUD__)            (SMARTCARD_DIV((__PCLK__), (__BAUD__))/100)
  550. #define SMARTCARD_DIVFRAQ(__PCLK__, __BAUD__)            (((SMARTCARD_DIV((__PCLK__), (__BAUD__)) - (SMARTCARD_DIVMANT((__PCLK__), (__BAUD__)) * 100)) * 16 + 50) / 100)
  551. /* UART BRR = mantissa + overflow + fraction
  552.             = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0F) */
  553. #define SMARTCARD_BRR(_PCLK_, _BAUD_)            (((SMARTCARD_DIVMANT((_PCLK_), (_BAUD_)) << 4) + \
  554.                                                   (SMARTCARD_DIVFRAQ((_PCLK_), (_BAUD_)) & 0xF0)) + \
  555.                                                   (SMARTCARD_DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0F))
  556.  
  557. /** Check the Baud rate range.
  558.   *         The maximum Baud Rate is derived from the maximum clock on APB (i.e. 72 MHz)
  559.   *         divided by the smallest oversampling used on the USART (i.e. 16)
  560.   *         __BAUDRATE__: Baud rate set by the configuration function.
  561.   * Return : TRUE or FALSE
  562.   */
  563. #define IS_SMARTCARD_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 4500001)
  564.  
  565. #define IS_SMARTCARD_WORD_LENGTH(LENGTH)    ((LENGTH) == SMARTCARD_WORDLENGTH_9B)
  566.  
  567. #define IS_SMARTCARD_STOPBITS(STOPBITS)     (((STOPBITS) == SMARTCARD_STOPBITS_0_5) || \
  568.                                              ((STOPBITS) == SMARTCARD_STOPBITS_1_5))
  569.  
  570. #define IS_SMARTCARD_PARITY(PARITY)         (((PARITY) == SMARTCARD_PARITY_EVEN) || \
  571.                                              ((PARITY) == SMARTCARD_PARITY_ODD))
  572.  
  573. #define IS_SMARTCARD_MODE(MODE)             ((((MODE) & (~((uint32_t)SMARTCARD_MODE_TX_RX))) == 0x00) && \
  574.                                              ((MODE) != (uint32_t)0x00000000))
  575.  
  576. #define IS_SMARTCARD_POLARITY(CPOL)         (((CPOL) == SMARTCARD_POLARITY_LOW) || ((CPOL) == SMARTCARD_POLARITY_HIGH))
  577.  
  578. #define IS_SMARTCARD_PHASE(CPHA)            (((CPHA) == SMARTCARD_PHASE_1EDGE) || ((CPHA) == SMARTCARD_PHASE_2EDGE))
  579.  
  580. #define IS_SMARTCARD_LASTBIT(LASTBIT)       (((LASTBIT) == SMARTCARD_LASTBIT_DISABLE) || \
  581.                                              ((LASTBIT) == SMARTCARD_LASTBIT_ENABLE))
  582.  
  583. #define IS_SMARTCARD_NACK_STATE(NACK)       (((NACK) == SMARTCARD_NACK_ENABLE) || \
  584.                                              ((NACK) == SMARTCARD_NACK_DISABLE))
  585.  
  586. #define IS_SMARTCARD_PRESCALER(PRESCALER)   (((PRESCALER) >= SMARTCARD_PRESCALER_SYSCLK_DIV2) && \
  587.                                              ((PRESCALER) <= SMARTCARD_PRESCALER_SYSCLK_DIV62) )
  588.  
  589. /** SMARTCARD interruptions flag mask
  590.   *
  591.   */
  592. #define SMARTCARD_IT_MASK   ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \
  593.                                         USART_CR1_IDLEIE | USART_CR3_EIE )
  594.  
  595.  
  596. /**
  597.   * @}
  598.   */
  599.  
  600.  
  601. /* Exported functions --------------------------------------------------------*/
  602.  
  603. /** @addtogroup SMARTCARD_Exported_Functions SMARTCARD Exported Functions
  604.   * @{
  605.   */
  606.  
  607. /** @addtogroup SMARTCARD_Exported_Functions_Group1 Initialization and de-initialization functions
  608.   * @{
  609.   */
  610.  
  611. /* Initialization/de-initialization functions  **********************************/
  612. HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsc);
  613. HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsc);
  614. void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsc);
  615. void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsc);
  616.  
  617. /**
  618.   * @}
  619.   */
  620.  
  621. /** @addtogroup SMARTCARD_Exported_Functions_Group2 IO operation functions
  622.   * @{
  623.   */
  624.  
  625. /* IO operation functions *******************************************************/
  626. HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  627. HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  628. HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
  629. HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
  630. HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
  631. HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size);
  632. void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsc);
  633. void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsc);
  634. void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsc);
  635. void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsc);
  636.  
  637. /**
  638.   * @}
  639.   */
  640.  
  641. /** @addtogroup SMARTCARD_Exported_Functions_Group3 Peripheral State and Errors functions
  642.   * @{
  643.   */
  644.  
  645. /* Peripheral State and Errors functions functions  *****************************/
  646. HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsc);
  647. uint32_t                   HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsc);
  648.  
  649. /**
  650.   * @}
  651.   */
  652.  
  653. /**
  654.   * @}
  655.   */
  656.  
  657. /**
  658.   * @}
  659.   */
  660.  
  661. /**
  662.   * @}
  663.   */
  664.  
  665. #ifdef __cplusplus
  666. }
  667. #endif
  668.  
  669. #endif /* __STM32F1xx_HAL_SMARTCARD_H */
  670.  
  671. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  672.