stm --- Chức năng đặc thù cho vi điều khiển STM32¶
Mô-đun này cung cấp chức năng đặc thù cho vi điều khiển STM32, bao gồm truy cập trực tiếp vào các thanh ghi ngoại vi.
Truy cập bộ nhớ¶
Mô-đun này cung cấp ba đối tượng có thể đăng ký (subscriptable) dùng để truy cập bộ nhớ thô. Mỗi đối tượng hoạt động như một mảng thưa được lập chỉ mục theo địa chỉ byte: value = memN[addr] để đọc, memN[addr] = value để ghi. Địa chỉ luôn là địa chỉ byte, bất kể độ rộng truy cập.
Các đối tượng bộ nhớ này có thể được dùng kết hợp với các hằng số thanh ghi ngoại vi bên dưới để đọc và ghi các thanh ghi ngoại vi phần cứng MCU, cũng như bất kỳ vị trí nào khác trong không gian địa chỉ của SoC.
- stm.mem8¶
Bộ truy cập bộ nhớ 8-bit có thể đăng ký.
mem8[addr]đọc mộtinttrong phạm vi 0-255 từ byte tạiaddr;mem8[addr] = valueghi 8 bit thấp củavalue.addrcó thể là bất kỳ địa chỉ căn chỉnh theo byte nào.
- stm.mem16¶
Bộ truy cập bộ nhớ 16-bit (nửa từ) có thể đăng ký.
mem16[addr]đọc mộtinttrong phạm vi 0-65535;mem16[addr] = valueghi 16 bit thấp.addrphải được căn chỉnh theo 2 byte.
- stm.mem32¶
Bộ truy cập bộ nhớ 32-bit (từ) có thể đăng ký.
mem32[addr]đọc mộtinttrong phạm vi 0-0xFFFFFFFF;mem32[addr] = valueghi 32 bit thấp.addrphải được căn chỉnh theo 4 byte.
Hằng số thanh ghi ngoại vi¶
Mô-đun stm hiển thị toàn bộ địa chỉ thanh ghi CMSIS và offset cho dòng STM32 nào đó mà firmware được biên dịch. Các tên phản ánh chính xác các header CMSIS của ST: STM32F427xx, STM32F765xx, STM32H743xx và STM32N657xx tương ứng cho dòng M4, M7, H7 (H7 / H7 Plus / Pure Thermal) và OpenMV Cams N6. Toàn bộ tập tên có vài trăm ký hiệu mỗi dòng (271 trên M4, 306 trên M7, 494 trên H7, 594 trên N6); việc liệt kê chúng ở đây chỉ đơn giản là trùng lặp tài liệu tham khảo của ST và các header CMSIS.
Hai quy ước đặt tên được sử dụng:
Các hằng số được đặt tên theo phiên bản ngoại vi (
GPIOA,USART1,TIM2, ...) là địa chỉ cơ sở tuyệt đối.Các hằng số có tiền tố là loại ngoại vi (
GPIO_BSRR,USART_CR1,TIM_CCR1, ...) là offset thanh ghi tương đối so với cơ sở tương ứng.
Cộng địa chỉ cơ sở tuyệt đối với offset thanh ghi để có địa chỉ đầy đủ của một thanh ghi đơn lẻ. Ví dụ stm.GPIOA + stm.GPIO_BSRR là địa chỉ tuyệt đối của GPIOA->BSRR.
Ví dụ:
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
Hằng số tiêu biểu¶
Phần lựa chọn dưới đây bao gồm một mục cho mỗi danh mục ngoại vi chính, được chọn sao cho quy ước đặt tên rõ ràng ngay khi nhìn vào. Mọi ký hiệu CMSIS khác cho mục tiêu build cũng có sẵn trên mô-đun -- xem __getattr__() bên dưới để biết về fallback của trình kiểm tra kiểu.
- stm.GPIOA: int¶
Địa chỉ cơ sở của ngoại vi
GPIOA.GPIOB...GPIOK(phạm vi phụ thuộc vào gói MCU) theo cùng mẫu.
- stm.USART1: int¶
Địa chỉ cơ sở của ngoại vi
USART1. Các phiên bản USART / UART khác được hiển thị dướiUSART2,USART3,UART4... tùy theo sẵn có.
- stm.SPI1: int¶
Địa chỉ cơ sở của ngoại vi
SPI1. Các phiên bản SPI bổ sung xuất hiện dưới dạngSPI2,SPI3, ... cho đến số lượng của MCU.
- stm.TIM1: int¶
Địa chỉ cơ sở của bộ định thời điều khiển nâng cao
TIM1. Các bộ định thời đa năng và cơ bản (TIM2...TIM17tùy theo sẵn có) theo cùng cách đặt tên.
- stm.DMA1: int¶
Địa chỉ cơ sở của
DMA1.DMA2có mặt trên hầu hết các STM32; các chip dòng H7 cũng hiển thịBDMA,MDMAvà (trên N6)HPDMA/GPDMA.
- stm.TIM_CCR1: int¶
Offset của thanh ghi capture/compare 1 bộ định thời.
TIM_CCR2...TIM_CCR4theo sau trên các bộ định thời có nhiều kênh.
- stm.__getattr__(name: str) int¶
Fallback thuộc tính động: bất kỳ ký hiệu CMSIS nào được firmware hiển thị mà không được liệt kê riêng ở trên (ví dụ:
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, các shift và mask bit-field khác nhau, ...) vẫn phân giải thành địa chỉ tuyệt đối hoặc offset của nó dưới dạngint.Mô-đun runtime điền trực tiếp các ký hiệu này vào dict globals của nó khi import, vì vậy
__getattr__thực sự không bao giờ được gọi. Chữ ký được hiển thị chỉ để các trình kiểm tra kiểu tĩnh (Pyright, Pylance, mypy) chấp nhậnstm.<any CMSIS name>mà không có chẩn đoán "module has no attribute".