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],addradresindeki bayttan 0-255 aralığında birintokur;mem8[addr] = value,valueöğesinin düşük 8 bitini yazar.addrherhangi bir bayt hizalı adres olabilir.
- stm.mem16¶
Abone olunabilir 16 bitlik (halfword) bellek erişimcisi.
mem16[addr], 0-65535 aralığında birintokur;mem16[addr] = valuedüşük 16 biti yazar.addr2 bayta hizalanmış olmalıdır.
- stm.mem32¶
Abone olunabilir 32 bitlik (word) bellek erişimcisi.
mem32[addr], 0-0xFFFFFFFF aralığında birintokur;mem32[addr] = valuedüşük 32 biti yazar.addr4 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.GPIOB…GPIOK(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ıylaUSART2,USART3,UART4… altında sunulur.
- stm.SPI1: int¶
SPI1çevre biriminin temel adresi. Ek SPI örnekleri, MCU’nun sayısına kadarSPI2,SPI3, … olarak görünür.
- stm.TIM1: int¶
TIM1gelişmiş kontrol zamanlayıcısının temel adresi. Genel amaçlı ve temel zamanlayıcılar (mevcut olduğu kadarıylaTIM2…TIM17) 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.DMA1: int¶
DMA1öğesinin temel adresi.DMA2çoğu STM32’de mevcuttur; H7 sınıfı parçalar ayrıcaBDMA,MDMAve (N6’da)HPDMA/GPDMAöğelerini de sunar.
- stm.FLASH: int¶
Gömülü flash denetleyicisinin temel adresi (flash dizisinin kendisi değil, çevre birimi).
- stm.GPIO_BSRR: int¶
Herhangi bir
GPIOxtemeli içindeki GPIO bit ayarlama/sıfırlama yazmacının ofseti.
- stm.TIM_CCR1: int¶
Zamanlayıcı yakalama/karşılaştırma yazmacı 1’in ofseti.
TIM_CCR2…TIM_CCR4, birden çok kanala sahip zamanlayıcılarda izler.
- 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 birintolarak çö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ı olmadanstm.<any CMSIS name>öğesini kabul etmesi için sunulur.