Subversion Repositories DashDisplay

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_hal_cortex.c
  4.   * @author  MCD Application Team
  5.   * @version V1.0.1
  6.   * @date    31-July-2015
  7.   * @brief   CORTEX HAL module driver.
  8.   *
  9.   *          This file provides firmware functions to manage the following
  10.   *          functionalities of the CORTEX:
  11.   *           + Initialization and de-initialization functions
  12.   *           + Peripheral Control functions
  13.   *          
  14.   *  @verbatim    
  15.   ==============================================================================
  16.                         ##### How to use this driver #####
  17.   ==============================================================================
  18.  
  19.     [..]  
  20.     *** How to configure Interrupts using Cortex HAL driver ***
  21.     ===========================================================
  22.     [..]    
  23.     This section provide functions allowing to configure the NVIC interrupts (IRQ).
  24.     The Cortex-M3 exceptions are managed by CMSIS functions.
  25.    
  26.     (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping()
  27.         function according to the following table.
  28.  
  29.      The table below gives the allowed values of the pre-emption priority and subpriority according
  30.      to the Priority Grouping configuration performed by HAL_NVIC_SetPriorityGrouping() function.
  31.        ==========================================================================================================================
  32.          NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  |       Description
  33.        ==========================================================================================================================
  34.         NVIC_PRIORITYGROUP_0  |                0                  |            0-15             | 0 bits for pre-emption priority
  35.                               |                                   |                             | 4 bits for subpriority
  36.        --------------------------------------------------------------------------------------------------------------------------
  37.         NVIC_PRIORITYGROUP_1  |                0-1                |            0-7              | 1 bits for pre-emption priority
  38.                               |                                   |                             | 3 bits for subpriority
  39.        --------------------------------------------------------------------------------------------------------------------------    
  40.         NVIC_PRIORITYGROUP_2  |                0-3                |            0-3              | 2 bits for pre-emption priority
  41.                               |                                   |                             | 2 bits for subpriority
  42.        --------------------------------------------------------------------------------------------------------------------------    
  43.         NVIC_PRIORITYGROUP_3  |                0-7                |            0-1              | 3 bits for pre-emption priority
  44.                               |                                   |                             | 1 bits for subpriority
  45.        --------------------------------------------------------------------------------------------------------------------------    
  46.         NVIC_PRIORITYGROUP_4  |                0-15               |            0                | 4 bits for pre-emption priority
  47.                               |                                   |                             | 0 bits for subpriority                      
  48.        ==========================================================================================================================
  49.      (#)  Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority()
  50.  
  51.      (#)  Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ()
  52.      
  53.  
  54.      -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible.
  55.          The pending IRQ priority will be managed only by the sub priority.
  56.    
  57.      -@- IRQ priority order (sorted by highest to lowest priority):
  58.         (+@) Lowest pre-emption priority
  59.         (+@) Lowest sub priority
  60.         (+@) Lowest hardware priority (IRQ number)
  61.  
  62.     [..]  
  63.     *** How to configure Systick using Cortex HAL driver ***
  64.     ========================================================
  65.     [..]
  66.     Setup SysTick Timer for 1 msec interrupts.
  67.            
  68.    (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which
  69.        is a CMSIS function that:
  70.         (++) Configures the SysTick Reload register with value passed as function parameter.
  71.         (++) Configures the SysTick IRQ priority to the lowest value (0x0F).
  72.         (++) Resets the SysTick Counter register.
  73.         (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).
  74.         (++) Enables the SysTick Interrupt.
  75.         (++) Starts the SysTick Counter.
  76.    
  77.    (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro
  78.        __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the
  79.        HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined
  80.        inside the stm32f1xx_hal_cortex.h file.
  81.  
  82.    (+) You can change the SysTick IRQ priority by calling the
  83.        HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function
  84.        call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.
  85.  
  86.    (+) To adjust the SysTick time base, use the following formula:
  87.                            
  88.        Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)
  89.        (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function
  90.        (++) Reload Value should not exceed 0xFFFFFF
  91.    
  92.   @endverbatim
  93.   ******************************************************************************
  94.   * @attention
  95.   *
  96.   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
  97.   *
  98.   * Redistribution and use in source and binary forms, with or without modification,
  99.   * are permitted provided that the following conditions are met:
  100.   *   1. Redistributions of source code must retain the above copyright notice,
  101.   *      this list of conditions and the following disclaimer.
  102.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  103.   *      this list of conditions and the following disclaimer in the documentation
  104.   *      and/or other materials provided with the distribution.
  105.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  106.   *      may be used to endorse or promote products derived from this software
  107.   *      without specific prior written permission.
  108.   *
  109.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  110.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  111.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  112.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  113.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  114.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  115.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  116.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  117.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  118.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  119.   *
  120.   ******************************************************************************
  121.   */
  122.  
  123. /* Includes ------------------------------------------------------------------*/
  124. #include "stm32f1xx_hal.h"
  125.  
  126. /** @addtogroup STM32F1xx_HAL_Driver
  127.   * @{
  128.   */
  129.  
  130. /** @defgroup CORTEX CORTEX
  131.   * @brief CORTEX HAL module driver
  132.   * @{
  133.   */
  134.  
  135. #ifdef HAL_CORTEX_MODULE_ENABLED
  136.  
  137. /* Private typedef -----------------------------------------------------------*/
  138. /* Private define ------------------------------------------------------------*/
  139. /* Private macro -------------------------------------------------------------*/
  140. /* Private variables ---------------------------------------------------------*/
  141. /* Private function prototypes -----------------------------------------------*/
  142. /* Private functions ---------------------------------------------------------*/
  143.  
  144. /** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions
  145.   * @{
  146.   */
  147.  
  148.  
  149. /** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions
  150.  *  @brief    Initialization and Configuration functions
  151.  *
  152. @verbatim    
  153.   ==============================================================================
  154.               ##### Initialization and de-initialization functions #####
  155.   ==============================================================================
  156.     [..]
  157.       This section provide the Cortex HAL driver functions allowing to configure Interrupts
  158.       Systick functionalities
  159.  
  160. @endverbatim
  161.   * @{
  162.   */
  163.  
  164.  
  165. /**
  166.   * @brief  Sets the priority grouping field (pre-emption priority and subpriority)
  167.   *         using the required unlock sequence.
  168.   * @param  PriorityGroup: The priority grouping bits length.
  169.   *         This parameter can be one of the following values:
  170.   *         @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority
  171.   *                                    4 bits for subpriority
  172.   *         @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority
  173.   *                                    3 bits for subpriority
  174.   *         @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority
  175.   *                                    2 bits for subpriority
  176.   *         @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority
  177.   *                                    1 bits for subpriority
  178.   *         @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority
  179.   *                                    0 bits for subpriority
  180.   * @note   When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible.
  181.   *         The pending IRQ priority will be managed only by the subpriority.
  182.   * @retval None
  183.   */
  184. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  185. {
  186.   /* Check the parameters */
  187.   assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  188.  
  189.   /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  190.   NVIC_SetPriorityGrouping(PriorityGroup);
  191. }
  192.  
  193. /**
  194.   * @brief  Sets the priority of an interrupt.
  195.   * @param  IRQn: External interrupt number
  196.   *         This parameter can be an enumerator of IRQn_Type enumeration
  197.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))
  198.   * @param  PreemptPriority: The pre-emption priority for the IRQn channel.
  199.   *         This parameter can be a value between 0 and 15
  200.   *         A lower priority value indicates a higher priority
  201.   * @param  SubPriority: the subpriority level for the IRQ channel.
  202.   *         This parameter can be a value between 0 and 15
  203.   *         A lower priority value indicates a higher priority.          
  204.   * @retval None
  205.   */
  206. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  207. {
  208.   uint32_t prioritygroup = 0x00;
  209.  
  210.   /* Check the parameters */
  211.   assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  212.   assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  213.  
  214.   prioritygroup = NVIC_GetPriorityGrouping();
  215.  
  216.   NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  217. }
  218.  
  219. /**
  220.   * @brief  Enables a device specific interrupt in the NVIC interrupt controller.
  221.   * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
  222.   *         function should be called before.
  223.   * @param  IRQn External interrupt number
  224.   *         This parameter can be an enumerator of IRQn_Type enumeration
  225.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))
  226.   * @retval None
  227.   */
  228. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  229. {
  230.   /* Check the parameters */
  231.   assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  232.  
  233.   /* Enable interrupt */
  234.   NVIC_EnableIRQ(IRQn);
  235. }
  236.  
  237. /**
  238.   * @brief  Disables a device specific interrupt in the NVIC interrupt controller.
  239.   * @param  IRQn External interrupt number
  240.   *         This parameter can be an enumerator of IRQn_Type enumeration
  241.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))  
  242.   * @retval None
  243.   */
  244. void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
  245. {
  246.   /* Check the parameters */
  247.   assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  248.  
  249.  
  250.   /* Disable interrupt */
  251.   NVIC_DisableIRQ(IRQn);
  252. }
  253.  
  254. /**
  255.   * @brief  Initiates a system reset request to reset the MCU.
  256.   * @retval None
  257.   */
  258. void HAL_NVIC_SystemReset(void)
  259. {
  260.   /* System Reset */
  261.   NVIC_SystemReset();
  262. }
  263.  
  264. /**
  265.   * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.
  266.   *         Counter is in free running mode to generate periodic interrupts.
  267.   * @param  TicksNumb: Specifies the ticks Number of ticks between two interrupts.
  268.   * @retval status:  - 0  Function succeeded.
  269.   *                  - 1  Function failed.
  270.   */
  271. uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
  272. {
  273.    return SysTick_Config(TicksNumb);
  274. }
  275. /**
  276.   * @}
  277.   */
  278.  
  279. /** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions
  280.  *  @brief    Cortex control functions
  281.  *
  282. @verbatim  
  283.   ==============================================================================
  284.                       ##### Peripheral Control functions #####
  285.   ==============================================================================
  286.     [..]
  287.       This subsection provides a set of functions allowing to control the CORTEX
  288.       (NVIC, SYSTICK, MPU) functionalities.
  289.  
  290.      
  291. @endverbatim
  292.   * @{
  293.   */
  294.  
  295. #if (__MPU_PRESENT == 1)
  296. /**
  297.   * @brief  Initializes and configures the Region and the memory to be protected.
  298.   * @param  MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains
  299.   *                the initialization and configuration information.
  300.   * @retval None
  301.   */
  302. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  303. {
  304.   /* Check the parameters */
  305.   assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));
  306.   assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));
  307.  
  308.   /* Set the Region number */
  309.   MPU->RNR = MPU_Init->Number;
  310.  
  311.   if ((MPU_Init->Enable) != RESET)
  312.   {
  313.     /* Check the parameters */
  314.     assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));
  315.     assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));
  316.     assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));
  317.     assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));
  318.     assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));
  319.     assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  320.     assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  321.     assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  322.    
  323.     MPU->RBAR = MPU_Init->BaseAddress;
  324.     MPU->RASR = ((uint32_t)MPU_Init->DisableExec             << MPU_RASR_XN_Pos)   |
  325.                 ((uint32_t)MPU_Init->AccessPermission        << MPU_RASR_AP_Pos)   |
  326.                 ((uint32_t)MPU_Init->TypeExtField            << MPU_RASR_TEX_Pos)  |
  327.                 ((uint32_t)MPU_Init->IsShareable             << MPU_RASR_S_Pos)    |
  328.                 ((uint32_t)MPU_Init->IsCacheable             << MPU_RASR_C_Pos)    |
  329.                 ((uint32_t)MPU_Init->IsBufferable            << MPU_RASR_B_Pos)    |
  330.                 ((uint32_t)MPU_Init->SubRegionDisable        << MPU_RASR_SRD_Pos)  |
  331.                 ((uint32_t)MPU_Init->Size                    << MPU_RASR_SIZE_Pos) |
  332.                 ((uint32_t)MPU_Init->Enable                  << MPU_RASR_ENABLE_Pos);
  333.   }
  334.   else
  335.   {
  336.     MPU->RBAR = 0x00;
  337.     MPU->RASR = 0x00;
  338.   }
  339. }
  340. #endif /* __MPU_PRESENT */
  341.  
  342. /**
  343.   * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.
  344.   * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)
  345.   */
  346. uint32_t HAL_NVIC_GetPriorityGrouping(void)
  347. {
  348.   /* Get the PRIGROUP[10:8] field value */
  349.   return NVIC_GetPriorityGrouping();
  350. }
  351.  
  352. /**
  353.   * @brief  Gets the priority of an interrupt.
  354.   * @param  IRQn: External interrupt number
  355.   *         This parameter can be an enumerator of IRQn_Type enumeration
  356.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))
  357.   * @param   PriorityGroup: the priority grouping bits length.
  358.   *         This parameter can be one of the following values:
  359.   *           @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority
  360.   *                                      4 bits for subpriority
  361.   *           @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority
  362.   *                                      3 bits for subpriority
  363.   *           @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority
  364.   *                                      2 bits for subpriority
  365.   *           @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority
  366.   *                                      1 bits for subpriority
  367.   *           @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority
  368.   *                                      0 bits for subpriority
  369.   * @param  pPreemptPriority: Pointer on the Preemptive priority value (starting from 0).
  370.   * @param  pSubPriority: Pointer on the Subpriority value (starting from 0).
  371.   * @retval None
  372.   */
  373. void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority)
  374. {
  375.   /* Check the parameters */
  376.   assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  377.  /* Get priority for Cortex-M system or device specific interrupts */
  378.   NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);
  379. }
  380.  
  381. /**
  382.   * @brief  Sets Pending bit of an external interrupt.
  383.   * @param  IRQn External interrupt number
  384.   *         This parameter can be an enumerator of IRQn_Type enumeration
  385.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))  
  386.   * @retval None
  387.   */
  388. void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
  389. {
  390.   /* Set interrupt pending */
  391.   NVIC_SetPendingIRQ(IRQn);
  392. }
  393.  
  394. /**
  395.   * @brief Gets Pending Interrupt (reads the pending register in the NVIC
  396.   *         and returns the pending bit for the specified interrupt).
  397.   * @param IRQn External interrupt number
  398.   *         This parameter can be an enumerator of IRQn_Type enumeration
  399.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))  
  400.   * @retval status: - 0  Interrupt status is not pending.
  401.   *                 - 1  Interrupt status is pending.
  402.   */
  403. uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)
  404. {
  405.   /* Return 1 if pending else 0 */
  406.   return NVIC_GetPendingIRQ(IRQn);
  407. }
  408.  
  409. /**
  410.   * @brief Clears the pending bit of an external interrupt.
  411.   * @param IRQn External interrupt number
  412.   *         This parameter can be an enumerator of IRQn_Type enumeration
  413.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))  
  414.   * @retval None
  415.   */
  416. void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
  417. {
  418.   /* Clear pending interrupt */
  419.   NVIC_ClearPendingIRQ(IRQn);
  420. }
  421.  
  422. /**
  423.   * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).
  424.   * @param IRQn External interrupt number
  425.   *         This parameter can be an enumerator of IRQn_Type enumeration
  426.   *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))  
  427.   * @retval status: - 0  Interrupt status is not pending.
  428.   *                 - 1  Interrupt status is pending.
  429.   */
  430. uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn)
  431. {
  432.   /* Return 1 if active else 0 */
  433.   return NVIC_GetActive(IRQn);
  434. }
  435.  
  436. /**
  437.   * @brief  Configures the SysTick clock source.
  438.   * @param  CLKSource: specifies the SysTick clock source.
  439.   *         This parameter can be one of the following values:
  440.   *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
  441.   *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
  442.   * @retval None
  443.   */
  444. void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
  445. {
  446.   /* Check the parameters */
  447.   assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
  448.   if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
  449.   {
  450.     SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
  451.   }
  452.   else
  453.   {
  454.     SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
  455.   }
  456. }
  457.  
  458. /**
  459.   * @brief  This function handles SYSTICK interrupt request.
  460.   * @retval None
  461.   */
  462. void HAL_SYSTICK_IRQHandler(void)
  463. {
  464.   HAL_SYSTICK_Callback();
  465. }
  466.  
  467. /**
  468.   * @brief  SYSTICK callback.
  469.   * @retval None
  470.   */
  471. __weak void HAL_SYSTICK_Callback(void)
  472. {
  473.   /* NOTE : This function Should not be modified, when the callback is needed,
  474.             the HAL_SYSTICK_Callback could be implemented in the user file
  475.    */
  476. }
  477.  
  478. /**
  479.   * @}
  480.   */
  481.  
  482. /**
  483.   * @}
  484.   */
  485.  
  486. #endif /* HAL_CORTEX_MODULE_ENABLED */
  487. /**
  488.   * @}
  489.   */
  490.  
  491. /**
  492.   * @}
  493.   */
  494.  
  495. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  496.