stm — STM32 MCU’lara özgü işlevsellik

Bu modül, çevre birimi yazmaçlarına doğrudan erişim de dahil olmak üzere STM32 mikrodenetleyicilerine özgü işlevsellik sağlar.

Bellek erişimi

Modül, ham bellek erişimi için kullanılan abone olunabilir (subscriptable) üç nesne sunar. Her biri bayt adresiyle indekslenen seyrek bir dizi gibi davranır: value = memN[addr] okur, memN[addr] = value yazar. Adres, erişim genişliğinden bağımsız olarak her zaman bir bayt adresidir.

Bu bellek nesneleri, MCU donanım çevre birimi yazmaçlarını ve SoC’nin adres uzayındaki herhangi bir başka konumu okumak ve yazmak için aşağıdaki çevre birimi yazmaç sabitleriyle birlikte kullanılabilir.

stm.mem8

Abone olunabilir 8 bitlik bellek erişimcisi. mem8[addr], addr adresindeki bayttan 0-255 aralığında bir int okur; mem8[addr] = value, value öğesinin düşük 8 bitini yazar. addr herhangi bir bayt hizalı adres olabilir.

stm.mem16

Abone olunabilir 16 bitlik (halfword) bellek erişimcisi. mem16[addr], 0-65535 aralığında bir int okur; mem16[addr] = value düşük 16 biti yazar. addr 2 bayta hizalanmış olmalıdır.

stm.mem32

Abone olunabilir 32 bitlik (word) bellek erişimcisi. mem32[addr], 0-0xFFFFFFFF aralığında bir int okur; mem32[addr] = value düşük 32 biti yazar. addr 4 bayta hizalanmış olmalıdır.

Çevre birimi yazmaç sabitleri

stm modülü, aygıt yazılımının (firmware) hangi STM32 ailesi için derlendiğine bağlı olarak CMSIS yazmaç adreslerinin ve ofsetlerinin tamamını sunar. Adlar, ST’nin CMSIS başlıklarını tam olarak yansıtır: sırasıyla M4, M7, H7 ailesi (H7 / H7 Plus / Pure Thermal) ve N6 OpenMV Cam’lerde STM32F427xx, STM32F765xx, STM32H743xx ve STM32N657xx. Adların tamamı aile başına birkaç yüz semboldür (M4’te 271, M7’de 306, H7’de 494, N6’da 594); bunları burada sıralamak, ST’nin başvuru kılavuzunu ve CMSIS başlıklarını yalnızca yinelemiş olurdu.

İki adlandırma kuralı kullanılır:

  • Bir çevre birimi örneğine göre adlandırılan sabitler (GPIOA, USART1, TIM2, …) mutlak temel adreslerdir.

  • Bir çevre birimi türüyle öneklenen sabitler (GPIO_BSRR, USART_CR1, TIM_CCR1, …) eşleşen temele göre yazmaç ofsetleridir.

Tek bir yazmacın tam adresini elde etmek için bir mutlak temeli ve bir yazmaç ofsetini toplayın. Örneğin stm.GPIOA + stm.GPIO_BSRR, GPIOA->BSRR öğesinin mutlak adresidir.

Örnek:

import stm

# set PA2 high
stm.mem32[stm.GPIOA + stm.GPIO_BSRR] = 1 << 2

# read PA3
value = (stm.mem32[stm.GPIOA + stm.GPIO_IDR] >> 3) & 1

Temsili sabitler

Aşağıdaki seçim, adlandırma kuralının bir bakışta anlaşılır olması için seçilmiş, her büyük çevre birimi kategorisi başına bir girdiyi kapsar. Derleme hedefine ait diğer her CMSIS sembolü de modülde mevcuttur – tür denetleyici geri dönüşü için aşağıdaki __getattr__() öğesine bakın.

stm.GPIOA: int

GPIOA çevre biriminin temel adresi. GPIOBGPIOK (aralık MCU paketine bağlıdır) aynı deseni izler.

stm.USART1: int

USART1 çevre biriminin temel adresi. Diğer USART / UART örnekleri, mevcut olduğu kadarıyla USART2, USART3, UART4 … altında sunulur.

stm.SPI1: int

SPI1 çevre biriminin temel adresi. Ek SPI örnekleri, MCU’nun sayısına kadar SPI2, SPI3, … olarak görünür.

stm.I2C1: int

I2C1 çevre biriminin temel adresi. I2C2I2C4 izler.

stm.TIM1: int

TIM1 gelişmiş kontrol zamanlayıcısının temel adresi. Genel amaçlı ve temel zamanlayıcılar (mevcut olduğu kadarıyla TIM2TIM17) aynı adlandırmayı izler.

stm.ADC1: int

ADC1 öğesinin temel adresi. ADC2 / ADC3, birden çok ADC bloğuna sahip MCU’larda görünür.

stm.DAC: int

DAC çevre biriminin, bu birime sahip MCU’lardaki temel adresi.

stm.DMA1: int

DMA1 öğesinin temel adresi. DMA2 çoğu STM32’de mevcuttur; H7 sınıfı parçalar ayrıca BDMA, MDMA ve (N6’da) HPDMA / GPDMA öğelerini de sunar.

stm.RCC: int

Reset and Clock Control çevre biriminin temel adresi.

stm.EXTI: int

External Interrupt / Event Controller temel adresi.

stm.FLASH: int

Gömülü flash denetleyicisinin temel adresi (flash dizisinin kendisi değil, çevre birimi).

stm.SYSCFG: int

System Configuration Controller temel adresi.

stm.PWR: int

Power Control çevre biriminin temel adresi.

stm.GPIO_BSRR: int

Herhangi bir GPIOx temeli içindeki GPIO bit ayarlama/sıfırlama yazmacının ofseti.

stm.GPIO_IDR: int

GPIO giriş veri yazmacının ofseti.

stm.GPIO_ODR: int

GPIO çıkış veri yazmacının ofseti.

stm.USART_CR1: int

USART/UART kontrol yazmacı 1’in ofseti.

stm.TIM_CR1: int

Zamanlayıcı kontrol yazmacı 1’in ofseti.

stm.TIM_CCR1: int

Zamanlayıcı yakalama/karşılaştırma yazmacı 1’in ofseti. TIM_CCR2TIM_CCR4, birden çok kanala sahip zamanlayıcılarda izler.

stm.RCC_CR: int

RCC saat kontrol yazmacının ofseti.

stm.RCC_CFGR: int

RCC saat yapılandırma yazmacının ofseti.

stm.__getattr__(name: str) int

Dinamik öznitelik geri dönüşü: aygıt yazılımı (firmware) tarafından sunulan ve yukarıda tek tek listelenmeyen herhangi bir CMSIS sembolü (örneğin stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, çeşitli bit alanı kaydırmaları ve maskeleri, …) yine de mutlak adresine veya ofsetine bir int olarak çözümlenir.

Çalışma zamanı modülü, içe aktarma sırasında bu sembolleri doğrudan globals sözlüğüne doldurur, bu nedenle __getattr__ aslında hiçbir zaman çağrılmaz. İmza, yalnızca statik tür denetleyicilerinin (Pyright, Pylance, mypy) bir “module has no attribute” tanılaması olmadan stm.<any CMSIS name> öğesini kabul etmesi için sunulur.