// Main Flash memory // Upper size: // STM32G0B1xx and STM32G0C1xx: 0x0807 FFFF; STM32G071xx and STM32G081xx: 0x0801 FFFF; STM32G051xx and // STM32G061xx, STM32G031xx and STM32G041xx: 0x0800 FFFF. flash: Memory.MappedMemory @ sysbus 0x08000000 size: 0x20000 ram: Memory.MappedMemory @ sysbus 0x20000000 size: 0xC000 nvic: IRQControllers.NVIC @ sysbus 0xE000E000 priorityMask: 0xF0 systickFrequency: 72000000 IRQ -> cpu@0 // This model's registers are not compatible with the EXTI in this MCU, // it is currently here to support direct interrupts exti: IRQControllers.STM32F4_EXTI @ sysbus 0x40021800 numberOfOutputLines: 34 firstDirectLine: 19 [0, 1] -> nvicInput5@[0, 1] [2, 3] -> nvicInput6@[0, 1] [4-15] -> nvicInput7@[0-11] [23] -> nvic@[23] [32, 33] -> nvicInput8@[0, 1] [17, 18] -> nvicInput12@[0, 1] nvicInput8: Miscellaneous.CombinedInput @ none numberOfInputs: 2 -> nvic@8 nvicInput10: Miscellaneous.CombinedInput @ none numberOfInputs: 2 -> nvic@10 nvicInput11: Miscellaneous.CombinedInput @ none numberOfInputs: 9 -> nvic@11 nvicInput12: Miscellaneous.CombinedInput @ none numberOfInputs: 2 -> nvic@12 nvicInput5: Miscellaneous.CombinedInput @ none numberOfInputs: 2 -> nvic@5 nvicInput6: Miscellaneous.CombinedInput @ none numberOfInputs: 2 -> nvic@6 nvicInput7: Miscellaneous.CombinedInput @ none numberOfInputs: 12 -> nvic@7 nvicInput29: Miscellaneous.CombinedInput @ none numberOfInputs: 4 -> nvic@29 cpu: CPU.CortexM @ sysbus cpuType: "cortex-m0" nvic: nvic usart1: UART.STM32F7_USART @ sysbus 0x40013800 frequency: 200000000 IRQ -> nvic@27 usart2: UART.STM32F7_USART @ sysbus 0x40004400 frequency: 200000000 IRQ -> nvic@28 usart3: UART.STM32F7_USART @ sysbus 0x40004800 frequency: 200000000 IRQ -> nvicInput29@0 usart4: UART.STM32F7_USART @ sysbus 0x40004C00 frequency: 200000000 IRQ -> nvicInput29@1 usart5: UART.STM32F7_USART @ sysbus 0x40005000 frequency: 200000000 IRQ -> nvicInput29@2 usart6: UART.STM32F7_USART @ sysbus 0x40013C00 frequency: 200000000 IRQ -> nvicInput29@3 gpioPortA: GPIOPort.STM32_GPIOPort @ sysbus <0x50000000, +0x400> modeResetValue: 0xEBFFFFFF pullUpPullDownResetValue: 0x24000000 numberOfAFs: 8 invertedAFPins: [[7, 2]] [0-15] -> exti@[0-15] gpioPortB: GPIOPort.STM32_GPIOPort @ sysbus <0x50000400, +0x400> modeResetValue: 0xFFFFFFFF pullUpPullDownResetValue: 0x00000000 numberOfAFs: 8 invertedAFPins: [[0, 2], [1, 2], [6, 2], [7, 2], [13, 2], [14, 2], [15, 2]] [0-15] -> exti@[0-15] gpioPortC: GPIOPort.STM32_GPIOPort @ sysbus <0x50000800, +0x400> modeResetValue: 0xFFFFFFFF pullUpPullDownResetValue: 0x00000000 numberOfAFs: 8 [0-15] -> exti@[0-15] gpioPortD: GPIOPort.STM32_GPIOPort @ sysbus <0x50000C00, +0x400> modeResetValue: 0xFFFFFFFF pullUpPullDownResetValue: 0x00000000 numberOfAFs: 8 invertedAFPins: [[2, 2], [3, 2]] [0-15] -> exti@[0-15] gpioPortE: GPIOPort.STM32_GPIOPort @ sysbus <0x50001000, +0x400> modeResetValue:0xFFFFFFFF pullUpPullDownResetValue: 0x00000000 numberOfAFs: 8 [0-15] -> exti@[0-15] gpioPortF: GPIOPort.STM32_GPIOPort @ sysbus <0x50001400, +0x400> modeResetValue: 0xFFFFFFFF pullUpPullDownResetValue: 0x00000000 numberOfAFs: 8 [0-15] -> exti@[0-15] i2c1: I2C.STM32F7_I2C @ sysbus 0x40005400 EventInterrupt -> exti@23 i2c2: I2C.STM32F7_I2C @ sysbus 0x40005800 EventInterrupt -> exti@22 spi1: SPI.STM32SPI @ sysbus 0x40013000 IRQ -> nvic@25 spi2: SPI.STM32SPI @ sysbus 0x40003800 IRQ -> nvic@26 spi3: SPI.STM32SPI @ sysbus 0x40003C00 IRQ -> nvic@26 timer1: Timers.STM32_Timer @ sysbus 0x40012C00 frequency: 10000000 initialLimit: 0xFFFF [BreakInterrupt, UpdateInterrupt, TriggerInterrupt, CommutationInterrupt] -> nvic@[13, 13, 13, 13] CaptureCompareInterrupt -> nvic@14 timer2: Timers.STM32_Timer @ sysbus 0x40000000 frequency: 10000000 initialLimit: 0xFFFFFFFF -> nvic@15 timer3: Timers.STM32_Timer @ sysbus 0x40000400 frequency: 10000000 initialLimit: 0xFFFF -> nvic@16 timer4: Timers.STM32_Timer @ sysbus 0x40000800 frequency: 10000000 initialLimit: 0xFFFF -> nvic@16 timer6: Timers.STM32_Timer @ sysbus 0x40001000 frequency: 10000000 initialLimit: 0xFFFF -> nvic@17 timer7: Timers.STM32_Timer @ sysbus 0x40001400 frequency: 10000000 initialLimit: 0xFFFF -> nvic@18 timer14: Timers.STM32_Timer @ sysbus 0x40002000 frequency: 10000000 initialLimit: 0xFFFF -> nvic@19 timer15: Timers.STM32_Timer @ sysbus 0x40014000 frequency: 10000000 initialLimit: 0xFFFF -> nvic@20 timer16: Timers.STM32_Timer @ sysbus 0x40014400 frequency: 10000000 initialLimit: 0xFFFF -> nvic@21 timer17: Timers.STM32_Timer @ sysbus 0x40014800 frequency: 10000000 initialLimit: 0xFFFF -> nvic@22 fdcan1: CAN.STMCAN @ sysbus <0x40006400, +0x400> fdcan2: CAN.STMCAN @ sysbus <0x40006800, +0x400> rtc: Timers.STM32F4_RTC @ sysbus 0x40002800 AlarmIRQ -> exti@19 rcc: Python.PythonPeripheral @ sysbus 0x40021000 size: 0x400 initable: true script: ''' if request.IsInit: lastVal = 0 data = {'hsion': 1, 'pllon': 0, 'sw': 0, 'lsion': 0} self.NoisyLog("%s on FLIPFLOP at offset 0x%x, value 0x%x, length %d, %s" % (str(request.Type), request.Offset, request.Value, request.Length, str(data))) if request.IsWrite: if request.Offset == 0x0: # HSION [doc = "Bit 8 - HSI16 clock enable"] data['hsion'] = (request.Value >> 8) & 0x1 # PLLON [doc = "Bit 24 - PLL enable"] data['pllon'] = (request.Value >> 24) & 0x1 elif request.Offset == 0x8: # SW_W [doc = "Bits 0:2 - System clock switch"] data['sw'] = request.Value & 0x7 elif request.Offset == 0x60: data['lsion'] = request.Value & 0x1 elif request.IsRead: lastVal = 1 - lastVal if request.Offset == 0x0: # request.Value = lastVal * 0x83 # RCC_CR [doc = "0x00 - Clock control register"] # HSION_RW [doc = "Bit 8 - HSI16 clock enable flag"] # HSIRDY_R [doc = "Bit 10 - HSI16 clock ready flag"] # HSIRDY == HISON for this model # PLLRDY [doc = "Bit 25 - PLL clock ready flag"] request.Value = (data['hsion'] << 8) | (data['hsion'] << 10) | (data['pllon'] << 25) elif request.Offset == 0x4: request.Value = lastVal * 0xFFFFFFF8 elif request.Offset == 0x24: request.Value = 0x0 elif request.Offset == 0x60: request.Value = (data['lsion'] << 1) else: # RCC_CFGR [doc = "0x08 - Clock configuration register"] # SWS_R [doc = "Bits 3:5 - System clock switch status"] # request.Value = lastVal * 0xFFFFFFFF request.Value = data['sw'] << 3 self.NoisyLog(" 0x%x (%s)" % (request.Value, str(data))) ''' dma1: DMA.STM32G0DMA @ sysbus 0x40020000 numberOfChannels: 7 0 -> nvic@9 [1, 2] -> nvicInput10@[0, 1] [3-6] -> nvicInput11@[0-3] dma2: DMA.STM32G0DMA @ sysbus 0x40020400 numberOfChannels: 5 [0-4] -> nvicInput11@[4-8] adc: Analog.STM32G0_ADC @ sysbus 0x40012400 referenceVoltage: 3.3 externalEventFrequency: 1000 -> nvic@12 iwdg: Timers.STM32_IndependentWatchdog @ sysbus 0x40003000 frequency: 32000 flash_ctrl: MTD.STM32F4_FlashController @ sysbus 0x40022000 flash: flash // Alternate function mapping connections. For more details see `stm32l071.repl`. timer1: 0 -> gpioPortA#07@2 | gpioPortA#08@2 | gpioPortB#13@2 | gpioPortD#02@2 1 -> gpioPortA#09@2 | gpioPortB#00@2 | gpioPortB#03@1 | gpioPortB#14@2 | gpioPortD#03@2 2 -> gpioPortA#10@2 | gpioPortB#01@2 | gpioPortB#06@1 | gpioPortB#15@2 3 -> gpioPortA#11@2 timer2: 0 -> gpioPortA#00@2 | gpioPortA#05@2 | gpioPortA#15@2 1 -> gpioPortA#01@2 | gpioPortB#03@2 2 -> gpioPortA#02@2 | gpioPortB#10@2 | gpioPortC#06@2 3 -> gpioPortA#03@2 | gpioPortB#11@2 | gpioPortC#07@2 timer3: 0 -> gpioPortA#06@1 | gpioPortB#04@1 | gpioPortC#06@1 1 -> gpioPortA#07@1 | gpioPortB#05@1 | gpioPortC#07@1 2 -> gpioPortB#00@1 3 -> gpioPortB#01@1 timer14: 0 -> gpioPortA#04@4 | gpioPortA#07@4 | gpioPortB#01@0 | gpioPortF#00@2 timer16: 0 -> gpioPortA#06@5 | gpioPortB#06@2 | gpioPortB#08@2 | gpioPortD#00@2 timer17: 0 -> gpioPortA#07@5 | gpioPortB#07@2 | gpioPortB#09@2 | gpioPortD#01@2 sysbus: init: Tag <0x40002C00, 0x40002FFF> "WWDG" Tag <0x40003000, 0x400033FF> "IWDG" Tag <0x40005C00, 0x40005FFF> "USB " Tag <0x40006C00, 0x40006FFF> "CRS" Tag <0x40007000, 0x400073FF> "PWR" Tag <0x40007400, 0x400077FF> "DAC" Tag <0x40007800, 0x40007BFF> "CEC" Tag <0x40010000, 0x400103FF> "SYSCFG" Tag <0x40015800, 0x40015BFF> "DBG" Tag <0x40022000, 0x400223FF> "FLASH_INTERFACE" Tag <0x40023000, 0x400233FF> "CRC"