lib: Update stm32f0 to use upstream github source
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
1feea0cfe8
commit
729ac52851
|
@ -38,9 +38,10 @@ Contents taken from the targets/TARGET_NXP/TARGET_LPC176X/ directory.
|
||||||
It has been modified to set the appropriate clock speeds on the
|
It has been modified to set the appropriate clock speeds on the
|
||||||
LPC1768 and LPC1769. See lpc176x.patch for the modifications.
|
LPC1768 and LPC1769. See lpc176x.patch for the modifications.
|
||||||
|
|
||||||
The stm32f0 directory contains code from STMicroelectronics:
|
The stm32f0 directory contains code from:
|
||||||
http://www.st.com/en/embedded-software/stm32cubef1.html
|
https://github.com/STMicroelectronics/STM32CubeF0
|
||||||
version 1.10.0 (extracted 20190721).
|
version v1.10.1 (d0c380d668c67dcdd4e44f656be27045ce4006a6). Contents
|
||||||
|
taken from the Drivers/CMSIS/Device/ST/STM32F0xx/ directory.
|
||||||
|
|
||||||
The stm32f1 directory contains code from STMicroelectronics:
|
The stm32f1 directory contains code from STMicroelectronics:
|
||||||
http://www.st.com/en/embedded-software/stm32cubef1.html
|
http://www.st.com/en/embedded-software/stm32cubef1.html
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,242 +1,242 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file stm32f0xx.h
|
* @file stm32f0xx.h
|
||||||
* @author MCD Application Team
|
* @author MCD Application Team
|
||||||
* @brief CMSIS STM32F0xx Device Peripheral Access Layer Header File.
|
* @brief CMSIS STM32F0xx Device Peripheral Access Layer Header File.
|
||||||
*
|
*
|
||||||
* The file is the unique include file that the application programmer
|
* The file is the unique include file that the application programmer
|
||||||
* is using in the C source code, usually in main.c. This file contains:
|
* is using in the C source code, usually in main.c. This file contains:
|
||||||
* - Configuration section that allows to select:
|
* - Configuration section that allows to select:
|
||||||
* - The STM32F0xx device used in the target application
|
* - The STM32F0xx device used in the target application
|
||||||
* - To use or not the peripheral’s drivers in application code(i.e.
|
* - To use or not the peripheral’s drivers in application code(i.e.
|
||||||
* code will be based on direct access to peripheral’s registers
|
* code will be based on direct access to peripheral’s registers
|
||||||
* rather than drivers API), this option is controlled by
|
* rather than drivers API), this option is controlled by
|
||||||
* "#define USE_HAL_DRIVER"
|
* "#define USE_HAL_DRIVER"
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup CMSIS
|
/** @addtogroup CMSIS
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup stm32f0xx
|
/** @addtogroup stm32f0xx
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __STM32F0xx_H
|
#ifndef __STM32F0xx_H
|
||||||
#define __STM32F0xx_H
|
#define __STM32F0xx_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
/** @addtogroup Library_configuration_section
|
/** @addtogroup Library_configuration_section
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief STM32 Family
|
* @brief STM32 Family
|
||||||
*/
|
*/
|
||||||
#if !defined (STM32F0)
|
#if !defined (STM32F0)
|
||||||
#define STM32F0
|
#define STM32F0
|
||||||
#endif /* STM32F0 */
|
#endif /* STM32F0 */
|
||||||
|
|
||||||
/* Uncomment the line below according to the target STM32 device used in your
|
/* Uncomment the line below according to the target STM32 device used in your
|
||||||
application
|
application
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined (STM32F030x6) && !defined (STM32F030x8) && \
|
#if !defined (STM32F030x6) && !defined (STM32F030x8) && \
|
||||||
!defined (STM32F031x6) && !defined (STM32F038xx) && \
|
!defined (STM32F031x6) && !defined (STM32F038xx) && \
|
||||||
!defined (STM32F042x6) && !defined (STM32F048xx) && !defined (STM32F070x6) && \
|
!defined (STM32F042x6) && !defined (STM32F048xx) && !defined (STM32F070x6) && \
|
||||||
!defined (STM32F051x8) && !defined (STM32F058xx) && \
|
!defined (STM32F051x8) && !defined (STM32F058xx) && \
|
||||||
!defined (STM32F071xB) && !defined (STM32F072xB) && !defined (STM32F078xx) && !defined (STM32F070xB) && \
|
!defined (STM32F071xB) && !defined (STM32F072xB) && !defined (STM32F078xx) && !defined (STM32F070xB) && \
|
||||||
!defined (STM32F091xC) && !defined (STM32F098xx) && !defined (STM32F030xC)
|
!defined (STM32F091xC) && !defined (STM32F098xx) && !defined (STM32F030xC)
|
||||||
/* #define STM32F030x6 */ /*!< STM32F030x4, STM32F030x6 Devices (STM32F030xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
/* #define STM32F030x6 */ /*!< STM32F030x4, STM32F030x6 Devices (STM32F030xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||||
/* #define STM32F030x8 */ /*!< STM32F030x8 Devices (STM32F030xx microcontrollers where the Flash memory is 64 Kbytes) */
|
/* #define STM32F030x8 */ /*!< STM32F030x8 Devices (STM32F030xx microcontrollers where the Flash memory is 64 Kbytes) */
|
||||||
/* #define STM32F031x6 */ /*!< STM32F031x4, STM32F031x6 Devices (STM32F031xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
/* #define STM32F031x6 */ /*!< STM32F031x4, STM32F031x6 Devices (STM32F031xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||||
/* #define STM32F038xx */ /*!< STM32F038xx Devices (STM32F038xx microcontrollers where the Flash memory is 32 Kbytes) */
|
/* #define STM32F038xx */ /*!< STM32F038xx Devices (STM32F038xx microcontrollers where the Flash memory is 32 Kbytes) */
|
||||||
/* #define STM32F042x6 */ /*!< STM32F042x4, STM32F042x6 Devices (STM32F042xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
/* #define STM32F042x6 */ /*!< STM32F042x4, STM32F042x6 Devices (STM32F042xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||||
/* #define STM32F048x6 */ /*!< STM32F048xx Devices (STM32F042xx microcontrollers where the Flash memory is 32 Kbytes) */
|
/* #define STM32F048x6 */ /*!< STM32F048xx Devices (STM32F042xx microcontrollers where the Flash memory is 32 Kbytes) */
|
||||||
/* #define STM32F051x8 */ /*!< STM32F051x4, STM32F051x6, STM32F051x8 Devices (STM32F051xx microcontrollers where the Flash memory ranges between 16 and 64 Kbytes) */
|
/* #define STM32F051x8 */ /*!< STM32F051x4, STM32F051x6, STM32F051x8 Devices (STM32F051xx microcontrollers where the Flash memory ranges between 16 and 64 Kbytes) */
|
||||||
/* #define STM32F058xx */ /*!< STM32F058xx Devices (STM32F058xx microcontrollers where the Flash memory is 64 Kbytes) */
|
/* #define STM32F058xx */ /*!< STM32F058xx Devices (STM32F058xx microcontrollers where the Flash memory is 64 Kbytes) */
|
||||||
/* #define STM32F070x6 */ /*!< STM32F070x6 Devices (STM32F070x6 microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
/* #define STM32F070x6 */ /*!< STM32F070x6 Devices (STM32F070x6 microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||||
/* #define STM32F070xB */ /*!< STM32F070xB Devices (STM32F070xB microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
/* #define STM32F070xB */ /*!< STM32F070xB Devices (STM32F070xB microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||||
/* #define STM32F071xB */ /*!< STM32F071x8, STM32F071xB Devices (STM32F071xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
/* #define STM32F071xB */ /*!< STM32F071x8, STM32F071xB Devices (STM32F071xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||||
/* #define STM32F072xB */ /*!< STM32F072x8, STM32F072xB Devices (STM32F072xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
/* #define STM32F072xB */ /*!< STM32F072x8, STM32F072xB Devices (STM32F072xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||||
/* #define STM32F078xx */ /*!< STM32F078xx Devices (STM32F078xx microcontrollers where the Flash memory is 128 Kbytes) */
|
/* #define STM32F078xx */ /*!< STM32F078xx Devices (STM32F078xx microcontrollers where the Flash memory is 128 Kbytes) */
|
||||||
/* #define STM32F030xC */ /*!< STM32F030xC Devices (STM32F030xC microcontrollers where the Flash memory is 256 Kbytes) */
|
/* #define STM32F030xC */ /*!< STM32F030xC Devices (STM32F030xC microcontrollers where the Flash memory is 256 Kbytes) */
|
||||||
/* #define STM32F091xC */ /*!< STM32F091xB, STM32F091xC Devices (STM32F091xx microcontrollers where the Flash memory ranges between 128 and 256 Kbytes) */
|
/* #define STM32F091xC */ /*!< STM32F091xB, STM32F091xC Devices (STM32F091xx microcontrollers where the Flash memory ranges between 128 and 256 Kbytes) */
|
||||||
/* #define STM32F098xx */ /*!< STM32F098xx Devices (STM32F098xx microcontrollers where the Flash memory is 256 Kbytes) */
|
/* #define STM32F098xx */ /*!< STM32F098xx Devices (STM32F098xx microcontrollers where the Flash memory is 256 Kbytes) */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||||
devices, you can define the device in your toolchain compiler preprocessor.
|
devices, you can define the device in your toolchain compiler preprocessor.
|
||||||
*/
|
*/
|
||||||
#if !defined (USE_HAL_DRIVER)
|
#if !defined (USE_HAL_DRIVER)
|
||||||
/**
|
/**
|
||||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||||
In this case, these drivers will not be included and the application code will
|
In this case, these drivers will not be included and the application code will
|
||||||
be based on direct access to peripherals registers
|
be based on direct access to peripherals registers
|
||||||
*/
|
*/
|
||||||
/*#define USE_HAL_DRIVER */
|
/*#define USE_HAL_DRIVER */
|
||||||
#endif /* USE_HAL_DRIVER */
|
#endif /* USE_HAL_DRIVER */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CMSIS Device version number V2.3.3
|
* @brief CMSIS Device version number V2.3.3
|
||||||
*/
|
*/
|
||||||
#define __STM32F0_DEVICE_VERSION_MAIN (0x02) /*!< [31:24] main version */
|
#define __STM32F0_DEVICE_VERSION_MAIN (0x02) /*!< [31:24] main version */
|
||||||
#define __STM32F0_DEVICE_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */
|
#define __STM32F0_DEVICE_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */
|
||||||
#define __STM32F0_DEVICE_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */
|
#define __STM32F0_DEVICE_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */
|
||||||
#define __STM32F0_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
#define __STM32F0_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||||
#define __STM32F0_DEVICE_VERSION ((__STM32F0_DEVICE_VERSION_MAIN << 24)\
|
#define __STM32F0_DEVICE_VERSION ((__STM32F0_DEVICE_VERSION_MAIN << 24)\
|
||||||
|(__STM32F0_DEVICE_VERSION_SUB1 << 16)\
|
|(__STM32F0_DEVICE_VERSION_SUB1 << 16)\
|
||||||
|(__STM32F0_DEVICE_VERSION_SUB2 << 8 )\
|
|(__STM32F0_DEVICE_VERSION_SUB2 << 8 )\
|
||||||
|(__STM32F0_DEVICE_VERSION_RC))
|
|(__STM32F0_DEVICE_VERSION_RC))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup Device_Included
|
/** @addtogroup Device_Included
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(STM32F030x6)
|
#if defined(STM32F030x6)
|
||||||
#include "stm32f030x6.h"
|
#include "stm32f030x6.h"
|
||||||
#elif defined(STM32F030x8)
|
#elif defined(STM32F030x8)
|
||||||
#include "stm32f030x8.h"
|
#include "stm32f030x8.h"
|
||||||
#elif defined(STM32F031x6)
|
#elif defined(STM32F031x6)
|
||||||
#include "stm32f031x6.h"
|
#include "stm32f031x6.h"
|
||||||
#elif defined(STM32F038xx)
|
#elif defined(STM32F038xx)
|
||||||
#include "stm32f038xx.h"
|
#include "stm32f038xx.h"
|
||||||
#elif defined(STM32F042x6)
|
#elif defined(STM32F042x6)
|
||||||
#include "stm32f042x6.h"
|
#include "stm32f042x6.h"
|
||||||
#elif defined(STM32F048xx)
|
#elif defined(STM32F048xx)
|
||||||
#include "stm32f048xx.h"
|
#include "stm32f048xx.h"
|
||||||
#elif defined(STM32F051x8)
|
#elif defined(STM32F051x8)
|
||||||
#include "stm32f051x8.h"
|
#include "stm32f051x8.h"
|
||||||
#elif defined(STM32F058xx)
|
#elif defined(STM32F058xx)
|
||||||
#include "stm32f058xx.h"
|
#include "stm32f058xx.h"
|
||||||
#elif defined(STM32F070x6)
|
#elif defined(STM32F070x6)
|
||||||
#include "stm32f070x6.h"
|
#include "stm32f070x6.h"
|
||||||
#elif defined(STM32F070xB)
|
#elif defined(STM32F070xB)
|
||||||
#include "stm32f070xb.h"
|
#include "stm32f070xb.h"
|
||||||
#elif defined(STM32F071xB)
|
#elif defined(STM32F071xB)
|
||||||
#include "stm32f071xb.h"
|
#include "stm32f071xb.h"
|
||||||
#elif defined(STM32F072xB)
|
#elif defined(STM32F072xB)
|
||||||
#include "stm32f072xb.h"
|
#include "stm32f072xb.h"
|
||||||
#elif defined(STM32F078xx)
|
#elif defined(STM32F078xx)
|
||||||
#include "stm32f078xx.h"
|
#include "stm32f078xx.h"
|
||||||
#elif defined(STM32F091xC)
|
#elif defined(STM32F091xC)
|
||||||
#include "stm32f091xc.h"
|
#include "stm32f091xc.h"
|
||||||
#elif defined(STM32F098xx)
|
#elif defined(STM32F098xx)
|
||||||
#include "stm32f098xx.h"
|
#include "stm32f098xx.h"
|
||||||
#elif defined(STM32F030xC)
|
#elif defined(STM32F030xC)
|
||||||
#include "stm32f030xc.h"
|
#include "stm32f030xc.h"
|
||||||
#else
|
#else
|
||||||
#error "Please select first the target STM32F0xx device used in your application (in stm32f0xx.h file)"
|
#error "Please select first the target STM32F0xx device used in your application (in stm32f0xx.h file)"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup Exported_types
|
/** @addtogroup Exported_types
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
RESET = 0,
|
RESET = 0,
|
||||||
SET = !RESET
|
SET = !RESET
|
||||||
} FlagStatus, ITStatus;
|
} FlagStatus, ITStatus;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DISABLE = 0,
|
DISABLE = 0,
|
||||||
ENABLE = !DISABLE
|
ENABLE = !DISABLE
|
||||||
} FunctionalState;
|
} FunctionalState;
|
||||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
ERROR = 0,
|
ERROR = 0,
|
||||||
SUCCESS = !ERROR
|
SUCCESS = !ERROR
|
||||||
} ErrorStatus;
|
} ErrorStatus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/** @addtogroup Exported_macros
|
/** @addtogroup Exported_macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||||
|
|
||||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||||
|
|
||||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||||
|
|
||||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||||
|
|
||||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||||
|
|
||||||
#define READ_REG(REG) ((REG))
|
#define READ_REG(REG) ((REG))
|
||||||
|
|
||||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined (USE_HAL_DRIVER)
|
#if defined (USE_HAL_DRIVER)
|
||||||
#include "stm32f0xx_hal.h"
|
#include "stm32f0xx_hal.h"
|
||||||
#endif /* USE_HAL_DRIVER */
|
#endif /* USE_HAL_DRIVER */
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
#endif /* __STM32F0xx_H */
|
#endif /* __STM32F0xx_H */
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
|
@ -1,121 +1,121 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file system_stm32f0xx.h
|
* @file system_stm32f0xx.h
|
||||||
* @author MCD Application Team
|
* @author MCD Application Team
|
||||||
* @brief CMSIS Cortex-M0 Device System Source File for STM32F0xx devices.
|
* @brief CMSIS Cortex-M0 Device System Source File for STM32F0xx devices.
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup CMSIS
|
/** @addtogroup CMSIS
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup stm32f0xx_system
|
/** @addtogroup stm32f0xx_system
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Define to prevent recursive inclusion
|
* @brief Define to prevent recursive inclusion
|
||||||
*/
|
*/
|
||||||
#ifndef __SYSTEM_STM32F0XX_H
|
#ifndef __SYSTEM_STM32F0XX_H
|
||||||
#define __SYSTEM_STM32F0XX_H
|
#define __SYSTEM_STM32F0XX_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Includes
|
/** @addtogroup STM32F0xx_System_Includes
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Exported_types
|
/** @addtogroup STM32F0xx_System_Exported_types
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/* This variable is updated in three ways:
|
/* This variable is updated in three ways:
|
||||||
1) by calling CMSIS function SystemCoreClockUpdate()
|
1) by calling CMSIS function SystemCoreClockUpdate()
|
||||||
3) by calling HAL API function HAL_RCC_GetHCLKFreq()
|
3) by calling HAL API function HAL_RCC_GetHCLKFreq()
|
||||||
3) by calling HAL API function HAL_RCC_ClockConfig()
|
3) by calling HAL API function HAL_RCC_ClockConfig()
|
||||||
Note: If you use this function to configure the system clock; then there
|
Note: If you use this function to configure the system clock; then there
|
||||||
is no need to call the 2 first functions listed above, since SystemCoreClock
|
is no need to call the 2 first functions listed above, since SystemCoreClock
|
||||||
variable is updated automatically.
|
variable is updated automatically.
|
||||||
*/
|
*/
|
||||||
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
|
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
|
||||||
extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */
|
extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */
|
||||||
extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */
|
extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Exported_Constants
|
/** @addtogroup STM32F0xx_System_Exported_Constants
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Exported_Macros
|
/** @addtogroup STM32F0xx_System_Exported_Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Exported_Functions
|
/** @addtogroup STM32F0xx_System_Exported_Functions
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void SystemInit(void);
|
extern void SystemInit(void);
|
||||||
extern void SystemCoreClockUpdate(void);
|
extern void SystemCoreClockUpdate(void);
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /*__SYSTEM_STM32F0XX_H */
|
#endif /*__SYSTEM_STM32F0XX_H */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
|
@ -1,333 +1,333 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file system_stm32f0xx.c
|
* @file system_stm32f0xx.c
|
||||||
* @author MCD Application Team
|
* @author MCD Application Team
|
||||||
* @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File.
|
* @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File.
|
||||||
*
|
*
|
||||||
* 1. This file provides two functions and one global variable to be called from
|
* 1. This file provides two functions and one global variable to be called from
|
||||||
* user application:
|
* user application:
|
||||||
* - SystemInit(): This function is called at startup just after reset and
|
* - SystemInit(): This function is called at startup just after reset and
|
||||||
* before branch to main program. This call is made inside
|
* before branch to main program. This call is made inside
|
||||||
* the "startup_stm32f0xx.s" file.
|
* the "startup_stm32f0xx.s" file.
|
||||||
*
|
*
|
||||||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
|
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
|
||||||
* by the user application to setup the SysTick
|
* by the user application to setup the SysTick
|
||||||
* timer or configure other parameters.
|
* timer or configure other parameters.
|
||||||
*
|
*
|
||||||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
|
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
|
||||||
* be called whenever the core clock is changed
|
* be called whenever the core clock is changed
|
||||||
* during program execution.
|
* during program execution.
|
||||||
*
|
*
|
||||||
* 2. After each device reset the HSI (8 MHz) is used as system clock source.
|
* 2. After each device reset the HSI (8 MHz) is used as system clock source.
|
||||||
* Then SystemInit() function is called, in "startup_stm32f0xx.s" file, to
|
* Then SystemInit() function is called, in "startup_stm32f0xx.s" file, to
|
||||||
* configure the system clock before to branch to main program.
|
* configure the system clock before to branch to main program.
|
||||||
*
|
*
|
||||||
* 3. This file configures the system clock as follows:
|
* 3. This file configures the system clock as follows:
|
||||||
*=============================================================================
|
*=============================================================================
|
||||||
* Supported STM32F0xx device
|
* Supported STM32F0xx device
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
* System Clock source | HSI
|
* System Clock source | HSI
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
* SYSCLK(Hz) | 8000000
|
* SYSCLK(Hz) | 8000000
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
* HCLK(Hz) | 8000000
|
* HCLK(Hz) | 8000000
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
* AHB Prescaler | 1
|
* AHB Prescaler | 1
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
* APB1 Prescaler | 1
|
* APB1 Prescaler | 1
|
||||||
*-----------------------------------------------------------------------------
|
*-----------------------------------------------------------------------------
|
||||||
*=============================================================================
|
*=============================================================================
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup CMSIS
|
/** @addtogroup CMSIS
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup stm32f0xx_system
|
/** @addtogroup stm32f0xx_system
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_Includes
|
/** @addtogroup STM32F0xx_System_Private_Includes
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stm32f0xx.h"
|
#include "stm32f0xx.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_TypesDefinitions
|
/** @addtogroup STM32F0xx_System_Private_TypesDefinitions
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_Defines
|
/** @addtogroup STM32F0xx_System_Private_Defines
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#if !defined (HSE_VALUE)
|
#if !defined (HSE_VALUE)
|
||||||
#define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz.
|
#define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz.
|
||||||
This value can be provided and adapted by the user application. */
|
This value can be provided and adapted by the user application. */
|
||||||
#endif /* HSE_VALUE */
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
#if !defined (HSI_VALUE)
|
#if !defined (HSI_VALUE)
|
||||||
#define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz.
|
#define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz.
|
||||||
This value can be provided and adapted by the user application. */
|
This value can be provided and adapted by the user application. */
|
||||||
#endif /* HSI_VALUE */
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
#if !defined (HSI48_VALUE)
|
#if !defined (HSI48_VALUE)
|
||||||
#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz.
|
#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz.
|
||||||
This value can be provided and adapted by the user application. */
|
This value can be provided and adapted by the user application. */
|
||||||
#endif /* HSI48_VALUE */
|
#endif /* HSI48_VALUE */
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_Macros
|
/** @addtogroup STM32F0xx_System_Private_Macros
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_Variables
|
/** @addtogroup STM32F0xx_System_Private_Variables
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/* This variable is updated in three ways:
|
/* This variable is updated in three ways:
|
||||||
1) by calling CMSIS function SystemCoreClockUpdate()
|
1) by calling CMSIS function SystemCoreClockUpdate()
|
||||||
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
|
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
|
||||||
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
|
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
|
||||||
Note: If you use this function to configure the system clock there is no need to
|
Note: If you use this function to configure the system clock there is no need to
|
||||||
call the 2 first functions listed above, since SystemCoreClock variable is
|
call the 2 first functions listed above, since SystemCoreClock variable is
|
||||||
updated automatically.
|
updated automatically.
|
||||||
*/
|
*/
|
||||||
uint32_t SystemCoreClock = 8000000;
|
uint32_t SystemCoreClock = 8000000;
|
||||||
|
|
||||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
|
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
|
||||||
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
|
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes
|
/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @addtogroup STM32F0xx_System_Private_Functions
|
/** @addtogroup STM32F0xx_System_Private_Functions
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Setup the microcontroller system.
|
* @brief Setup the microcontroller system.
|
||||||
* Initialize the default HSI clock source, vector table location and the PLL configuration is reset.
|
* Initialize the default HSI clock source, vector table location and the PLL configuration is reset.
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void SystemInit(void)
|
void SystemInit(void)
|
||||||
{
|
{
|
||||||
/* Reset the RCC clock configuration to the default reset state ------------*/
|
/* Reset the RCC clock configuration to the default reset state ------------*/
|
||||||
/* Set HSION bit */
|
/* Set HSION bit */
|
||||||
RCC->CR |= (uint32_t)0x00000001U;
|
RCC->CR |= (uint32_t)0x00000001U;
|
||||||
|
|
||||||
#if defined (STM32F051x8) || defined (STM32F058x8)
|
#if defined (STM32F051x8) || defined (STM32F058x8)
|
||||||
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
|
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
|
||||||
RCC->CFGR &= (uint32_t)0xF8FFB80CU;
|
RCC->CFGR &= (uint32_t)0xF8FFB80CU;
|
||||||
#else
|
#else
|
||||||
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE, MCOSEL[2:0], MCOPRE[2:0] and PLLNODIV bits */
|
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE, MCOSEL[2:0], MCOPRE[2:0] and PLLNODIV bits */
|
||||||
RCC->CFGR &= (uint32_t)0x08FFB80CU;
|
RCC->CFGR &= (uint32_t)0x08FFB80CU;
|
||||||
#endif /* STM32F051x8 or STM32F058x8 */
|
#endif /* STM32F051x8 or STM32F058x8 */
|
||||||
|
|
||||||
/* Reset HSEON, CSSON and PLLON bits */
|
/* Reset HSEON, CSSON and PLLON bits */
|
||||||
RCC->CR &= (uint32_t)0xFEF6FFFFU;
|
RCC->CR &= (uint32_t)0xFEF6FFFFU;
|
||||||
|
|
||||||
/* Reset HSEBYP bit */
|
/* Reset HSEBYP bit */
|
||||||
RCC->CR &= (uint32_t)0xFFFBFFFFU;
|
RCC->CR &= (uint32_t)0xFFFBFFFFU;
|
||||||
|
|
||||||
/* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
|
/* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
|
||||||
RCC->CFGR &= (uint32_t)0xFFC0FFFFU;
|
RCC->CFGR &= (uint32_t)0xFFC0FFFFU;
|
||||||
|
|
||||||
/* Reset PREDIV[3:0] bits */
|
/* Reset PREDIV[3:0] bits */
|
||||||
RCC->CFGR2 &= (uint32_t)0xFFFFFFF0U;
|
RCC->CFGR2 &= (uint32_t)0xFFFFFFF0U;
|
||||||
|
|
||||||
#if defined (STM32F072xB) || defined (STM32F078xx)
|
#if defined (STM32F072xB) || defined (STM32F078xx)
|
||||||
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
|
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFCFE2CU;
|
RCC->CFGR3 &= (uint32_t)0xFFFCFE2CU;
|
||||||
#elif defined (STM32F071xB)
|
#elif defined (STM32F071xB)
|
||||||
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFFCEACU;
|
RCC->CFGR3 &= (uint32_t)0xFFFFCEACU;
|
||||||
#elif defined (STM32F091xC) || defined (STM32F098xx)
|
#elif defined (STM32F091xC) || defined (STM32F098xx)
|
||||||
/* Reset USART3SW[1:0], USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
/* Reset USART3SW[1:0], USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFF0FEACU;
|
RCC->CFGR3 &= (uint32_t)0xFFF0FEACU;
|
||||||
#elif defined (STM32F030x6) || defined (STM32F030x8) || defined (STM32F031x6) || defined (STM32F038xx) || defined (STM32F030xC)
|
#elif defined (STM32F030x6) || defined (STM32F030x8) || defined (STM32F031x6) || defined (STM32F038xx) || defined (STM32F030xC)
|
||||||
/* Reset USART1SW[1:0], I2C1SW and ADCSW bits */
|
/* Reset USART1SW[1:0], I2C1SW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFFFEECU;
|
RCC->CFGR3 &= (uint32_t)0xFFFFFEECU;
|
||||||
#elif defined (STM32F051x8) || defined (STM32F058xx)
|
#elif defined (STM32F051x8) || defined (STM32F058xx)
|
||||||
/* Reset USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
/* Reset USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFFFEACU;
|
RCC->CFGR3 &= (uint32_t)0xFFFFFEACU;
|
||||||
#elif defined (STM32F042x6) || defined (STM32F048xx)
|
#elif defined (STM32F042x6) || defined (STM32F048xx)
|
||||||
/* Reset USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
|
/* Reset USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFFFE2CU;
|
RCC->CFGR3 &= (uint32_t)0xFFFFFE2CU;
|
||||||
#elif defined (STM32F070x6) || defined (STM32F070xB)
|
#elif defined (STM32F070x6) || defined (STM32F070xB)
|
||||||
/* Reset USART1SW[1:0], I2C1SW, USBSW and ADCSW bits */
|
/* Reset USART1SW[1:0], I2C1SW, USBSW and ADCSW bits */
|
||||||
RCC->CFGR3 &= (uint32_t)0xFFFFFE6CU;
|
RCC->CFGR3 &= (uint32_t)0xFFFFFE6CU;
|
||||||
/* Set default USB clock to PLLCLK, since there is no HSI48 */
|
/* Set default USB clock to PLLCLK, since there is no HSI48 */
|
||||||
RCC->CFGR3 |= (uint32_t)0x00000080U;
|
RCC->CFGR3 |= (uint32_t)0x00000080U;
|
||||||
#else
|
#else
|
||||||
#warning "No target selected"
|
#warning "No target selected"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Reset HSI14 bit */
|
/* Reset HSI14 bit */
|
||||||
RCC->CR2 &= (uint32_t)0xFFFFFFFEU;
|
RCC->CR2 &= (uint32_t)0xFFFFFFFEU;
|
||||||
|
|
||||||
/* Disable all interrupts */
|
/* Disable all interrupts */
|
||||||
RCC->CIR = 0x00000000U;
|
RCC->CIR = 0x00000000U;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Update SystemCoreClock variable according to Clock Register Values.
|
* @brief Update SystemCoreClock variable according to Clock Register Values.
|
||||||
* The SystemCoreClock variable contains the core clock (HCLK), it can
|
* The SystemCoreClock variable contains the core clock (HCLK), it can
|
||||||
* be used by the user application to setup the SysTick timer or configure
|
* be used by the user application to setup the SysTick timer or configure
|
||||||
* other parameters.
|
* other parameters.
|
||||||
*
|
*
|
||||||
* @note Each time the core clock (HCLK) changes, this function must be called
|
* @note Each time the core clock (HCLK) changes, this function must be called
|
||||||
* to update SystemCoreClock variable value. Otherwise, any configuration
|
* to update SystemCoreClock variable value. Otherwise, any configuration
|
||||||
* based on this variable will be incorrect.
|
* based on this variable will be incorrect.
|
||||||
*
|
*
|
||||||
* @note - The system frequency computed by this function is not the real
|
* @note - The system frequency computed by this function is not the real
|
||||||
* frequency in the chip. It is calculated based on the predefined
|
* frequency in the chip. It is calculated based on the predefined
|
||||||
* constant and the selected clock source:
|
* constant and the selected clock source:
|
||||||
*
|
*
|
||||||
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
|
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
|
||||||
*
|
*
|
||||||
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
|
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
|
||||||
*
|
*
|
||||||
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
|
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
|
||||||
* or HSI_VALUE(*) multiplied/divided by the PLL factors.
|
* or HSI_VALUE(*) multiplied/divided by the PLL factors.
|
||||||
*
|
*
|
||||||
* (*) HSI_VALUE is a constant defined in stm32f0xx_hal.h file (default value
|
* (*) HSI_VALUE is a constant defined in stm32f0xx_hal.h file (default value
|
||||||
* 8 MHz) but the real value may vary depending on the variations
|
* 8 MHz) but the real value may vary depending on the variations
|
||||||
* in voltage and temperature.
|
* in voltage and temperature.
|
||||||
*
|
*
|
||||||
* (**) HSE_VALUE is a constant defined in stm32f0xx_hal.h file (default value
|
* (**) HSE_VALUE is a constant defined in stm32f0xx_hal.h file (default value
|
||||||
* 8 MHz), user has to ensure that HSE_VALUE is same as the real
|
* 8 MHz), user has to ensure that HSE_VALUE is same as the real
|
||||||
* frequency of the crystal used. Otherwise, this function may
|
* frequency of the crystal used. Otherwise, this function may
|
||||||
* have wrong result.
|
* have wrong result.
|
||||||
*
|
*
|
||||||
* - The result of this function could be not correct when using fractional
|
* - The result of this function could be not correct when using fractional
|
||||||
* value for HSE crystal.
|
* value for HSE crystal.
|
||||||
*
|
*
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void SystemCoreClockUpdate (void)
|
void SystemCoreClockUpdate (void)
|
||||||
{
|
{
|
||||||
uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0;
|
uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0;
|
||||||
|
|
||||||
/* Get SYSCLK source -------------------------------------------------------*/
|
/* Get SYSCLK source -------------------------------------------------------*/
|
||||||
tmp = RCC->CFGR & RCC_CFGR_SWS;
|
tmp = RCC->CFGR & RCC_CFGR_SWS;
|
||||||
|
|
||||||
switch (tmp)
|
switch (tmp)
|
||||||
{
|
{
|
||||||
case RCC_CFGR_SWS_HSI: /* HSI used as system clock */
|
case RCC_CFGR_SWS_HSI: /* HSI used as system clock */
|
||||||
SystemCoreClock = HSI_VALUE;
|
SystemCoreClock = HSI_VALUE;
|
||||||
break;
|
break;
|
||||||
case RCC_CFGR_SWS_HSE: /* HSE used as system clock */
|
case RCC_CFGR_SWS_HSE: /* HSE used as system clock */
|
||||||
SystemCoreClock = HSE_VALUE;
|
SystemCoreClock = HSE_VALUE;
|
||||||
break;
|
break;
|
||||||
case RCC_CFGR_SWS_PLL: /* PLL used as system clock */
|
case RCC_CFGR_SWS_PLL: /* PLL used as system clock */
|
||||||
/* Get PLL clock source and multiplication factor ----------------------*/
|
/* Get PLL clock source and multiplication factor ----------------------*/
|
||||||
pllmull = RCC->CFGR & RCC_CFGR_PLLMUL;
|
pllmull = RCC->CFGR & RCC_CFGR_PLLMUL;
|
||||||
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
|
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
|
||||||
pllmull = ( pllmull >> 18) + 2;
|
pllmull = ( pllmull >> 18) + 2;
|
||||||
predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1;
|
predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1;
|
||||||
|
|
||||||
if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
|
if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
|
||||||
{
|
{
|
||||||
/* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */
|
/* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */
|
||||||
SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull;
|
SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull;
|
||||||
}
|
}
|
||||||
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx)
|
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx)
|
||||||
else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV)
|
else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV)
|
||||||
{
|
{
|
||||||
/* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */
|
/* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */
|
||||||
SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull;
|
SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull;
|
||||||
}
|
}
|
||||||
#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */
|
#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \
|
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \
|
||||||
|| defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \
|
|| defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \
|
||||||
|| defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC)
|
|| defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC)
|
||||||
/* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */
|
/* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */
|
||||||
SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull;
|
SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull;
|
||||||
#else
|
#else
|
||||||
/* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */
|
/* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */
|
||||||
SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
|
SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
|
||||||
#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 ||
|
#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 ||
|
||||||
STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB ||
|
STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB ||
|
||||||
STM32F091xC || STM32F098xx || STM32F030xC */
|
STM32F091xC || STM32F098xx || STM32F030xC */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: /* HSI used as system clock */
|
default: /* HSI used as system clock */
|
||||||
SystemCoreClock = HSI_VALUE;
|
SystemCoreClock = HSI_VALUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Compute HCLK clock frequency ----------------*/
|
/* Compute HCLK clock frequency ----------------*/
|
||||||
/* Get HCLK prescaler */
|
/* Get HCLK prescaler */
|
||||||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
|
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
|
||||||
/* HCLK clock frequency */
|
/* HCLK clock frequency */
|
||||||
SystemCoreClock >>= tmp;
|
SystemCoreClock >>= tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue