/* Keep D3/SRD in run mode */ MODIFY_REG (PWR->CPUCR, PWR_CPUCR_RUN_D3, D3State); }
/******************** Bit definition for PWR_CPUCR register *****************/ #define PWR_CPUCR_RUN_D3_Pos (11U) #define PWR_CPUCR_RUN_D3_Msk (0x1UL << PWR_CPUCR_RUN_D3_Pos) /*!< 0x00000800 */ #define PWR_CPUCR_RUN_D3 PWR_CPUCR_RUN_D3_Msk /*!< Keep system D3 domain in RUN mode regardless of the CPU sub-systems modes */
/******************** Bit definition for PWR_CPU2CR register ****************/ #define PWR_CPU2CR_RUN_D3_Pos (11U) #define PWR_CPU2CR_RUN_D3_Msk (0x1UL << PWR_CPU2CR_RUN_D3_Pos) /*!< 0x00000800 */ #define PWR_CPU2CR_RUN_D3 PWR_CPU2CR_RUN_D3_Msk /*!< Keep system D3 domain in RUN mode regardless of the CPU sub-systems modes */
7.6.1 Operating modes Several system operating modes are available to tune the system according to the performance required, i.e. when the CPU(s) do not need to execute code and are waiting for an external event. It is up to the user to select the operating mode that gives the best compromise between low power consumption, short startup time and available wakeup sources. The operating modes allow controlling the clock distribution to the different system blocks and powering them. The system operating mode is driven by CPU1 subsystem, CPU2 subsystem and system D3 autonomous wakeup. A CPU subsystem can include multiple domains depending on its peripheral allocation (see Section 9.5.11: Peripheral clock gating control). The following operating modes are available for the different system blocks (see Table 34): • CPU subsystem modes: – CRun CPU and CPU subsystem peripheral allocated via RCC PERxEN bits are clocked. – CSleep: The CPU clocks is stalled and the CPU subsystem allocated peripheral(s) clock operate according to RCC PERxLPEN. – CStop: CPU and CPU subsystem peripheral clocks are stalled. • D1 domain and D2 domain modes: – DRun The domain bus matrix is clocked: - The domain CPU subsystem(a) is in CRun or CSleep mode, or - the other domain CPU subsystem(a) having an allocated peripheral in the domain is in CRun or CSleep mode. – DStop The domain bus matrix clock is stalled: - The domain CPU subsystem is in CStop mode and - The other domain CPU subsystem has no peripheral allocated in the domain. or the other domain CPU subsystem having an allocated peripheral in the domain is also in CStop mode and - At least one PDDS_Dn(b) bit for the domain select DStop. – DStandby The domain is powered down: - The domain CPU subsystem is in CStop mode and - The other domain CPU subsystem has no peripheral allocated in the domain or the other domain CPU subsystem having an allocated peripheral in the domain is also in CStop mode and - All PDDS_Dn(b) bits for the domain select DStandby mode. • System /D3 domain modes – Run/Run* The system clock and D3 domain bus matrix clock are running: - A CPU subsystem is in CRun or CSleep mode or - A wakeup signal is active. (i.e. System D3 autonomous mode) The Run* mode is entered after a POR reset and a wakeup from Standby. In Run* mode, the performance is limited and the system supply configuration shall be programmed in PWR control register 3 (PWR_CR3). The system enters Run mode only when the ACTVOSRDY bit in PWR control status register 1 (PWR_CSR1) is set to 1. – Stop The system clock and D3 domain bus matrix clock is stalled: - both CPU subsystems are in CStop mode. and - all wakeup signals are inactive. and - At least one PDDS_Dn(b) bit for any domain select Stop mode. – Standby The system is powered down: - both CPU subsystems are in CStop mode and - all wakeup signals are inactive. and - All PDDS_Dn(b) bits for all domains select Standby mode. In Run mode, power consumption can be reduced by one of the following means: •Lowering the system performance by slowing down the system clocks and reducing the VCORE supply level through VOS voltage scaling bits. •Gating the clocks to the APBx and AHBx peripherals when they are not used, through PERxEN bits.
a. The domain CPU subsystem, for example CPU1 subsystem for D1 domain. a. The other domain CPU subsystem, for example CPU1 subsystem for D2 domain.
9 Reset and Clock Control (RCC) The RCC block manages the clock and reset generation for the whole microcontroller, which embeds two CPUs: an Arm® Cortex®-M7 and an Arm® Cortex®-M4, called CPU1 and CPU2, respectively. The RCC block is located in the D3 domain (refer to Section 7: Power control (PWR) for a detailed description). The operating modes this section refers to are defined in Section 7.6.1: Operating modes of the PWR block.
This application note describes how to manage the memory protection unit (MPU) in the STM32 products The MPU is an optional component for the memory protection. Including the MPU in the STM32 microcontrollers (MCUs) makes them more robust and reliable. The MPU must be programmed and enabled before using it. If the MPU is not enabled, there is no change in the memory system behavior. This application note concerns all the STM32 products listed in Table 1 that include the Cortex®-M0+/M3/M4 and M7 design that
supports the MPU. For more details about the MPU, refer to the following documents available on http://www.st.com • Programming manual STM32F7 series and STM32H7 series Cortex®-M7 processor (PM0253) • Programming manual STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 (PM0056) • Programming manual STM32 Cortex®-M0+ MCUs programming manual (PM0223) • Programming manual STM32 Cortex®-M4 MCUs and MPUs (PM0214) • Programming manual STM32 Cortex®-M33 MCUs (PM0264) Table 1. Applicable products
Type Product series Microcontrollers • STM32C0 series • STM32F1 series, STM32F2 series, STM32F3 series, STM32F4 series, STM32F7 series • STM32G0 series, STM32G4 series • STM32H5 series, STM32H7 series • STM32L0 series, STM32L1 series, STM32L4 series, STM32L4+ series, STM32L5 series • STM32U0 series, STM32U5 series • STM32WB series, STM32WB0 series
3.2 Memory protection unit (MPU) The devices feature two memory protection units. Each MPU manages the CPU access rights and the attributes of the system resources. It has to be programmed and enabled before use. Its main purposes are to prevent an untrusted user program to accidentally corrupt data used by the OS and/or by a privileged task, but also to protect data processes or read-protect memory regions. The MPU defines access rules for privileged accesses and user program accesses. It allows defining up to 16 protected regions that can in turn be divided into up to 8 independent subregions, where region address, size, and attributes can be configured. The protection area ranges from 32 bytes to 4 Gbytes of addressable memory. When an unauthorized access is performed, a memory management exception is generated.