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.