Subversion Repositories DashDisplay

Rev

Rev 56 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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