198 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|   ******************************************************************************
 | |
|   * @file    stm32f7xx_hal_smartcard_ex.c
 | |
|   * @author  MCD Application Team
 | |
|   * @brief   SMARTCARD HAL module driver.
 | |
|   *          This file provides extended firmware functions to manage the following
 | |
|   *          functionalities of the SmartCard.
 | |
|   *           + Initialization and de-initialization functions
 | |
|   *           + Peripheral Control functions
 | |
|   *
 | |
|   ******************************************************************************
 | |
|   * @attention
 | |
|   *
 | |
|   * Copyright (c) 2017 STMicroelectronics.
 | |
|   * All rights reserved.
 | |
|   *
 | |
|   * This software is licensed under terms that can be found in the LICENSE file
 | |
|   * in the root directory of this software component.
 | |
|   * If no LICENSE file comes with this software, it is provided AS-IS.
 | |
|   *
 | |
|   ******************************************************************************
 | |
|   @verbatim
 | |
|   =============================================================================
 | |
|                ##### SMARTCARD peripheral extended features  #####
 | |
|   =============================================================================
 | |
|   [..]
 | |
|   The Extended SMARTCARD HAL driver can be used as follows:
 | |
| 
 | |
|     (#) After having configured the SMARTCARD basic features with HAL_SMARTCARD_Init(),
 | |
|         then program SMARTCARD advanced features if required (TX/RX pins swap, TimeOut,
 | |
|         auto-retry counter,...) in the hsmartcard AdvancedInit structure.
 | |
|   @endverbatim
 | |
|   ******************************************************************************
 | |
|   */
 | |
| 
 | |
| /* Includes ------------------------------------------------------------------*/
 | |
| #include "stm32f7xx_hal.h"
 | |
| 
 | |
| /** @addtogroup STM32F7xx_HAL_Driver
 | |
|   * @{
 | |
|   */
 | |
| 
 | |
| /** @defgroup SMARTCARDEx SMARTCARDEx
 | |
|   * @brief SMARTCARD Extended HAL module driver
 | |
|   * @{
 | |
|   */
 | |
| #ifdef HAL_SMARTCARD_MODULE_ENABLED
 | |
| 
 | |
| /* Private typedef -----------------------------------------------------------*/
 | |
| /* Private define ------------------------------------------------------------*/
 | |
| /* Private macros ------------------------------------------------------------*/
 | |
| /* Private variables ---------------------------------------------------------*/
 | |
| /* Private function prototypes -----------------------------------------------*/
 | |
| /* Exported functions --------------------------------------------------------*/
 | |
| /** @defgroup SMARTCARDEx_Exported_Functions  SMARTCARD Extended Exported Functions
 | |
|   * @{
 | |
|   */
 | |
| 
 | |
| /** @defgroup SMARTCARDEx_Exported_Functions_Group1 Extended Peripheral Control functions
 | |
|   * @brief    Extended control functions
 | |
|   *
 | |
| @verbatim
 | |
|   ===============================================================================
 | |
|                       ##### Peripheral Control functions #####
 | |
|   ===============================================================================
 | |
|   [..]
 | |
|   This subsection provides a set of functions allowing to initialize the SMARTCARD.
 | |
|      (+) HAL_SMARTCARDEx_BlockLength_Config() API allows to configure the Block Length on the fly
 | |
|      (+) HAL_SMARTCARDEx_TimeOut_Config() API allows to configure the receiver timeout value on the fly
 | |
|      (+) HAL_SMARTCARDEx_EnableReceiverTimeOut() API enables the receiver timeout feature
 | |
|      (+) HAL_SMARTCARDEx_DisableReceiverTimeOut() API disables the receiver timeout feature
 | |
| 
 | |
| @endverbatim
 | |
|   * @{
 | |
|   */
 | |
| 
 | |
| /** @brief Update on the fly the SMARTCARD block length in RTOR register.
 | |
|   * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
 | |
|   *                    the configuration information for the specified SMARTCARD module.
 | |
|   * @param BlockLength SMARTCARD block length (8-bit long at most)
 | |
|   * @retval None
 | |
|   */
 | |
| void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength)
 | |
| {
 | |
|   MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_BLEN, ((uint32_t)BlockLength << USART_RTOR_BLEN_Pos));
 | |
| }
 | |
| 
 | |
| /** @brief Update on the fly the receiver timeout value in RTOR register.
 | |
|   * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
 | |
|   *                    the configuration information for the specified SMARTCARD module.
 | |
|   * @param TimeOutValue receiver timeout value in number of baud blocks. The timeout
 | |
|   *                     value must be less or equal to 0x0FFFFFFFF.
 | |
|   * @retval None
 | |
|   */
 | |
| void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue)
 | |
| {
 | |
|   assert_param(IS_SMARTCARD_TIMEOUT_VALUE(hsmartcard->Init.TimeOutValue));
 | |
|   MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_RTO, TimeOutValue);
 | |
| }
 | |
| 
 | |
| /** @brief Enable the SMARTCARD receiver timeout feature.
 | |
|   * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
 | |
|   *                    the configuration information for the specified SMARTCARD module.
 | |
|   * @retval HAL status
 | |
|   */
 | |
| HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
 | |
| {
 | |
|   if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
 | |
|   {
 | |
|     /* Process Locked */
 | |
|     __HAL_LOCK(hsmartcard);
 | |
| 
 | |
|     hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
 | |
| 
 | |
|     /* Set the USART RTOEN bit */
 | |
|     SET_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
 | |
| 
 | |
|     hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
 | |
| 
 | |
|     /* Process Unlocked */
 | |
|     __HAL_UNLOCK(hsmartcard);
 | |
| 
 | |
|     return HAL_OK;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     return HAL_BUSY;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /** @brief Disable the SMARTCARD receiver timeout feature.
 | |
|   * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
 | |
|   *                    the configuration information for the specified SMARTCARD module.
 | |
|   * @retval HAL status
 | |
|   */
 | |
| HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
 | |
| {
 | |
|   if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
 | |
|   {
 | |
|     /* Process Locked */
 | |
|     __HAL_LOCK(hsmartcard);
 | |
| 
 | |
|     hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
 | |
| 
 | |
|     /* Clear the USART RTOEN bit */
 | |
|     CLEAR_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
 | |
| 
 | |
|     hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
 | |
| 
 | |
|     /* Process Unlocked */
 | |
|     __HAL_UNLOCK(hsmartcard);
 | |
| 
 | |
|     return HAL_OK;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     return HAL_BUSY;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| /** @defgroup SMARTCARDEx_Exported_Functions_Group2 Extended Peripheral IO operation functions
 | |
|   * @brief   SMARTCARD Transmit and Receive functions
 | |
|   *
 | |
|   * @{
 | |
|   */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| /** @defgroup SMARTCARDEx_Private_Functions  SMARTCARD Extended Private Functions
 | |
|   * @{
 | |
|   */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| #endif /* HAL_SMARTCARD_MODULE_ENABLED */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 |