stm — funkcjonalność specyficzna dla mikrokontrolerów STM32¶
Ten moduł zapewnia funkcjonalność specyficzną dla mikrokontrolerów STM32, w tym bezpośredni dostęp do rejestrów urządzeń peryferyjnych.
Dostęp do pamięci¶
Moduł udostępnia trzy obiekty z możliwością indeksowania, używane do surowego dostępu do pamięci. Każdy z nich zachowuje się jak rzadka tablica indeksowana adresem bajtu: value = memN[addr] odczytuje, memN[addr] = value zapisuje. Adres jest zawsze adresem bajtu, niezależnie od szerokości dostępu.
Tych obiektów pamięci można używać w połączeniu ze stałymi rejestrów urządzeń peryferyjnych poniżej do odczytu i zapisu rejestrów sprzętowych urządzeń peryferyjnych MCU, jak również dowolnej innej lokalizacji w przestrzeni adresowej SoC.
- stm.mem8¶
Akcesor pamięci 8-bitowej z możliwością indeksowania.
mem8[addr]odczytuje wartośćintz zakresu 0-255 z bajtu pod adresemaddr;mem8[addr] = valuezapisuje dolne 8 bitów wartościvalue.addrmoże być dowolnym adresem wyrównanym do bajtu.
- stm.mem16¶
Akcesor pamięci 16-bitowej (półsłowa) z możliwością indeksowania.
mem16[addr]odczytuje wartośćintz zakresu 0-65535;mem16[addr] = valuezapisuje dolne 16 bitów.addrmusi być wyrównany do 2 bajtów.
- stm.mem32¶
Akcesor pamięci 32-bitowej (słowa) z możliwością indeksowania.
mem32[addr]odczytuje wartośćintz zakresu 0-0xFFFFFFFF;mem32[addr] = valuezapisuje dolne 32 bity.addrmusi być wyrównany do 4 bajtów.
Stałe rejestrów urządzeń peryferyjnych¶
Moduł stm udostępnia pełny zestaw adresów i przesunięć rejestrów CMSIS dla rodziny STM32, dla której zostało skompilowane oprogramowanie układowe. Nazwy dokładnie odzwierciedlają nagłówki CMSIS firmy ST: STM32F427xx, STM32F765xx, STM32H743xx i STM32N657xx odpowiednio na kamerach OpenMV Cam z rodzin M4, M7, H7 (H7 / H7 Plus / Pure Thermal) i N6. Pełny zestaw nazw to kilkaset symboli na rodzinę (271 na M4, 306 na M7, 494 na H7, 594 na N6); wyliczanie ich tutaj byłoby zwykłym powieleniem podręcznika referencyjnego ST i nagłówków CMSIS.
Stosowane są dwie konwencje nazewnictwa:
Stałe nazwane od instancji urządzenia peryferyjnego (
GPIOA,USART1,TIM2, …) to bezwzględne adresy bazowe.Stałe z przedrostkiem typu urządzenia peryferyjnego (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) to przesunięcia rejestrów względem odpowiadającej bazy.
Dodaj bezwzględną bazę i przesunięcie rejestru, aby uzyskać pełny adres pojedynczego rejestru. Na przykład stm.GPIOA + stm.GPIO_BSRR to bezwzględny adres GPIOA->BSRR.
Przykład:
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
Reprezentatywne stałe¶
Poniższy wybór obejmuje po jednym wpisie na każdą główną kategorię urządzeń peryferyjnych, dobranym tak, aby konwencja nazewnictwa była jasna na pierwszy rzut oka. Każdy inny symbol CMSIS dla celu kompilacji jest również dostępny w module – zob. __getattr__() poniżej, opisujący mechanizm awaryjny dla narzędzia sprawdzającego typy.
- stm.GPIOA: int¶
Adres bazowy urządzenia peryferyjnego
GPIOA.GPIOB…GPIOK(zakres zależy od obudowy MCU) podążają za tym samym wzorcem.
- stm.USART1: int¶
Adres bazowy urządzenia peryferyjnego
USART1. Pozostałe instancje USART / UART są udostępniane podUSART2,USART3,UART4… w miarę dostępności.
- stm.SPI1: int¶
Adres bazowy urządzenia peryferyjnego
SPI1. Dodatkowe instancje SPI pojawiają się jakoSPI2,SPI3, … aż do liczby dostępnej w MCU.
- stm.TIM1: int¶
Adres bazowy licznika czasu (timera) zaawansowanego sterowania
TIM1. Liczniki ogólnego przeznaczenia i podstawowe (TIM2…TIM17w miarę dostępności) podążają za tym samym nazewnictwem.
- stm.DMA1: int¶
Adres bazowy
DMA1.DMA2jest obecny na większości układów STM32; części klasy H7 udostępniają równieżBDMA,MDMAoraz (na N6)HPDMA/GPDMA.
- stm.FLASH: int¶
Adres bazowy wbudowanego kontrolera pamięci flash (urządzenia peryferyjnego, a nie samej macierzy flash).
- stm.GPIO_BSRR: int¶
Przesunięcie rejestru ustawiania/resetowania bitów GPIO w obrębie dowolnej bazy
GPIOx.
- stm.TIM_CCR1: int¶
Przesunięcie rejestru przechwytywania/porównywania 1 licznika czasu (timera).
TIM_CCR2…TIM_CCR4następują na licznikach posiadających wiele kanałów.
- stm.__getattr__(name: str) int¶
Mechanizm awaryjny atrybutów dynamicznych: każdy symbol CMSIS udostępniany przez oprogramowanie układowe, który nie jest indywidualnie wymieniony powyżej (np.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, różne przesunięcia i maski pól bitowych, …) nadal rozwiązuje się do swojego bezwzględnego adresu lub przesunięcia jako wartośćint.Moduł czasu wykonania wypełnia te symbole bezpośrednio do swojego słownika globals w momencie importu, więc
__getattr__nigdy nie jest faktycznie wywoływany. Sygnatura jest udostępniona wyłącznie po to, aby statyczne narzędzia sprawdzające typy (Pyright, Pylance, mypy) akceptowałystm.<any CMSIS name>bez komunikatu diagnostycznego „module has no attribute”.