2. Memory and bus architecture

2.1 System architecture

The main system consists of:

These are interconnected using a multilayer AHB bus architecture as shown in Figure 1 .

Figure 1. System architecture

Figure 1. System architecture diagram showing the interconnection of the Cortex-M0+ core, DMA, SRAM, Flash memory, and various peripherals via a bus matrix.

The diagram illustrates the system architecture. On the left, the 'Arm ® Cortex ® -M0+ core' is connected to a 'Bus matrix' via a 'System bus'. Above the core, 'GPIO Ports A,B,C,D,E,F' are connected via an 'IOPORT'. Below the core, 'DMA1/2 DMAMUX channels 1 to 12' are connected to the 'Bus matrix' via a 'DMA bus'. 'DMA requests' are shown from the DMA to the core. The 'Bus matrix' is connected to 'Flash memory interface' and 'SRAM' via the 'System bus'. The 'Flash memory interface' is connected to 'Flash memory'. The 'Bus matrix' is also connected to an 'AHB-to-APB bridge' via an 'AHB' bus. The 'AHB-to-APB bridge' is connected to a large block of 'APB' peripherals via an 'APB' bus. The 'AHB' bus also connects to 'RCC', 'CRC', and 'EXTI'. The 'APB' peripherals include: SYSCFG, ADC, TIM1, TIM2, TIM3, TIM4, TIM6, TIM7, TIM14 to TIM17, IWDG, WWDG, RTC, PWR, I2C1, I2C2, I2C3, USART1 to USART6, SPI1/I2S1, SPI2/I2S2, SPI3, USB, and DBGMCU.

Figure 1. System architecture diagram showing the interconnection of the Cortex-M0+ core, DMA, SRAM, Flash memory, and various peripherals via a bus matrix.

System bus (S-bus)

This bus connects the system bus of the Cortex ® -M0+ core (peripheral bus) to a bus matrix that manages the arbitration between the core and the DMA.

DMA bus

This bus connects the AHB master interface of the DMA to the bus matrix that manages the access of CPU and DMA to SRAM, Flash memory and AHB/APB peripherals.

Bus matrix

The bus matrix manages the access arbitration between the core system bus and the DMA master bus. The arbitration uses a Round Robin algorithm. The bus matrix is composed of masters (CPU, DMA) and slaves (Flash memory interface, SRAM and AHB-to-APB bridge).

AHB peripherals are connected on system bus through the bus matrix to allow DMA access.

AHB-to-APB bridge (APB)

The AHB-to-APB bridge provides full synchronous connections between the AHB and the APB bus.

Refer to Section 2.2: Memory organization for the address mapping of the peripherals connected to this bridge.

After each device reset, all peripheral clocks are disabled (except for the SRAM and Flash memory). Before using a peripheral its clock in the RCC_AHBENR, RCC_APBENRx or RCC_IOPENR register must first be enabled.

Note: When a 16- or 8-bit access is performed on an APB register, the access is transformed into a 32-bit access: the bridge duplicates the 16- or 8-bit data to feed the 32-bit vector.

2.2 Memory organization

2.2.1 Introduction

Program memory, data memory, registers and I/O ports are organized within the same linear 4-Gbyte address space.

The bytes are coded in memory in Little Endian format. The lowest numbered byte in a word is considered the word's least significant byte and the highest numbered byte the most significant.

The addressable memory space is divided into eight main blocks, of 512 Mbytes each.

2.2.2 Memory map and register boundary addresses

Figure 2. Memory map

Memory map diagram showing addressable space, used space, and reserved space for various memory types and peripherals.

The diagram illustrates the memory map for an STM32 microcontroller, showing the distribution of addressable space between used and reserved areas. The addressable space is divided into blocks 0 through 7, with specific memory types and peripherals assigned to each block. The right side of the diagram shows the corresponding register boundary addresses for each memory type.

Legend:

Memory Map Details:

