Skip to content

Commit 6a79516

Browse files
committed
[L5] new system cortex M33 Device Peripheral Access Layer
Signed-off-by: Francois Ramu <[email protected]>
1 parent d0c4ac4 commit 6a79516

File tree

3 files changed

+237
-6
lines changed

3 files changed

+237
-6
lines changed

Diff for: system/STM32L5xx/stm32l5xx_hal_conf.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
/* STM32L5xx specific HAL configuration options. */
77
#if __has_include("hal_conf_custom.h")
8-
#include "hal_conf_custom.h"
8+
#include "hal_conf_custom.h"
99
#else
10-
#if __has_include("hal_conf_extra.h")
11-
#include "hal_conf_extra.h"
12-
#endif
13-
#include "stm32l5xx_hal_conf_default.h"
10+
#if __has_include("hal_conf_extra.h")
11+
#include "hal_conf_extra.h"
12+
#endif
13+
#include "stm32l5xx_hal_conf_default.h"
1414
#endif
1515

1616
#endif /* __STM32L5xx_HAL_CONF_H */

Diff for: system/STM32L5xx/stm32l5xx_hal_conf_default.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ extern "C" {
129129
* @brief Internal Low Speed oscillator (LSI) value.
130130
*/
131131
#if !defined (LSI_VALUE)
132-
#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/
132+
#define LSI_VALUE 32000UL /*!< Value of the External oscillator in Hz*/
133133
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
134134
The real value may vary depending on the variations
135135
in voltage and temperature.*/

Diff for: system/STM32L5xx/system_stm32l5xx.c

+231
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
/**
2+
******************************************************************************
3+
* @file system_stm32l5xx_ns.c
4+
* @author MCD Application Team
5+
* @brief CMSIS Cortex-M33 Device Peripheral Access Layer System Source File
6+
* to be used in non-secure application when the system implements
7+
* the TrustZone-M security.
8+
*
9+
* This file provides two functions and one global variable to be called from
10+
* user application:
11+
* - SystemInit(): This function is called at non-secure startup before
12+
* branch to non-secure main program.
13+
* This call is made inside the "startup_stm32l5xx.s" file.
14+
*
15+
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
16+
* by the user application to setup the SysTick
17+
* timer or configure other parameters.
18+
*
19+
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
20+
* be called whenever the core clock is changed
21+
* during program execution.
22+
*
23+
* After each device reset the MSI (4 MHz) is used as system clock source.
24+
* Then SystemInit() function is called, in "startup_stm32l5xx.s" file, to
25+
* configure the system clock before to branch to main secure program.
26+
* Later, when non-secure SystemInit() function is called, in "startup_stm32l5xx.s"
27+
* file, the system clock may have been updated from reset value by the main
28+
* secure program.
29+
*
30+
******************************************************************************
31+
* @attention
32+
*
33+
* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
34+
* All rights reserved.</center></h2>
35+
*
36+
* This software component is licensed by ST under Apache License, Version 2.0,
37+
* the "License"; You may not use this file except in compliance with the
38+
* License. You may obtain a copy of the License at:
39+
* opensource.org/licenses/Apache-2.0
40+
*
41+
******************************************************************************
42+
*/
43+
44+
/** @addtogroup CMSIS
45+
* @{
46+
*/
47+
48+
/** @addtogroup STM32L5xx_System
49+
* @{
50+
*/
51+
52+
/** @addtogroup STM32L5xx_System_Private_Includes
53+
* @{
54+
*/
55+
56+
#include "stm32l5xx.h"
57+
58+
/**
59+
* @}
60+
*/
61+
62+
/** @addtogroup STM32L5xx_System_Private_TypesDefinitions
63+
* @{
64+
*/
65+
66+
/**
67+
* @}
68+
*/
69+
70+
/** @addtogroup STM32L5xx_System_Private_Defines
71+
* @{
72+
*/
73+
74+
/* Note: Following vector table addresses must be defined in line with linker
75+
configuration. */
76+
/*!< Uncomment the following line if you need to relocate the vector table
77+
anywhere in Flash or Sram, else the vector table is kept at the automatic
78+
remap of boot address selected */
79+
/* #define USER_VECT_TAB_ADDRESS */
80+
81+
#if defined(USER_VECT_TAB_ADDRESS)
82+
/*!< Uncomment the following line if you need to relocate your vector Table
83+
in Sram else user remap will be done in Flash. */
84+
/* #define VECT_TAB_SRAM */
85+
86+
#if defined(VECT_TAB_SRAM)
87+
#define VECT_TAB_BASE_ADDRESS SRAM1_BASE_NS /*!< Vector Table base address field.
88+
This value must be a multiple of 0x200. */
89+
#define VECT_TAB_OFFSET 0x00018000U /*!< Vector Table base offset field.
90+
This value must be a multiple of 0x200. */
91+
#else
92+
#define VECT_TAB_BASE_ADDRESS FLASH_BASE_NS /*!< Vector Table base address field.
93+
This value must be a multiple of 0x200. */
94+
#define VECT_TAB_OFFSET 0x00040000U /*!< Vector Table base offset field.
95+
This value must be a multiple of 0x200. */
96+
#endif /* VECT_TAB_SRAM */
97+
#endif /* USER_VECT_TAB_ADDRESS */
98+
99+
/******************************************************************************/
100+
/**
101+
* @}
102+
*/
103+
104+
/** @addtogroup STM32L5xx_System_Private_Macros
105+
* @{
106+
*/
107+
108+
/**
109+
* @}
110+
*/
111+
112+
/** @addtogroup STM32L5xx_System_Private_Variables
113+
* @{
114+
*/
115+
/* The SystemCoreClock variable is updated in three ways:
116+
1) by calling CMSIS function SystemCoreClockUpdate()
117+
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
118+
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
119+
Note: If you use this function to configure the system clock; then there
120+
is no need to call the 2 first functions listed above, since SystemCoreClock
121+
variable is updated automatically.
122+
*/
123+
uint32_t SystemCoreClock = 4000000U;
124+
125+
const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};
126+
const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U};
127+
const uint32_t MSIRangeTable[16] = {100000U, 200000U, 400000U, 800000U, 1000000U, 2000000U, \
128+
4000000U, 8000000U, 16000000U, 24000000U, 32000000U, 48000000U, \
129+
0U, 0U, 0U, 0U}; /* MISRAC-2012: 0U for unexpected value */
130+
/**
131+
* @}
132+
*/
133+
134+
/** @addtogroup STM32L5xx_System_Private_FunctionPrototypes
135+
* @{
136+
*/
137+
138+
/**
139+
* @}
140+
*/
141+
142+
/** @addtogroup STM32L5xx_System_Private_Functions
143+
* @{
144+
*/
145+
146+
/**
147+
* @brief Setup the microcontroller system.
148+
* @retval None
149+
*/
150+
151+
void SystemInit(void)
152+
{
153+
/* Vector table location and FPU setup done by secure application */
154+
155+
/* Configure the Vector Table location -------------------------------------*/
156+
#if defined(USER_VECT_TAB_ADDRESS)
157+
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
158+
#endif
159+
160+
/* Non-secure main application shall call SystemCoreClockUpdate() to update */
161+
/* the SystemCoreClock variable to insure non-secure application relies on */
162+
/* the initial clock reference set by secure application. */
163+
}
164+
165+
/**
166+
* @brief Update SystemCoreClock variable according to Clock Register Values.
167+
* The SystemCoreClock variable contains the core clock (HCLK), it can
168+
* be used by the user application to setup the SysTick timer or configure
169+
* other parameters.
170+
*
171+
* @note From the non-secure application, the SystemCoreClock value is
172+
* retrieved from the secure domain via a Non-Secure Callable function
173+
* since the RCC peripheral may be protected with security attributes
174+
* that prevent to compute the SystemCoreClock variable from the RCC
175+
* peripheral registers.
176+
*
177+
* @note Each time the core clock (HCLK) changes, this function must be called
178+
* to update SystemCoreClock variable value. Otherwise, any configuration
179+
* based on this variable will be incorrect.
180+
*
181+
* @note - The system frequency computed by this function is not the real
182+
* frequency in the chip. It is calculated based on the predefined
183+
* constant and the selected clock source:
184+
*
185+
* - If SYSCLK source is MSI, SystemCoreClock will contain the MSI_VALUE(*)
186+
*
187+
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**)
188+
*
189+
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***)
190+
*
191+
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***)
192+
* or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors.
193+
*
194+
* (*) MSI_VALUE is a constant defined in stm32l5xx_hal.h file (default value
195+
* 4 MHz) but the real value may vary depending on the variations
196+
* in voltage and temperature.
197+
*
198+
* (**) HSI_VALUE is a constant defined in stm32l5xx_hal.h file (default value
199+
* 16 MHz) but the real value may vary depending on the variations
200+
* in voltage and temperature.
201+
*
202+
* (***) HSE_VALUE is a constant defined in stm32l5xx_hal.h file (default value
203+
* 8 MHz), user has to ensure that HSE_VALUE is same as the real
204+
* frequency of the crystal used. Otherwise, this function may
205+
* have wrong result.
206+
*
207+
* - The result of this function could be not correct when using fractional
208+
* value for HSE crystal.
209+
*
210+
* @retval None
211+
*/
212+
void SystemCoreClockUpdate(void)
213+
{
214+
/* Get the SystemCoreClock value from the secure domain */
215+
SystemCoreClock = SECURE_SystemCoreClockUpdate();
216+
}
217+
218+
219+
/**
220+
* @}
221+
*/
222+
223+
/**
224+
* @}
225+
*/
226+
227+
/**
228+
* @}
229+
*/
230+
231+
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

0 commit comments

Comments
 (0)