Modul stm --- fungsionalitas khusus untuk MCU STM32

Modul ini menyediakan fungsionalitas khusus untuk mikrokontroler STM32, termasuk akses langsung ke register periferal.

Akses memori

Modul ini mengekspos tiga objek yang dapat disubskrip yang digunakan untuk akses memori mentah. Masing-masing berperilaku seperti array jarang yang diindeks berdasarkan alamat byte: value = memN[addr] untuk membaca, memN[addr] = value untuk menulis. Alamat selalu merupakan alamat byte, terlepas dari lebar akses.

Objek memori ini dapat digunakan bersama dengan konstanta register periferal di bawah ini untuk membaca dan menulis register periferal perangkat keras MCU, serta lokasi lain mana pun dalam ruang alamat SoC.

stm.mem8

Aksessor memori 8-bit yang dapat disubskrip. mem8[addr] membaca int dalam rentang 0-255 dari byte di addr; mem8[addr] = value menulis 8 bit rendah dari value. addr dapat berupa alamat byte yang sejajar mana pun.

stm.mem16

Aksessor memori 16-bit (halfword) yang dapat disubskrip. mem16[addr] membaca int dalam rentang 0-65535; mem16[addr] = value menulis 16 bit rendah. addr harus sejajar dengan 2 byte.

stm.mem32

Aksessor memori 32-bit (word) yang dapat disubskrip. mem32[addr] membaca int dalam rentang 0-0xFFFFFFFF; mem32[addr] = value menulis 32 bit rendah. addr harus sejajar dengan 4 byte.

Konstanta register periferal

Modul stm mengekspos kumpulan lengkap alamat register CMSIS dan offset untuk keluarga STM32 tempat firmware dikompilasi. Nama-namanya mencerminkan header CMSIS ST secara persis: STM32F427xx, STM32F765xx, STM32H743xx, dan STM32N657xx pada keluarga M4, M7, H7 (H7 / H7 Plus / Pure Thermal) dan OpenMV Cam N6 masing-masing. Kumpulan nama lengkap terdiri dari beberapa ratus simbol per keluarga (271 pada M4, 306 pada M7, 494 pada H7, 594 pada N6); menghitung semuanya di sini hanya akan menduplikasi manual referensi ST dan header CMSIS.

Dua konvensi penamaan digunakan:

  • Konstanta yang dinamai setelah instans periferal (GPIOA, USART1, TIM2, ...) adalah alamat basis absolut.

  • Konstanta yang diawali dengan tipe periferal (GPIO_BSRR, USART_CR1, TIM_CCR1, ...) adalah offset register relatif terhadap basis yang sesuai.

Tambahkan alamat basis absolut dan offset register untuk mendapatkan alamat lengkap dari satu register. Misalnya stm.GPIOA + stm.GPIO_BSRR adalah alamat absolut dari GPIOA->BSRR.

Contoh:

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

Konstanta representatif

Seleksi di bawah ini mencakup satu entri per kategori periferal utama, dipilih agar konvensi penamaan jelas sekilas. Setiap simbol CMSIS lain untuk target build juga tersedia di modul -- lihat __getattr__() di bawah ini untuk fallback pemeriksaan tipe.

stm.GPIOA: int

Alamat basis periferal GPIOA. GPIOB ... GPIOK (rentang tergantung pada paket MCU) mengikuti pola yang sama.

stm.USART1: int

Alamat basis periferal USART1. Instans USART / UART lainnya diekspos di bawah USART2, USART3, UART4 ... sesuai ketersediaan.

stm.SPI1: int

Alamat basis periferal SPI1. Instans SPI tambahan muncul sebagai SPI2, SPI3, ... hingga jumlah MCU.

stm.I2C1: int

Alamat basis periferal I2C1. I2C2 ... I2C4 mengikuti.

stm.TIM1: int

Alamat basis timer kontrol lanjutan TIM1. Timer tujuan umum dan dasar (TIM2 ... TIM17 sesuai ketersediaan) mengikuti penamaan yang sama.

stm.ADC1: int

Alamat basis ADC1. ADC2 / ADC3 muncul pada MCU dengan beberapa blok ADC.

stm.DAC: int

Alamat basis periferal DAC, pada MCU yang memilikinya.

stm.DMA1: int

Alamat basis DMA1. DMA2 tersedia pada sebagian besar STM32; komponen kelas H7 juga mengekspos BDMA, MDMA, dan (pada N6) HPDMA / GPDMA.

stm.RCC: int

Alamat basis periferal Reset dan Clock Control.

stm.EXTI: int

Alamat basis External Interrupt / Event Controller.

stm.FLASH: int

Alamat basis kontroler flash tertanam (periferal, bukan array flash itu sendiri).

stm.SYSCFG: int

Alamat basis System Configuration Controller.

stm.PWR: int

Alamat basis periferal Power Control.

stm.GPIO_BSRR: int

Offset register bit set/reset GPIO dalam basis GPIOx mana pun.

stm.GPIO_IDR: int

Offset register data input GPIO.

stm.GPIO_ODR: int

Offset register data output GPIO.

stm.USART_CR1: int

Offset register kontrol USART/UART 1.

stm.TIM_CR1: int

Offset register kontrol timer 1.

stm.TIM_CCR1: int

Offset register capture/compare timer 1. TIM_CCR2 ... TIM_CCR4 mengikuti pada timer yang memiliki beberapa saluran.

stm.RCC_CR: int

Offset register kontrol clock RCC.

stm.RCC_CFGR: int

Offset register konfigurasi clock RCC.

stm.__getattr__(name: str) int

Fallback atribut dinamis: simbol CMSIS apa pun yang diekspos oleh firmware yang tidak terdaftar secara individual di atas (misalnya stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, berbagai pergeseran dan mask bit-field, ...) tetap dapat di-resolve ke alamat absolut atau offset-nya sebagai int.

Modul runtime mengisi simbol-simbol ini langsung ke dalam dict globals-nya saat import, sehingga __getattr__ tidak pernah benar-benar dipanggil. Tanda tangan ini diekspos semata-mata agar pemeriksaan tipe statis (Pyright, Pylance, mypy) menerima stm.<any CMSIS name> tanpa diagnostik "modul tidak memiliki atribut".