BlockAddress RangeMemory Type / PeripheralRegister Boundary Address
block 70xFFFF FFFF to 0xE000 0000Arm Cortex M0+ internal peripheralsIOPORT: 0x5000 1FFF to 0x5000 0000
block 60xE000 0000 to 0xC000 0000ReservedAHB: 0x4002 63FF to 0x4002 0000
block 50xC000 0000 to 0xA000 0000ReservedAPB: 0x4001 5BFF to 0x4001 0000
block 40xA000 0000 to 0x8000 0000ReservedAPB: 0x4000 A7FF to 0x4000 0000
block 30x8000 0000 to 0x6000 0000Reserved
block 20x6000 0000 to 0x4000 0000ReservedOption bytes: 0x1FFF 787F to 0x1FFF 7800
Engineering bytes: 0x1FFF 7500 to 0x1FFF 73FF
OTP: 0x1FFF 7000 to 0x1FFF 0000
block 10x4000 0000 to 0x2000 0000Peripherals, RAMSystem memory: 0x1FFF 0000 to (2)
block 00x2000 0000 to 0x0000 0000CodeMain Flash memory: 0x0800 0000 to (1)
Main Flash memory / System memory / RAM (3) : 0x0000 0000 to 0x0000 0000
Memory map diagram showing addressable space, used space, and reserved space for various memory types and peripherals.

1. STM32G0B0xx: 0x0007 FFFF; STM32G070xx: 0x0001 FFFF; STM32G050xx, STM32G030xx: 0x0000 FFFF.

2. STM32G0B0xx: 0x0807 FFFF; STM32G070xx: 0x0801 FFFF; STM32G050xx, STM32G030xx: 0x0800 FFFF.

3. Depends on boot configuration

All the memory map areas that are not allocated to on-chip memories and peripherals are considered as reserved. For the detailed mapping of available memory and register areas, refer to the following tables.

Table 2. STM32G0B0xx memory boundary addresses
TypeBoundary addressSizeMemory AreaRegister description
SRAM0x2002 4000 - 0x3FFF FFFF~512 MBReserved-
0x2000 0000 - 0x2002 3FFF144 KBSRAMSection 2.3 on page 49
Code0x1FFF 7880- 0x1FFF FFFF~34 KBReserved-
0x1FFF 7800 - 0x1FFF 787F128 BOption bytesSection 3.4 on page 63
0x1FFF 7500 - 0x1FFF 77FF768 BEngineering bytes-
0x1FFF 7400- 0x1FFF 74FF256 BReserved-
0x1FFF 7000 - 0x1FFF 73FF1 KBOTP-
0x1FFF 0000 - 0x1FFF 6FFF28 KBSystem memory-
0x0808 0000 - 0x1FFF D7FF~384 MBReserved-
0x0800 0000 - 0x0807 FFFF512 KBMain Flash memorySection 3.3.1 on page 53
0x0008 0000 - 0x07FF FFFF~7.5 MBReserved-
0x0000 0000 - 0x0007 FFFF512 KBMain Flash memory, system memory or SRAM depending on BOOT configuration-
Table 3. STM32G070xx memory boundary addresses
TypeBoundary addressSizeMemory AreaRegister description
SRAM0x2000 9000 - 0x3FFF FFFF~512 MBReserved-
0x2000 0000 - 0x2000 8FFF36 KBSRAMSection 2.3 on page 49
Code0x1FFF 7880- 0x1FFF FFFF~34 KBReserved-
0x1FFF 7800 - 0x1FFF 787F128 BOption bytesSection 3.4 on page 63
0x1FFF 7500 - 0x1FFF 77FF768 BEngineering bytes-
0x1FFF 7400- 0x1FFF 74FF256 BReserved-
0x1FFF 7000 - 0x1FFF 73FF1 KBOTP-
0x1FFF 0000 - 0x1FFF 6FFF28 KBSystem memory-
0x0802 0000 - 0x1FFF D7FF~384 MBReserved-
0x0800 0000 - 0x0801 FFFF128 KBMain Flash memorySection 3.3.1 on page 53
0x0002 0000 - 0x07FF FFFF~8 MBReserved-
0x0000 0000 - 0x0001 FFFF128 KBMain Flash memory, system memory or SRAM depending on BOOT configuration-
Table 4. STM32G030xx and STM32G050xx memory boundary addresses
TypeBoundary addressSizeMemory AreaRegister description
SRAM0x2000 2000 - 0x3FFF FFFF~512 MBReserved-
0x2000 0000 - 0x2000 1FFF8 KBSRAMSection 2.3 on page 49
Code0x1FFF 7880- 0x1FFF FFFF~34 KBReserved-
0x1FFF 7800 - 0x1FFF 787F128 BOption bytesSection 3.4 on page 63
0x1FFF 7500 - 0x1FFF 77FF768 BEngineering bytes-
0x1FFF 7400- 0x1FFF 74FF256 BReserved-
0x1FFF 7000 - 0x1FFF 73FF1 KBOTP-
0x1FFF 2000 - 0x1FFF 6FFF~20 KBReserved-
0x1FFF 0000 - 0x1FFF 1FFF8 KBSystem memory-
0x0801 0000 - 0x1FFF D7FF~384 MBReserved-
0x0800 0000 - 0x0800 FFFF64 KBMain Flash memorySection 3.3.1 on page 53
0x0001 0000 - 0x07FF FFFF~8 MBReserved-
0x0000 0000 - 0x0000 FFFF64 KBMain Flash memory, system memory or SRAM depending on BOOT configuration-

