Subversion Repositories DashDisplay

Rev

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

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32l1xx_ll_utils.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of UTILS LL module.
  6.   @verbatim
  7.   ==============================================================================
  8.                      ##### How to use this driver #####
  9.   ==============================================================================
  10.     [..]
  11.     The LL UTILS driver contains a set of generic APIs that can be
  12.     used by user:
  13.       (+) Device electronic signature
  14.       (+) Timing functions
  15.       (+) PLL configuration functions
  16.  
  17.   @endverbatim
  18.   ******************************************************************************
  19.   * @attention
  20.   *
  21.   * Copyright (c) 2017 STMicroelectronics.
  22.   * All rights reserved.
  23.   *
  24.   * This software is licensed under terms that can be found in the LICENSE file
  25.   * in the root directory of this software component.
  26.   * If no LICENSE file comes with this software, it is provided AS-IS.
  27.   *
  28.   ******************************************************************************
  29.   */
  30.  
  31. /* Define to prevent recursive inclusion -------------------------------------*/
  32. #ifndef __STM32L1xx_LL_UTILS_H
  33. #define __STM32L1xx_LL_UTILS_H
  34.  
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38.  
  39. /* Includes ------------------------------------------------------------------*/
  40. #include "stm32l1xx.h"
  41.  
  42. /** @addtogroup STM32L1xx_LL_Driver
  43.   * @{
  44.   */
  45.  
  46. /** @defgroup UTILS_LL UTILS
  47.   * @{
  48.   */
  49.  
  50. /* Private types -------------------------------------------------------------*/
  51. /* Private variables ---------------------------------------------------------*/
  52.  
  53. /* Private constants ---------------------------------------------------------*/
  54. /** @defgroup UTILS_LL_Private_Constants UTILS Private Constants
  55.   * @{
  56.   */
  57.  
  58. /* Max delay can be used in LL_mDelay */
  59. #define LL_MAX_DELAY                  0xFFFFFFFFU
  60.  
  61. /**
  62.  * @brief Unique device ID register base address
  63.  */
  64. #define UID_BASE_ADDRESS              UID_BASE
  65.  
  66. /**
  67.  * @brief Flash size data register base address
  68.  */
  69. #define FLASHSIZE_BASE_ADDRESS        FLASHSIZE_BASE
  70.  
  71. /**
  72.   * @}
  73.   */
  74.  
  75. /* Private macros ------------------------------------------------------------*/
  76. /** @defgroup UTILS_LL_Private_Macros UTILS Private Macros
  77.   * @{
  78.   */
  79. /**
  80.   * @}
  81.   */
  82. /* Exported types ------------------------------------------------------------*/
  83. /** @defgroup UTILS_LL_ES_INIT UTILS Exported structures
  84.   * @{
  85.   */
  86. /**
  87.   * @brief  UTILS PLL structure definition
  88.   */
  89. typedef struct
  90. {
  91.   uint32_t PLLMul;   /*!< Multiplication factor for PLL VCO input clock.
  92.                           This parameter can be a value of @ref RCC_LL_EC_PLL_MUL
  93.  
  94.                           This feature can be modified afterwards using unitary function
  95.                           @ref LL_RCC_PLL_ConfigDomain_SYS(). */
  96.  
  97.   uint32_t PLLDiv;   /*!< Division factor for PLL VCO output clock.
  98.                           This parameter can be a value of @ref RCC_LL_EC_PLL_DIV
  99.  
  100.                           This feature can be modified afterwards using unitary function
  101.                           @ref LL_RCC_PLL_ConfigDomain_SYS(). */
  102. } LL_UTILS_PLLInitTypeDef;
  103.  
  104. /**
  105.   * @brief  UTILS System, AHB and APB buses clock configuration structure definition
  106.   */
  107. typedef struct
  108. {
  109.   uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
  110.                                        This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV
  111.  
  112.                                        This feature can be modified afterwards using unitary function
  113.                                        @ref LL_RCC_SetAHBPrescaler(). */
  114.  
  115.   uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
  116.                                        This parameter can be a value of @ref RCC_LL_EC_APB1_DIV
  117.  
  118.                                        This feature can be modified afterwards using unitary function
  119.                                        @ref LL_RCC_SetAPB1Prescaler(). */
  120.  
  121.   uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
  122.                                        This parameter can be a value of @ref RCC_LL_EC_APB2_DIV
  123.  
  124.                                        This feature can be modified afterwards using unitary function
  125.                                        @ref LL_RCC_SetAPB2Prescaler(). */
  126.  
  127. } LL_UTILS_ClkInitTypeDef;
  128.  
  129. /**
  130.   * @}
  131.   */
  132.  
  133. /* Exported constants --------------------------------------------------------*/
  134. /** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants
  135.   * @{
  136.   */
  137.  
  138. /** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation
  139.   * @{
  140.   */
  141. #define LL_UTILS_HSEBYPASS_OFF        0x00000000U       /*!< HSE Bypass is not enabled                */
  142. #define LL_UTILS_HSEBYPASS_ON         0x00000001U       /*!< HSE Bypass is enabled                    */
  143. /**
  144.   * @}
  145.   */
  146.  
  147. /**
  148.   * @}
  149.   */
  150.  
  151. /* Exported macro ------------------------------------------------------------*/
  152.  
  153. /* Exported functions --------------------------------------------------------*/
  154. /** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions
  155.   * @{
  156.   */
  157.  
  158. /** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE
  159.   * @{
  160.   */
  161.  
  162. /**
  163.   * @brief  Get Word0 of the unique device identifier (UID based on 96 bits)
  164.   * @retval UID[31:0]
  165.   */
  166. __STATIC_INLINE uint32_t LL_GetUID_Word0(void)
  167. {
  168.   return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS)));
  169. }
  170.  
  171. /**
  172.   * @brief  Get Word1 of the unique device identifier (UID based on 96 bits)
  173.   * @retval UID[63:32]
  174.   */
  175. __STATIC_INLINE uint32_t LL_GetUID_Word1(void)
  176. {
  177.   return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 0x04U))));
  178. }
  179.  
  180. /**
  181.   * @brief  Get Word2 of the unique device identifier (UID based on 96 bits)
  182.   * @retval UID[95:64]
  183.   */
  184. __STATIC_INLINE uint32_t LL_GetUID_Word2(void)
  185. {
  186.   return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 0x14U))));
  187. }
  188.  
  189. /**
  190.   * @brief  Get Flash memory size
  191.   * @note   For DEV_ID = 0x416 or 0x427 or 0x429 or 0x437, this field value indicates the Flash memory
  192.   *         size of the device in Kbytes.\n
  193.   *         Example: 0x0080 = 128 Kbytes.\n
  194.   *         For DEV_ID = 0x436, the field value can be '0' or '1', with '0' for 384 Kbytes and '1' for 256 Kbytes.
  195.   * @note   For DEV_ID = 0x429, only LSB part of F_SIZE: F_SIZE[7:0] is valid. The MSB part
  196.   *         F_SIZE[15:8] is reserved and must be ignored.
  197.   * @retval FLASH_SIZE[15:0]: Flash memory size
  198.   */
  199. __STATIC_INLINE uint32_t LL_GetFlashSize(void)
  200. {
  201.   return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFFU);
  202. }
  203.  
  204.  
  205. /**
  206.   * @}
  207.   */
  208.  
  209. /** @defgroup UTILS_LL_EF_DELAY DELAY
  210.   * @{
  211.   */
  212.  
  213. /**
  214.   * @brief  This function configures the Cortex-M SysTick source of the time base.
  215.   * @param  HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro)
  216.   * @note   When a RTOS is used, it is recommended to avoid changing the SysTick
  217.   *         configuration by calling this function, for a delay use rather osDelay RTOS service.
  218.   * @param  Ticks Number of ticks
  219.   * @retval None
  220.   */
  221. __STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
  222. {
  223.   /* Configure the SysTick to have interrupt in 1ms time base */
  224.   SysTick->LOAD  = (uint32_t)((HCLKFrequency / Ticks) - 1UL);  /* set reload register */
  225.   SysTick->VAL   = 0UL;                                       /* Load the SysTick Counter Value */
  226.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
  227.                    SysTick_CTRL_ENABLE_Msk;                   /* Enable the Systick Timer */
  228. }
  229.  
  230. void        LL_Init1msTick(uint32_t HCLKFrequency);
  231. void        LL_mDelay(uint32_t Delay);
  232.  
  233. /**
  234.   * @}
  235.   */
  236.  
  237. /** @defgroup UTILS_EF_SYSTEM SYSTEM
  238.   * @{
  239.   */
  240.  
  241. void        LL_SetSystemCoreClock(uint32_t HCLKFrequency);
  242. ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
  243.                                          LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
  244. ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass,
  245.                                          LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
  246. #if defined(FLASH_ACR_LATENCY)
  247. ErrorStatus LL_SetFlashLatency(uint32_t Frequency);
  248. #endif /* FLASH_ACR_LATENCY */
  249.  
  250. /**
  251.   * @}
  252.   */
  253.  
  254. /**
  255.   * @}
  256.   */
  257.  
  258. /**
  259.   * @}
  260.   */
  261.  
  262. /**
  263.   * @}
  264.   */
  265.  
  266. #ifdef __cplusplus
  267. }
  268. #endif
  269.  
  270. #endif /* __STM32L1xx_LL_UTILS_H */
  271.