The following table gives the boundary addresses of the peripherals.

Table 5. STM32G0x0 peripheral register boundary addresses
BusBoundary addressSizePeripheralPeripheral register map
-0xE000 0000 - 0xE00F FFFF1MBCortex ® -M0+ internal peripherals-
IOPORT0x5000 1800 - 0x5FFF 17FF~256 MBReserved-
0x5000 1400 - 0x5000 17FF1 KBGPIOFSection 6.4.12 on page 188
0x5000 1000 - 0x5000 13FF1 KBGPIOESection 6.4.12 on page 188
0x5000 0C00 - 0x5000 0FFF1 KBGIOPDSection 6.4.12 on page 188
0x5000 0800 - 0x5000 0BFF1 KBGPIOCSection 6.4.12 on page 188
0x5000 0400 - 0x5000 07FF1 KBGPIOBSection 6.4.12 on page 188
0x5000 0000 - 0x5000 03FF1 KBGPIOASection 6.4.12 on page 188

Table 5. STM32G0x0 peripheral register boundary addresses (continued)

BusBoundary addressSizePeripheralPeripheral register map
AHB0x4002 3400 - 0x4FFF FFFF~256 MBReserved-
0x4002 3000 - 0x4002 33FF1 KBCRCSection 13.4.6 on page 273
0x4002 2400 - 0x4002 2FFF3 KBReserved-
0x4002 2000 - 0x4002 23FF1 KBFLASHSection 3.7.13 on page 85
0x4002 1C00 - 0x4002 1FFF3 KBReserved-
0x4002 1800 - 0x4002 1BFF1 KBEXTISection 12.5.9 on page 265
0x4002 1400 - 0x4002 17FF1 KBReserved-
0x4002 1000 - 0x4002 13FF1 KBRCCSection 5.4.24 on page 169
0x4002 0C00 - 0x4002 0FFF1 KBReserved-
0x4002 0800 - 0x4002 0BFF2 KBDMAMUXSection 10.6.7 on page 248
0x4002 0400 - 0x4002 07FF1 KBDMA2Section 9.6.7 on page 231
0x4002 0000 - 0x4002 03FF1 KBDMA1Section 9.6.7 on page 231
APB0x4001 5C00 - 0x4001 FFFF32 KBReserved-
0x4001 5800 - 0x4001 5BFF1 KBDBGSection 29.10.5 on page 978
0x4001 4C00 - 0x4001 57FF3 KBReserved-
0x4001 4800 - 0x4001 4BFF1 KBTIM17Section 19.6.21 on page 632
0x4001 4400 - 0x4001 47FF1 KBTIM16Section 19.6.21 on page 632
0x4001 4000 - 0x4001 43FF1 KBTIM15Section 19.6.21 on page 632
0x4001 3C00 - 0x4001 3FFF1 KBUSART6Section 26.8.15 on page 861
0x4001 3800 - 0x4001 3BFF1 KBUSART1Section 26.8.15 on page 861
0x4001 3400 - 0x4001 37FF1 KBReserved-
APB0x4001 3000 - 0x4001 33FF1 KBSPI1/I2S1Section 27.9.10 on page 919
0x4001 2C00 - 0x4001 2FFF1 KBTIM1Section 15.4 on page 396
0x4001 2800 - 0x4001 2BFF1 KBReserved-
0x4001 2400 - 0x4001 27FF1 KBADCSection 14.13 on page 333
0x4001 0200 - 0x4001 23FF8 KBReserved-
0x4001 0080 - 0x4001 01FF1 KBSYSCFG(ITLINE) (1)Section 7.1.31 on page 205
0x4001 0030 - 0x4001 007FReserved-
0x4001 0000 - 0x4001 002FSYSCFGSection 7.1.31 on page 205
0x4000 B400 - 0x4000 FFFF19 KBReserved-
0x4000 B000 - 0x4000 B3FF1 KBTAMP (+ BKP registers)Section 24.6.9 on page 703
0x4000 8C00 - 0x4000 AFFF9 KBReserved-
0x4000 8800 - 0x4000 8BFF1 KBI2C3Section 25.7.12 on page 773
0x4000 7400 - 0x4000 87FF5 KBReserved-
0x4000 7000 - 0x4000 73FF1 KBPWRSection 4.4.20 on page 117
Table 5. STM32G0x0 peripheral register boundary addresses (continued)
BusBoundary addressSizePeripheralPeripheral register map
APB0x4000 6000 - 0x4000 6FFF4 KBReserved-
0x4000 5C00 - 0x4000 5FFF1 KBUSBSection 28.6.3 on page 964
0x4000 5800 - 0x4000 5BFF1 KBI2C2Section 25.7.12 on page 773
0x4000 5400 - 0x4000 57FF1 KBI2C1Section 25.7.12 on page 773
0x4000 5000 - 0x4000 53FF1 KBUSART5Section 26.8.15 on page 861
0x4000 4C00 - 0x4000 4FFF1 KBUSART4Section 26.8.15 on page 861
0x4000 4800 - 0x4000 4BFF1 KBUSART3Section 26.8.15 on page 861
0x4000 4400 - 0x4000 47FF1 KBUSART2Section 26.8.15 on page 861
0x4000 4000 - 0x4000 43FF1 KBReserved-
0x4000 3C00 - 0x4000 3FFF1 KBSPI3Section 27.9.10 on page 919
0x4000 3800 - 0x4000 3BFF1 KBSPI2Section 27.9.10 on page 919
0x4000 3400 - 0x4000 37FF1 KBReserved-
0x4000 3000 - 0x4000 33FF1 KBIWDGSection 21.4.6 on page 643
0x4000 2C00 - 0x4000 2FFF1 KBWWDGSection 22.5.4 on page 649
0x4000 2800 - 0x4000 2BFF1 KBRTCSection 23.6.21 on page 687
0x4000 2400 - 0x4000 27FF1 KBReserved-
0x4000 2000 - 0x4000 23FF1 KBTIM14Section 18.4.13 on page 545
0x4000 1800 - 0x4000 1FFF2 KBReserved-
0x4000 1400 - 0x4000 17FF1 KBTIM7Section 17.4.9 on page 520
0x4000 1000 - 0x4000 13FF1 KBTIM6Section 17.4.9 on page 520
0x4000 0C00 - 0x4000 0FFF1 KBReserved-
0x4000 0800 - 0x4000 0BFF1 KBTIM4Section 16.4.26 on page 505
0x4000 0400 - 0x4000 07FF1 KBTIM3Section 16.4.26 on page 505
0x4000 0000 - 0x4000 03FF1 KBReserved-

1. SYSCFG (ITLINE) registers use 0x4001 0000 as reference peripheral base address.

2.3 Embedded SRAM

The following table summarizes the SRAM resources on the devices, with parity check enabled and disabled.

Table 6. SRAM size
DeviceSRAM with parity enabled (Kbyte)SRAM with parity disabled (Kbyte)
STM32G0B0xx128144
STM32G070xx3236
Table 6. SRAM size (continued)
DeviceSRAM with parity enabled (Kbyte)SRAM with parity disabled (Kbyte)
STM32G050xx1618
STM32G030xx88

The SRAM can be accessed by bytes, half-words (16 bits) or full words (32 bits), at maximum system clock frequency without wait state and thus by both CPU and DMA.

Parity check

The user can enable the parity check using the option bit RAM_PARITY_CHECK in the user option byte (refer to Section 3.4: FLASH option bytes ).

The data bus width is 36 bits because 4 bits are available for parity check (1 bit per byte) in order to increase memory robustness, as required for instance by Class B or SIL norms.

The parity bits are computed and stored when writing into the SRAM. Then, they are automatically checked when reading. If one bit fails, an NMI is generated. The same error can also be linked to the BRK_IN Break input of TIM1/15/16/17, with the SRAM_PARITY_LOCK control bit in the SYSCFG configuration register 2 (SYSCFG_CFGR2) . The SRAM Parity Error flag (SRAM_PEF) is available in the SYSCFG configuration register 2 (SYSCFG_CFGR2) .

Note: When enabling the SRAM parity check, it is advised to initialize by software the whole SRAM at the beginning of the code, to avoid getting parity errors when reading non-initialized locations.

2.4 Flash memory overview

The Flash memory is composed of two distinct physical areas:

The Flash interface implements instruction access and data access based on the AHB protocol. It implements the prefetch buffer that speeds up CPU code execution. It also implements the logic necessary to carry out the Flash memory operations (Program/Erase) controlled through the Flash registers.

2.5 Boot configuration

In the STM32G0x0, three different boot modes can be selected through the BOOT0 pin and boot configuration bits nBOOT1, BOOT_SEL and nBOOT0 in the User option byte, as shown in the following table.

Table 7. Boot modes

Boot mode configurationSelected boot area
nBOOT1 bitBOOT0 pinnBOOT_SEL bitnBOOT0 bit
x00xMain Flash memory
110xSystem memory
010xEmbedded SRAM
xx11Main Flash memory
1x10System memory
0x10Embedded SRAM

The boot mode configuration is latched on the 4th rising edge of SYSCLK after a reset. It is up to the user to set boot mode configuration related to the required boot mode.

The boot mode configuration is also re-sampled when exiting from Standby mode. Consequently they must be kept in the required Boot mode configuration in Standby mode. After this startup delay has elapsed, the CPU fetches the top-of-stack value from address 0x0000 0000, then starts code execution from the boot memory at 0x0000 0004.

Depending on the selected boot mode, main Flash memory, system memory or SRAM is accessible as follows:

Empty check

Internal empty check flag (the EMPTY bit of the FLASH access control register (FLASH_ACR) ) is implemented to allow easy programming of virgin devices by the boot loader. This flag is used when BOOT0 pin is defining Main Flash memory as the target boot area. When the flag is set, the device is considered as empty and System memory (boot loader) is selected instead of the Main Flash as a boot area to allow user to program the Flash memory.

This flag is updated only during Option bytes loading: it is set when the content of the address 0x0800 0000 is read as 0xFFFF FFFF, otherwise it is cleared. It means a power reset or setting of OBL_LAUNCH bit in FLASH_CR register is needed to clear this flag after programming of a virgin device to execute user code after System reset. The EMPTY bit can also directly be written by software.

Note: If the device is programmed for a first time but the Option bytes are not reloaded, the device still selects System memory as a boot area after a System reset.

Physical remap

Once the boot mode is selected, the application software can modify the memory accessible in the code area. This modification is performed by programming the MEM_MODE bits in the SYSCFG configuration register 1 (SYSCFG_CFGR1) .

Embedded boot loader

The embedded boot loader is located in the System memory, programmed by ST during production. It is used to reprogram the Flash memory using one of the following serial interfaces:

For further details, refer to the device data sheets and AN2606.