Stamp Timer Power 2

StampTimerPower2 通过 I2C 提供电源管理、GPIO、ADC、PWM、NeoPixel、按钮事件、中断、唤醒、看门狗、定时器和 RTC RAM 功能。

支持以下产品:

Stamp Timer Power 2 (S021)

UiFlow2 示例

GPIO 输入

在 UiFlow2 中打开 basic_stp2_gpio_input_example.m5f2 项目。

G4 上拉输入,接地显示 Low (0),松开显示 High (1)。

UiFlow2 图形代码块:

basic_stp2_gpio_input_example.png

示例输出:

None

GPIO 输出

在 UiFlow2 中打开 basic_stp2_gpio_output_example.m5f2 项目。

G3 输出:A 置低、B 翻转、C 置高;分别显示设定值和引脚读回值。

UiFlow2 图形代码块:

basic_stp2_gpio_output_example.png

示例输出:

None

GPIO 中断

在 UiFlow2 中打开 basic_stp2_gpio_irq_example.m5f2 项目。

IRQ 线连接 STP2 G0 与 Basic G26。G4 接地或松开产生输入变化;A 清零、B 暂停、C 继续,显示中断次数和 G4 电平。

UiFlow2 图形代码块:

basic_stp2_gpio_irq_example.png

示例输出:

None

ADC 输入

在 UiFlow2 中打开 basic_stp2_adc_example.m5f2 项目。

读取 G1、G2 的 ADC 原始值,范围为 0~4095。

UiFlow2 图形代码块:

basic_stp2_adc_example.png

示例输出:

None

PWM 输出

在 UiFlow2 中打开 basic_stp2_pwm_example.m5f2 项目。

PWM0 使用 G3,频率 1 kHz。A 将占空比降低 10 个百分点,B 置零,C 提高 10 个百分点,范围 0~100%。

UiFlow2 图形代码块:

basic_stp2_pwm_example.png

示例输出:

None

NeoPixel 控制

在 UiFlow2 中打开 basic_stp2_neopixel_example.m5f2 项目。

LED 数据输入连接 G0,并共地。按键 A 切换红、绿、蓝、白色,B 降低 10 个百分点亮度,C 提高 10 个百分点亮度。示例默认控制 1 颗 LED,初始为红色、20% 亮度。

UiFlow2 图形代码块:

basic_stp2_neopixel_example.png

示例输出:

None

电源控制

在 UiFlow2 中打开 basic_stp2_power_config_example.m5f2 项目。

按键 A 切换 LDO 开关,按键 B 切换 DCDC 开关。屏幕和串口每 100 ms 显示从模块读取的使能状态。

UiFlow2 图形代码块:

basic_stp2_power_config_example.png

示例输出:

None

定时开机

在 UiFlow2 中打开 basic_stp2_timer_example.m5f2 项目。

按键 A 切换关机期间的 LDO 输出保持,默认关闭。按键 B 循环选择 5、10、15 秒开机延时,默认 5 秒。按键 C(Shutdown)应用设置、启动定时开机并立即关闭 STP2。倒计时期间锁定按键。

Basic 需独立供电,以便在 STP2 关机期间继续显示倒计时。

图形化示例在倒计时结束后显示 Timer elapsed,不核对唤醒来源。

UiFlow2 图形代码块:

basic_stp2_timer_example.png

示例输出:

None

MicroPython 示例

GPIO 输入

G4 上拉输入,接地显示 Low (0),松开显示 High (1)。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import Pin
  9from hardware import I2C
 10from stamp import StampTimerPower2
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_caption1 = None
 17label_value1 = None
 18label_caption2 = None
 19label_value2 = None
 20i2c0 = None
 21stp2 = None
 22
 23
 24last_time = None
 25level = None
 26
 27
 28def setup():
 29    global \
 30        label_title, \
 31        label_description, \
 32        label_caption1, \
 33        label_value1, \
 34        label_caption2, \
 35        label_value2, \
 36        i2c0, \
 37        stp2, \
 38        last_time, \
 39        level
 40
 41    M5.begin()
 42    Widgets.setRotation(0)
 43    Widgets.fillScreen(0x000000)
 44    label_title = Widgets.Label(
 45        "GPIO Input", 108, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
 46    )
 47    label_description = Widgets.Label(
 48        "G4: GND = Low / release = High",
 49        12,
 50        38,
 51        1.0,
 52        0x94A3B8,
 53        0x000000,
 54        Widgets.FONTS.Montserrat14,
 55    )
 56    label_caption1 = Widgets.Label(
 57        "Input Pin", 12, 78, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
 58    )
 59    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
 60    label_caption2 = Widgets.Label(
 61        "G4 Logic Level", 12, 134, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
 62    )
 63    label_value2 = Widgets.Label(
 64        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
 65    )
 66
 67    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
 68    stp2 = StampTimerPower2(i2c0)
 69    stp2.wake()
 70    stp2.set_pin_mode(4, StampTimerPower2.GPIO_MODE_IN)
 71    stp2.set_pin_function(4, StampTimerPower2.PIN_FUNCTION_GPIO)
 72    stp2.set_pin_pull(4, StampTimerPower2.GPIO_PULL_UP)
 73    last_time = time.ticks_ms()
 74
 75
 76def loop():
 77    global \
 78        label_title, \
 79        label_description, \
 80        label_caption1, \
 81        label_value1, \
 82        label_caption2, \
 83        label_value2, \
 84        i2c0, \
 85        stp2, \
 86        last_time, \
 87        level
 88    M5.update()
 89    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
 90        last_time = time.ticks_ms()
 91        level = stp2.read_pin(4)
 92        label_value1.setText(str("G4 / Pull-Up"))
 93        if level:
 94            label_value2.setText(str("High (1)"))
 95        else:
 96            label_value2.setText(str("Low (0)"))
 97        print((str("G4 input: ") + str(level)))
 98
 99
100if __name__ == "__main__":
101    try:
102        setup()
103        while True:
104            loop()
105    except (Exception, KeyboardInterrupt) as e:
106        try:
107            from utility import print_error_msg
108
109            print_error_msg(e)
110        except ImportError:
111            print("please update to latest firmware")

示例输出:

None

GPIO 输出

G3 输出:A 置低、B 翻转、C 置高;分别显示设定值和引脚读回值。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from stamp import StampTimerPower2
  9from hardware import Pin
 10from hardware import I2C
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_caption1 = None
 17label_value1 = None
 18label_caption2 = None
 19label_value2 = None
 20label_key_a = None
 21label_action_a = None
 22label_key_b = None
 23label_action_b = None
 24label_key_c = None
 25label_action_c = None
 26i2c0 = None
 27stp2 = None
 28
 29
 30level = None
 31last_time = None
 32actual = None
 33
 34
 35def btna_was_clicked_event(state):
 36    global \
 37        label_title, \
 38        label_description, \
 39        label_caption1, \
 40        label_value1, \
 41        label_caption2, \
 42        label_value2, \
 43        label_key_a, \
 44        label_action_a, \
 45        label_key_b, \
 46        label_action_b, \
 47        label_key_c, \
 48        label_action_c, \
 49        i2c0, \
 50        stp2, \
 51        level, \
 52        last_time, \
 53        actual
 54    level = 0
 55    stp2.set_pin_value(3, level)
 56
 57
 58def btnb_was_clicked_event(state):
 59    global \
 60        label_title, \
 61        label_description, \
 62        label_caption1, \
 63        label_value1, \
 64        label_caption2, \
 65        label_value2, \
 66        label_key_a, \
 67        label_action_a, \
 68        label_key_b, \
 69        label_action_b, \
 70        label_key_c, \
 71        label_action_c, \
 72        i2c0, \
 73        stp2, \
 74        level, \
 75        last_time, \
 76        actual
 77    level = 1 - level
 78    stp2.set_pin_value(3, level)
 79
 80
 81def btnc_was_clicked_event(state):
 82    global \
 83        label_title, \
 84        label_description, \
 85        label_caption1, \
 86        label_value1, \
 87        label_caption2, \
 88        label_value2, \
 89        label_key_a, \
 90        label_action_a, \
 91        label_key_b, \
 92        label_action_b, \
 93        label_key_c, \
 94        label_action_c, \
 95        i2c0, \
 96        stp2, \
 97        level, \
 98        last_time, \
 99        actual
100    level = 1
101    stp2.set_pin_value(3, level)
102
103
104def setup():
105    global \
106        label_title, \
107        label_description, \
108        label_caption1, \
109        label_value1, \
110        label_caption2, \
111        label_value2, \
112        label_key_a, \
113        label_action_a, \
114        label_key_b, \
115        label_action_b, \
116        label_key_c, \
117        label_action_c, \
118        i2c0, \
119        stp2, \
120        level, \
121        last_time, \
122        actual
123
124    M5.begin()
125    Widgets.setRotation(0)
126    Widgets.fillScreen(0x000000)
127    label_title = Widgets.Label(
128        "GPIO Output", 99, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
129    )
130    label_description = Widgets.Label(
131        "G3 -> meter or resistor + LED",
132        12,
133        38,
134        1.0,
135        0x94A3B8,
136        0x000000,
137        Widgets.FONTS.Montserrat14,
138    )
139    label_caption1 = Widgets.Label(
140        "G3 Output Command", 12, 78, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
141    )
142    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
143    label_caption2 = Widgets.Label(
144        "G3 Pin Readback", 12, 134, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
145    )
146    label_value2 = Widgets.Label(
147        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
148    )
149    label_key_a = Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
150    label_action_a = Widgets.Label(
151        "Low", 50, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
152    )
153    label_key_b = Widgets.Label("B", 155, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
154    label_action_b = Widgets.Label(
155        "Toggle", 140, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
156    )
157    label_key_c = Widgets.Label("C", 248, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
158    label_action_c = Widgets.Label(
159        "High", 235, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
160    )
161
162    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
163    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
164    BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
165
166    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
167    stp2 = StampTimerPower2(i2c0)
168    stp2.wake()
169    level = 0
170    stp2.set_pin_mode(3, StampTimerPower2.GPIO_MODE_IN)
171    stp2.set_pin_function(3, StampTimerPower2.PIN_FUNCTION_GPIO)
172    stp2.set_pin_pull(3, StampTimerPower2.GPIO_PULL_NONE)
173    stp2.set_pin_value(3, 0)
174    stp2.set_pin_mode(3, StampTimerPower2.GPIO_MODE_OUT)
175    last_time = time.ticks_ms()
176
177
178def loop():
179    global \
180        label_title, \
181        label_description, \
182        label_caption1, \
183        label_value1, \
184        label_caption2, \
185        label_value2, \
186        label_key_a, \
187        label_action_a, \
188        label_key_b, \
189        label_action_b, \
190        label_key_c, \
191        label_action_c, \
192        i2c0, \
193        stp2, \
194        level, \
195        last_time, \
196        actual
197    M5.update()
198    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
199        last_time = time.ticks_ms()
200        actual = stp2.read_pin(3)
201        if level:
202            label_value1.setText(str("High (1)"))
203        else:
204            label_value1.setText(str("Low (0)"))
205        if actual:
206            label_value2.setText(str("High (1)"))
207        else:
208            label_value2.setText(str("Low (0)"))
209        print((str((str((str("G3 command: ") + str(level))) + str(" readback: "))) + str(actual)))
210
211
212if __name__ == "__main__":
213    try:
214        setup()
215        while True:
216            loop()
217    except (Exception, KeyboardInterrupt) as e:
218        try:
219            from utility import print_error_msg
220
221            print_error_msg(e)
222        except ImportError:
223            print("please update to latest firmware")

示例输出:

None

GPIO 中断

IRQ 线连接 STP2 G0 与 Basic G26。G4 接地或松开产生输入变化;A 清零、B 暂停、C 继续,显示中断次数和 G4 电平。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from stamp import StampTimerPower2
  9from driver.m5pm1 import EVENT
 10from hardware import Pin
 11from hardware import I2C
 12import time
 13
 14
 15label_title = None
 16label_description = None
 17label_note = None
 18label_caption1 = None
 19label_value1 = None
 20label_caption2 = None
 21label_value2 = None
 22label_key_a = None
 23label_action_a = None
 24label_key_b = None
 25label_action_b = None
 26label_key_c = None
 27label_action_c = None
 28i2c0 = None
 29stp2 = None
 30
 31
 32count = None
 33event_handle = None
 34event_data = None
 35running = None
 36removed = None
 37last_time = None
 38level = None
 39
 40
 41# Describe this function...
 42def start_irq():
 43    global \
 44        count, \
 45        event_handle, \
 46        event_data, \
 47        running, \
 48        removed, \
 49        last_time, \
 50        level, \
 51        label_title, \
 52        label_description, \
 53        label_note, \
 54        label_caption1, \
 55        label_value1, \
 56        label_caption2, \
 57        label_value2, \
 58        label_key_a, \
 59        label_action_a, \
 60        label_key_b, \
 61        label_action_b, \
 62        label_key_c, \
 63        label_action_c, \
 64        i2c0, \
 65        stp2
 66    stp2 = StampTimerPower2(i2c0, pm1_int_gpio=0, mcu_int_gpio=26)
 67    event_handle = stp2.add_event_cb(stp2_gpio4_change_event, EVENT.GPIO4_CHANGE)
 68    stp2.wake()
 69    stp2.set_pin_pull(4, StampTimerPower2.GPIO_PULL_UP)
 70    running = 1
 71    label_note.setText(str("G4: connect to GND / release"))
 72
 73
 74def btna_was_clicked_event(state):
 75    global \
 76        label_title, \
 77        label_description, \
 78        label_note, \
 79        label_caption1, \
 80        label_value1, \
 81        label_caption2, \
 82        label_value2, \
 83        label_key_a, \
 84        label_action_a, \
 85        label_key_b, \
 86        label_action_b, \
 87        label_key_c, \
 88        label_action_c, \
 89        i2c0, \
 90        stp2, \
 91        count, \
 92        event_handle, \
 93        event_data, \
 94        running, \
 95        removed, \
 96        last_time, \
 97        level
 98    count = 0
 99
100
101def stp2_gpio4_change_event(event):
102    global \
103        label_title, \
104        label_description, \
105        label_note, \
106        label_caption1, \
107        label_value1, \
108        label_caption2, \
109        label_value2, \
110        label_key_a, \
111        label_action_a, \
112        label_key_b, \
113        label_action_b, \
114        label_key_c, \
115        label_action_c, \
116        i2c0, \
117        stp2, \
118        count, \
119        event_handle, \
120        event_data, \
121        running, \
122        removed, \
123        last_time, \
124        level
125    event_data = event.user_data
126    count = count + 1
127
128
129def btnb_was_clicked_event(state):
130    global \
131        label_title, \
132        label_description, \
133        label_note, \
134        label_caption1, \
135        label_value1, \
136        label_caption2, \
137        label_value2, \
138        label_key_a, \
139        label_action_a, \
140        label_key_b, \
141        label_action_b, \
142        label_key_c, \
143        label_action_c, \
144        i2c0, \
145        stp2, \
146        count, \
147        event_handle, \
148        event_data, \
149        running, \
150        removed, \
151        last_time, \
152        level
153    if running:
154        removed = stp2.remove_event_cb(event_handle)
155        stp2.deinit()
156        event_handle = None
157        running = 0
158        label_note.setText(str("PAUSED"))
159
160
161def btnc_was_clicked_event(state):
162    global \
163        label_title, \
164        label_description, \
165        label_note, \
166        label_caption1, \
167        label_value1, \
168        label_caption2, \
169        label_value2, \
170        label_key_a, \
171        label_action_a, \
172        label_key_b, \
173        label_action_b, \
174        label_key_c, \
175        label_action_c, \
176        i2c0, \
177        stp2, \
178        count, \
179        event_handle, \
180        event_data, \
181        running, \
182        removed, \
183        last_time, \
184        level
185    if running == 0:
186        start_irq()
187
188
189def setup():
190    global \
191        label_title, \
192        label_description, \
193        label_note, \
194        label_caption1, \
195        label_value1, \
196        label_caption2, \
197        label_value2, \
198        label_key_a, \
199        label_action_a, \
200        label_key_b, \
201        label_action_b, \
202        label_key_c, \
203        label_action_c, \
204        i2c0, \
205        stp2, \
206        count, \
207        event_handle, \
208        event_data, \
209        running, \
210        removed, \
211        last_time, \
212        level
213
214    M5.begin()
215    Widgets.setRotation(0)
216    Widgets.fillScreen(0x000000)
217    label_title = Widgets.Label(
218        "GPIO Interrupt", 91, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
219    )
220    label_description = Widgets.Label(
221        "IRQ: STP2 G0 -> Basic G26", 12, 38, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
222    )
223    label_note = Widgets.Label(
224        "G4: connect to GND / release", 12, 54, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
225    )
226    label_caption1 = Widgets.Label(
227        "G4 Change Count", 12, 78, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
228    )
229    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
230    label_caption2 = Widgets.Label(
231        "G4 Level", 12, 134, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
232    )
233    label_value2 = Widgets.Label(
234        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
235    )
236    label_key_a = Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
237    label_action_a = Widgets.Label(
238        "Clear", 46, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
239    )
240    label_key_b = Widgets.Label("B", 155, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
241    label_action_b = Widgets.Label(
242        "Pause", 135, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
243    )
244    label_key_c = Widgets.Label("C", 248, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
245    label_action_c = Widgets.Label(
246        "Resume", 222, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
247    )
248
249    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
250    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
251    BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
252
253    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
254    count = 0
255    running = 0
256    start_irq()
257
258
259def loop():
260    global \
261        label_title, \
262        label_description, \
263        label_note, \
264        label_caption1, \
265        label_value1, \
266        label_caption2, \
267        label_value2, \
268        label_key_a, \
269        label_action_a, \
270        label_key_b, \
271        label_action_b, \
272        label_key_c, \
273        label_action_c, \
274        i2c0, \
275        stp2, \
276        count, \
277        event_handle, \
278        event_data, \
279        running, \
280        removed, \
281        last_time, \
282        level
283    M5.update()
284    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
285        last_time = time.ticks_ms()
286        label_value1.setText(str(count))
287        level = stp2.read_pin(4)
288        if level:
289            label_value2.setText(str("HIGH (1)"))
290        else:
291            label_value2.setText(str("LOW (0)"))
292        print((str("G4 IRQ count: ") + str(count)))
293
294
295if __name__ == "__main__":
296    try:
297        setup()
298        while True:
299            loop()
300    except (Exception, KeyboardInterrupt) as e:
301        try:
302            from utility import print_error_msg
303
304            print_error_msg(e)
305        except ImportError:
306            print("please update to latest firmware")

示例输出:

None

ADC 输入

读取 G1、G2 的 ADC 原始值,范围为 0~4095。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import Pin
  9from hardware import I2C
 10from stamp import StampTimerPower2
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_note = None
 17label_caption1 = None
 18label_value1 = None
 19label_caption2 = None
 20label_value2 = None
 21i2c0 = None
 22stp2 = None
 23
 24
 25last_time = None
 26value1 = None
 27adc1 = None
 28value2 = None
 29adc2 = None
 30
 31
 32def setup():
 33    global \
 34        label_title, \
 35        label_description, \
 36        label_note, \
 37        label_caption1, \
 38        label_value1, \
 39        label_caption2, \
 40        label_value2, \
 41        i2c0, \
 42        stp2, \
 43        last_time, \
 44        value1, \
 45        adc1, \
 46        value2, \
 47        adc2
 48
 49    M5.begin()
 50    Widgets.setRotation(0)
 51    Widgets.fillScreen(0x000000)
 52    label_title = Widgets.Label(
 53        "ADC Input", 111, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
 54    )
 55    label_description = Widgets.Label(
 56        "G1 / G2 analog input", 12, 38, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
 57    )
 58    label_note = Widgets.Label(
 59        "Input: 0..Vref; never connect 5V",
 60        12,
 61        54,
 62        1.0,
 63        0x94A3B8,
 64        0x000000,
 65        Widgets.FONTS.Montserrat14,
 66    )
 67    label_caption1 = Widgets.Label(
 68        "ADC1 / G1  (Raw)", 12, 78, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
 69    )
 70    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
 71    label_caption2 = Widgets.Label(
 72        "ADC2 / G2  (Raw)", 12, 134, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14
 73    )
 74    label_value2 = Widgets.Label(
 75        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
 76    )
 77
 78    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
 79    stp2 = StampTimerPower2(i2c0)
 80    stp2.wake()
 81    adc1 = stp2.ADC(1)
 82    adc2 = stp2.ADC(2)
 83    last_time = time.ticks_ms()
 84
 85
 86def loop():
 87    global \
 88        label_title, \
 89        label_description, \
 90        label_note, \
 91        label_caption1, \
 92        label_value1, \
 93        label_caption2, \
 94        label_value2, \
 95        i2c0, \
 96        stp2, \
 97        last_time, \
 98        value1, \
 99        adc1, \
100        value2, \
101        adc2
102    M5.update()
103    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
104        last_time = time.ticks_ms()
105        value1 = stp2.read_adc_raw(1)
106        value2 = stp2.read_adc_raw(2)
107        label_value1.setText(str(str(value1)))
108        label_value2.setText(str(str(value2)))
109        print((str((str((str("ADC G1: ") + str(value1))) + str(" G2: "))) + str(value2)))
110
111
112if __name__ == "__main__":
113    try:
114        setup()
115        while True:
116            loop()
117    except (Exception, KeyboardInterrupt) as e:
118        try:
119            from utility import print_error_msg
120
121            print_error_msg(e)
122        except ImportError:
123            print("please update to latest firmware")

示例输出:

None

PWM 输出

PWM0 使用 G3,频率 1 kHz。A 将占空比降低 10 个百分点,B 置零,C 提高 10 个百分点,范围 0~100%。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from stamp import StampTimerPower2
  9from hardware import Pin
 10from hardware import I2C
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_caption1 = None
 17label_value1 = None
 18label_caption2 = None
 19label_value2 = None
 20label_key_a = None
 21label_action_a = None
 22label_key_b = None
 23label_action_b = None
 24label_key_c = None
 25label_action_c = None
 26i2c0 = None
 27stp2 = None
 28
 29
 30import math
 31
 32pwm = None
 33duty = None
 34FREQUENCY_HZ = None
 35last_time = None
 36
 37
 38# Describe this function...
 39def apply_duty():
 40    global \
 41        pwm, \
 42        duty, \
 43        FREQUENCY_HZ, \
 44        last_time, \
 45        label_title, \
 46        label_description, \
 47        label_caption1, \
 48        label_value1, \
 49        label_caption2, \
 50        label_value2, \
 51        label_key_a, \
 52        label_action_a, \
 53        label_key_b, \
 54        label_action_b, \
 55        label_key_c, \
 56        label_action_c, \
 57        i2c0, \
 58        stp2
 59    pwm = stp2.PWM(
 60        0, freq=FREQUENCY_HZ, duty_u16=math.floor((duty * 65535) / 100), duty_ns=None, invert=False
 61    )
 62
 63
 64def btna_was_clicked_event(state):
 65    global \
 66        label_title, \
 67        label_description, \
 68        label_caption1, \
 69        label_value1, \
 70        label_caption2, \
 71        label_value2, \
 72        label_key_a, \
 73        label_action_a, \
 74        label_key_b, \
 75        label_action_b, \
 76        label_key_c, \
 77        label_action_c, \
 78        i2c0, \
 79        stp2, \
 80        pwm, \
 81        duty, \
 82        FREQUENCY_HZ, \
 83        last_time
 84    if duty > 0:
 85        duty = duty + -10
 86    apply_duty()
 87
 88
 89def btnb_was_clicked_event(state):
 90    global \
 91        label_title, \
 92        label_description, \
 93        label_caption1, \
 94        label_value1, \
 95        label_caption2, \
 96        label_value2, \
 97        label_key_a, \
 98        label_action_a, \
 99        label_key_b, \
100        label_action_b, \
101        label_key_c, \
102        label_action_c, \
103        i2c0, \
104        stp2, \
105        pwm, \
106        duty, \
107        FREQUENCY_HZ, \
108        last_time
109    duty = 0
110    apply_duty()
111
112
113def btnc_was_clicked_event(state):
114    global \
115        label_title, \
116        label_description, \
117        label_caption1, \
118        label_value1, \
119        label_caption2, \
120        label_value2, \
121        label_key_a, \
122        label_action_a, \
123        label_key_b, \
124        label_action_b, \
125        label_key_c, \
126        label_action_c, \
127        i2c0, \
128        stp2, \
129        pwm, \
130        duty, \
131        FREQUENCY_HZ, \
132        last_time
133    if duty < 100:
134        duty = duty + 10
135    apply_duty()
136
137
138def setup():
139    global \
140        label_title, \
141        label_description, \
142        label_caption1, \
143        label_value1, \
144        label_caption2, \
145        label_value2, \
146        label_key_a, \
147        label_action_a, \
148        label_key_b, \
149        label_action_b, \
150        label_key_c, \
151        label_action_c, \
152        i2c0, \
153        stp2, \
154        pwm, \
155        duty, \
156        FREQUENCY_HZ, \
157        last_time
158
159    M5.begin()
160    Widgets.setRotation(0)
161    Widgets.fillScreen(0x000000)
162    label_title = Widgets.Label(
163        "PWM Output", 98, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
164    )
165    label_description = Widgets.Label(
166        "PWM0 / G3 -> oscilloscope or LED",
167        12,
168        38,
169        1.0,
170        0x94A3B8,
171        0x000000,
172        Widgets.FONTS.Montserrat14,
173    )
174    label_caption1 = Widgets.Label(
175        "PWM0 / G3 Duty", 12, 78, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
176    )
177    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
178    label_caption2 = Widgets.Label(
179        "Shared Frequency", 12, 134, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14
180    )
181    label_value2 = Widgets.Label(
182        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
183    )
184    label_key_a = Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
185    label_action_a = Widgets.Label(
186        "Duty -10", 36, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
187    )
188    label_key_b = Widgets.Label("B", 152, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
189    label_action_b = Widgets.Label(
190        "Zero", 139, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
191    )
192    label_key_c = Widgets.Label("C", 245, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
193    label_action_c = Widgets.Label(
194        "Duty +10", 216, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
195    )
196
197    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
198    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
199    BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
200
201    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
202    stp2 = StampTimerPower2(i2c0)
203    stp2.wake()
204    FREQUENCY_HZ = 1000
205    duty = 0
206    apply_duty()
207    last_time = time.ticks_ms()
208
209
210def loop():
211    global \
212        label_title, \
213        label_description, \
214        label_caption1, \
215        label_value1, \
216        label_caption2, \
217        label_value2, \
218        label_key_a, \
219        label_action_a, \
220        label_key_b, \
221        label_action_b, \
222        label_key_c, \
223        label_action_c, \
224        i2c0, \
225        stp2, \
226        pwm, \
227        duty, \
228        FREQUENCY_HZ, \
229        last_time
230    M5.update()
231    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
232        last_time = time.ticks_ms()
233        label_value1.setText(str((str(duty) + str("%"))))
234        label_value2.setText(str((str((stp2.get_pwm_frequency())) + str(" Hz"))))
235        print((str("PWM0 duty: ") + str(duty)))
236
237
238if __name__ == "__main__":
239    try:
240        setup()
241        while True:
242            loop()
243    except (Exception, KeyboardInterrupt) as e:
244        try:
245            from utility import print_error_msg
246
247            print_error_msg(e)
248        except ImportError:
249            print("please update to latest firmware")

示例输出:

None

NeoPixel 控制

LED 数据输入连接 G0,并共地。按键 A 切换红、绿、蓝、白色,B 降低 10 个百分点亮度,C 提高 10 个百分点亮度。示例默认控制 1 颗 LED,初始为红色、20% 亮度。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import Pin
  9from hardware import I2C
 10from stamp import StampTimerPower2
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_caption1 = None
 17label_value1 = None
 18label_caption2 = None
 19label_value2 = None
 20label_key_a = None
 21label_action_a = None
 22label_key_b = None
 23label_action_b = None
 24label_key_c = None
 25label_action_c = None
 26i2c0 = None
 27stp2 = None
 28
 29
 30import math
 31
 32intensity = None
 33color_index = None
 34brightness = None
 35color_name = None
 36led_index = None
 37last_time = None
 38red = None
 39LED_COUNT = None
 40green = None
 41blue = None
 42
 43
 44# Describe this function...
 45def update_leds():
 46    global \
 47        intensity, \
 48        color_index, \
 49        brightness, \
 50        color_name, \
 51        led_index, \
 52        last_time, \
 53        red, \
 54        LED_COUNT, \
 55        green, \
 56        blue, \
 57        label_title, \
 58        label_description, \
 59        label_caption1, \
 60        label_value1, \
 61        label_caption2, \
 62        label_value2, \
 63        label_key_a, \
 64        label_action_a, \
 65        label_key_b, \
 66        label_action_b, \
 67        label_key_c, \
 68        label_action_c, \
 69        i2c0, \
 70        stp2
 71    intensity = math.floor((255 * brightness) / 100)
 72    if color_index == 0:
 73        color_name = "Red"
 74        red = intensity
 75        green = 0
 76        blue = 0
 77    else:
 78        if color_index == 1:
 79            color_name = "Green"
 80            red = 0
 81            green = intensity
 82            blue = 0
 83        else:
 84            if color_index == 2:
 85                color_name = "Blue"
 86                red = 0
 87                green = 0
 88                blue = intensity
 89            else:
 90                color_name = "White"
 91                red = intensity
 92                green = intensity
 93                blue = intensity
 94    for led_index in range(LED_COUNT):
 95        stp2.set_neopixel_color(led_index, (red << 16) | (green << 8) | blue)
 96
 97    stp2.refresh_neopixels()
 98
 99
100def btna_was_clicked_event(state):
101    global \
102        label_title, \
103        label_description, \
104        label_caption1, \
105        label_value1, \
106        label_caption2, \
107        label_value2, \
108        label_key_a, \
109        label_action_a, \
110        label_key_b, \
111        label_action_b, \
112        label_key_c, \
113        label_action_c, \
114        i2c0, \
115        stp2, \
116        intensity, \
117        color_index, \
118        brightness, \
119        color_name, \
120        last_time, \
121        red, \
122        LED_COUNT, \
123        green, \
124        led_index, \
125        blue
126    color_index = (color_index + 1) % 4
127    update_leds()
128
129
130def btnb_was_clicked_event(state):
131    global \
132        label_title, \
133        label_description, \
134        label_caption1, \
135        label_value1, \
136        label_caption2, \
137        label_value2, \
138        label_key_a, \
139        label_action_a, \
140        label_key_b, \
141        label_action_b, \
142        label_key_c, \
143        label_action_c, \
144        i2c0, \
145        stp2, \
146        intensity, \
147        color_index, \
148        brightness, \
149        color_name, \
150        last_time, \
151        red, \
152        LED_COUNT, \
153        green, \
154        led_index, \
155        blue
156    if brightness > 0:
157        brightness = brightness + -10
158    update_leds()
159
160
161def btnc_was_clicked_event(state):
162    global \
163        label_title, \
164        label_description, \
165        label_caption1, \
166        label_value1, \
167        label_caption2, \
168        label_value2, \
169        label_key_a, \
170        label_action_a, \
171        label_key_b, \
172        label_action_b, \
173        label_key_c, \
174        label_action_c, \
175        i2c0, \
176        stp2, \
177        intensity, \
178        color_index, \
179        brightness, \
180        color_name, \
181        last_time, \
182        red, \
183        LED_COUNT, \
184        green, \
185        led_index, \
186        blue
187    if brightness < 100:
188        brightness = brightness + 10
189    update_leds()
190
191
192def setup():
193    global \
194        label_title, \
195        label_description, \
196        label_caption1, \
197        label_value1, \
198        label_caption2, \
199        label_value2, \
200        label_key_a, \
201        label_action_a, \
202        label_key_b, \
203        label_action_b, \
204        label_key_c, \
205        label_action_c, \
206        i2c0, \
207        stp2, \
208        intensity, \
209        color_index, \
210        brightness, \
211        color_name, \
212        last_time, \
213        red, \
214        LED_COUNT, \
215        green, \
216        led_index, \
217        blue
218
219    M5.begin()
220    Widgets.setRotation(0)
221    Widgets.fillScreen(0x000000)
222    label_title = Widgets.Label(
223        "Neopixel Output", 83, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
224    )
225    label_description = Widgets.Label(
226        "LED DIN -> G0; shared GND", 12, 38, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
227    )
228    label_caption1 = Widgets.Label(
229        "LED Color", 12, 78, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
230    )
231    label_value1 = Widgets.Label("--", 12, 96, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
232    label_caption2 = Widgets.Label(
233        "Brightness", 12, 134, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
234    )
235    label_value2 = Widgets.Label(
236        "--", 12, 152, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
237    )
238    label_key_a = Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
239    label_action_a = Widgets.Label(
240        "Color", 50, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
241    )
242    label_key_b = Widgets.Label("B", 155, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
243    label_action_b = Widgets.Label(
244        "Dim -10%", 125, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
245    )
246    label_key_c = Widgets.Label("C", 248, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
247    label_action_c = Widgets.Label(
248        "Up +10%", 222, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
249    )
250
251    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
252    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
253    BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
254
255    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
256    stp2 = StampTimerPower2(i2c0)
257    stp2.wake()
258    LED_COUNT = 1
259    color_index = 0
260    brightness = 20
261    stp2.set_pin_drive(0, StampTimerPower2.DRIVE_PUSH_PULL)
262    stp2.set_pin_function(0, StampTimerPower2.PIN_FUNCTION_OTHER)
263    stp2.set_neopixel_count(LED_COUNT)
264    update_leds()
265    last_time = time.ticks_ms()
266
267
268def loop():
269    global \
270        label_title, \
271        label_description, \
272        label_caption1, \
273        label_value1, \
274        label_caption2, \
275        label_value2, \
276        label_key_a, \
277        label_action_a, \
278        label_key_b, \
279        label_action_b, \
280        label_key_c, \
281        label_action_c, \
282        i2c0, \
283        stp2, \
284        intensity, \
285        color_index, \
286        brightness, \
287        color_name, \
288        last_time, \
289        red, \
290        LED_COUNT, \
291        green, \
292        led_index, \
293        blue
294    M5.update()
295    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
296        last_time = time.ticks_ms()
297        label_value1.setText(str(color_name))
298        label_value2.setText(str((str(brightness) + str("%"))))
299        print(
300            (str((str((str("LED: ") + str(color_name))) + str(" brightness: "))) + str(brightness))
301        )
302
303
304if __name__ == "__main__":
305    try:
306        setup()
307        while True:
308            loop()
309    except (Exception, KeyboardInterrupt) as e:
310        try:
311            from utility import print_error_msg
312
313            print_error_msg(e)
314        except ImportError:
315            print("please update to latest firmware")

示例输出:

None

电源控制

按键 A 切换 LDO 开关,按键 B 切换 DCDC 开关。屏幕和串口每 100 ms 显示从模块读取的使能状态。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from stamp import StampTimerPower2
  9from hardware import Pin
 10from hardware import I2C
 11import time
 12
 13
 14label_title = None
 15label_description = None
 16label_caption1 = None
 17label_value1 = None
 18label_caption2 = None
 19label_value2 = None
 20label_key_a = None
 21label_action_a = None
 22label_key_b = None
 23label_action_b = None
 24label_key_c = None
 25label_action_c = None
 26i2c0 = None
 27stp2 = None
 28
 29
 30last_time = None
 31
 32
 33def btna_was_clicked_event(state):
 34    global \
 35        label_title, \
 36        label_description, \
 37        label_caption1, \
 38        label_value1, \
 39        label_caption2, \
 40        label_value2, \
 41        label_key_a, \
 42        label_action_a, \
 43        label_key_b, \
 44        label_action_b, \
 45        label_key_c, \
 46        label_action_c, \
 47        i2c0, \
 48        stp2, \
 49        last_time
 50    if stp2.is_ldo_enabled():
 51        stp2.disable_ldo()
 52    else:
 53        stp2.enable_ldo()
 54
 55
 56def btnb_was_clicked_event(state):
 57    global \
 58        label_title, \
 59        label_description, \
 60        label_caption1, \
 61        label_value1, \
 62        label_caption2, \
 63        label_value2, \
 64        label_key_a, \
 65        label_action_a, \
 66        label_key_b, \
 67        label_action_b, \
 68        label_key_c, \
 69        label_action_c, \
 70        i2c0, \
 71        stp2, \
 72        last_time
 73    if stp2.is_dcdc_enabled():
 74        stp2.disable_dcdc()
 75    else:
 76        stp2.enable_dcdc()
 77
 78
 79def setup():
 80    global \
 81        label_title, \
 82        label_description, \
 83        label_caption1, \
 84        label_value1, \
 85        label_caption2, \
 86        label_value2, \
 87        label_key_a, \
 88        label_action_a, \
 89        label_key_b, \
 90        label_action_b, \
 91        label_key_c, \
 92        label_action_c, \
 93        i2c0, \
 94        stp2, \
 95        last_time
 96
 97    M5.begin()
 98    Widgets.setRotation(0)
 99    Widgets.fillScreen(0x000000)
100    label_title = Widgets.Label(
101        "Power Control", 94, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18
102    )
103    label_description = Widgets.Label(
104        "STP2 LDO / DCDC Toggle", 12, 38, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
105    )
106    label_caption1 = Widgets.Label(
107        "LDO Output", 12, 90, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
108    )
109    label_value1 = Widgets.Label(
110        "--", 140, 86, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
111    )
112    label_caption2 = Widgets.Label(
113        "DCDC Output", 12, 140, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14
114    )
115    label_value2 = Widgets.Label(
116        "--", 140, 136, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24
117    )
118    label_key_a = Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
119    label_action_a = Widgets.Label(
120        "LDO", 50, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
121    )
122    label_key_b = Widgets.Label("B", 155, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
123    label_action_b = Widgets.Label(
124        "DCDC", 140, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14
125    )
126    label_key_c = Widgets.Label("C", 248, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
127    label_action_c = Widgets.Label(
128        "--", 248, 215, 1.0, 0x475569, 0x000000, Widgets.FONTS.Montserrat14
129    )
130
131    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
132    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
133
134    i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
135    stp2 = StampTimerPower2(i2c0)
136    stp2.wake()
137    label_key_a.setColor(0x38BDF8, 0x000000)
138    label_action_a.setColor(0xE2E8F0, 0x000000)
139    label_key_b.setColor(0x38BDF8, 0x000000)
140    label_action_b.setColor(0xE2E8F0, 0x000000)
141    label_key_c.setColor(0x475569, 0x000000)
142    label_action_c.setColor(0x475569, 0x000000)
143    last_time = time.ticks_ms()
144
145
146def loop():
147    global \
148        label_title, \
149        label_description, \
150        label_caption1, \
151        label_value1, \
152        label_caption2, \
153        label_value2, \
154        label_key_a, \
155        label_action_a, \
156        label_key_b, \
157        label_action_b, \
158        label_key_c, \
159        label_action_c, \
160        i2c0, \
161        stp2, \
162        last_time
163    M5.update()
164    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
165        last_time = time.ticks_ms()
166        if stp2.is_ldo_enabled():
167            label_value1.setText(str("On"))
168        else:
169            label_value1.setText(str("Off"))
170        if stp2.is_dcdc_enabled():
171            label_value2.setText(str("On"))
172        else:
173            label_value2.setText(str("Off"))
174        print(
175            (
176                str((str((str("LDO: ") + str((stp2.is_ldo_enabled())))) + str(" DCDC: ")))
177                + str((stp2.is_dcdc_enabled()))
178            )
179        )
180
181
182if __name__ == "__main__":
183    try:
184        setup()
185        while True:
186            loop()
187    except (Exception, KeyboardInterrupt) as e:
188        try:
189            from utility import print_error_msg
190
191            print_error_msg(e)
192        except ImportError:
193            print("please update to latest firmware")

示例输出:

None

定时开机

按键 A 切换关机期间的 LDO 输出保持,默认关闭。按键 B 循环选择 5、10、15 秒开机延时,默认 5 秒。按键 C(Shutdown)应用设置、启动定时开机并立即关闭 STP2。倒计时期间锁定按键。

Basic 需独立供电,以便在 STP2 关机期间继续显示倒计时。

Python 示例在倒计时结束后读取唤醒来源,显示是否检测到定时唤醒。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import time
  6import M5
  7from M5 import BtnA, BtnB, BtnC, Widgets
  8from hardware import I2C, Pin
  9from stamp import StampTimerPower2
 10
 11stp2 = None
 12label_hold = None
 13label_on = None
 14label_status = None
 15ldo_hold = False
 16on_delay_s = 5
 17phase = 0
 18phase_start = 0
 19last_refresh = 0
 20
 21
 22def btna_was_clicked_event(state):
 23    global ldo_hold
 24    if phase == 0:
 25        ldo_hold = not ldo_hold
 26        label_hold.setText("On" if ldo_hold else "Off")
 27
 28
 29def btnb_was_clicked_event(state):
 30    global on_delay_s
 31    if phase == 0:
 32        on_delay_s = on_delay_s % 15 + 5
 33        label_on.setText(str(on_delay_s) + " s")
 34
 35
 36def btnc_was_clicked_event(state):
 37    global phase, phase_start
 38    if phase != 0:
 39        return
 40    if ldo_hold:
 41        stp2.enable_ldo_power_hold()
 42    else:
 43        stp2.disable_ldo_power_hold()
 44    stp2.clear_wake_source(StampTimerPower2.WAKE_SOURCE_TIMER)
 45    # Arm the power-on timer before shutting down STP2.
 46    stp2.set_timer(on_delay_s, StampTimerPower2.TIMER_ACTION_POWER_ON)
 47    stp2.power_off()
 48    phase_start = time.ticks_ms()
 49    phase = 1
 50    label_status.setText("Power on in " + str(on_delay_s) + " s")
 51    print("Shutdown requested; LDO hold:", ldo_hold, "; power on after", on_delay_s, "s")
 52
 53
 54def setup():
 55    global stp2, label_hold, label_on, label_status, last_refresh
 56    M5.begin()
 57    Widgets.setRotation(0)
 58    Widgets.fillScreen(0x000000)
 59    Widgets.Label("Power-on Timer", 80, 5, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat18)
 60    Widgets.Label(
 61        "Keep LDO output during shutdown",
 62        12,
 63        38,
 64        1.0,
 65        0x94A3B8,
 66        0x000000,
 67        Widgets.FONTS.Montserrat14,
 68    )
 69    Widgets.Label("LDO keep on", 12, 80, 1.0, 0xFBBF24, 0x000000, Widgets.FONTS.Montserrat14)
 70    label_hold = Widgets.Label("Off", 190, 76, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
 71    Widgets.Label("Power on after", 12, 125, 1.0, 0x4ADE80, 0x000000, Widgets.FONTS.Montserrat14)
 72    label_on = Widgets.Label("5 s", 190, 121, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.Montserrat24)
 73    label_status = Widgets.Label(
 74        "Ready", 12, 164, 1.0, 0x94A3B8, 0x000000, Widgets.FONTS.Montserrat14
 75    )
 76    Widgets.Label("A", 60, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
 77    Widgets.Label("LDO keep", 30, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14)
 78    Widgets.Label("B", 155, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
 79    Widgets.Label("On +5 s", 125, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14)
 80    Widgets.Label("C", 248, 195, 1.0, 0x38BDF8, 0x000000, Widgets.FONTS.Montserrat14)
 81    Widgets.Label("Shutdown", 217, 215, 1.0, 0xE2E8F0, 0x000000, Widgets.FONTS.Montserrat14)
 82    i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
 83    stp2 = StampTimerPower2(i2c)
 84    stp2.wake()
 85    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
 86    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
 87    BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
 88    last_refresh = time.ticks_ms()
 89
 90
 91def loop():
 92    global phase, phase_start, last_refresh
 93    M5.update()
 94    now = time.ticks_ms()
 95    if time.ticks_diff(now, last_refresh) < 100:
 96        return
 97    last_refresh = now
 98    if phase == 1:
 99        # Keep I2C idle while STP2 is off; BASIC stays independently powered.
100        elapsed = time.ticks_diff(now, phase_start)
101        remaining = max(0, on_delay_s * 1000 - elapsed)
102        label_status.setText("Power on in " + str((remaining + 999) // 1000) + " s")
103        if elapsed >= on_delay_s * 1000 + 500:
104            stp2.wake()
105            source = stp2.get_wake_source()
106            if source & StampTimerPower2.WAKE_SOURCE_TIMER:
107                label_status.setText("Timer wake confirmed")
108            else:
109                label_status.setText("Timer wake not detected")
110            print("Wake source:", source)
111            phase = 0
112
113
114if __name__ == "__main__":
115    setup()
116    while True:
117        loop()

示例输出:

None

API

StampTimerPower2

构造函数

class stamp.StampTimerPower2(i2c, *, pm1_int_gpio=-1, mcu_int_gpio=-1)

在固定 I2C 地址 0x6E 创建模块对象,I2C 由应用管理。两个 IRQ GPIO 必须同时指定,或同时保留为 -1 。

参数:
  • i2c (I2C) – 应用创建并管理的 I2C 总线。

  • pm1_int_gpio (int) – 模块 IRQ 输出 GPIO,范围 0~4;-1 表示不启用。 默认值:-1。 仅限关键字参数。

  • mcu_int_gpio (int) – Basic IRQ 输入 GPIO,本示例接线使用 26;不用 IRQ 时为 -1。 默认值:-1。 仅限关键字参数。

抛出:
  • ValueError – GPIO 参数无效,或 IRQ 引脚未成对配置。

  • OSError – I2C 通信失败。

  • RuntimeError – 主机不支持所需的 IRQ 功能。

UiFlow2 图形代码块:

init.png

MicroPython 代码块:

import M5
from hardware import I2C, Pin
from stamp import StampTimerPower2

M5.begin()
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
stp2 = StampTimerPower2(i2c)
# For INT callbacks only: connect STP2 G0 to Basic G26.
# stp2 = StampTimerPower2(i2c, pm1_int_gpio=0, mcu_int_gpio=26)

常量

常量

值

含义

StampTimerPower2.PIN_FUNCTION_GPIO

0

普通 GPIO 功能。

StampTimerPower2.PIN_FUNCTION_IRQ

1

低有效 IRQ 输出功能。

StampTimerPower2.PIN_FUNCTION_WAKE

2

GPIO 关机唤醒输入功能。

StampTimerPower2.PIN_FUNCTION_OTHER

3

ADC、PWM 或 NeoPixel 等复用功能。

StampTimerPower2.GPIO_MODE_IN

0

数字输入模式。

StampTimerPower2.GPIO_MODE_OUT

1

推挽输出模式。

StampTimerPower2.GPIO_MODE_OPEN_DRAIN

2

开漏输出模式。

StampTimerPower2.GPIO_PULL_NONE

0

无内部上下拉。

StampTimerPower2.GPIO_PULL_UP

1

启用内部上拉。

StampTimerPower2.GPIO_PULL_DOWN

2

启用内部下拉。

StampTimerPower2.DRIVE_PUSH_PULL

0

推挽驱动。

StampTimerPower2.DRIVE_OPEN_DRAIN

1

开漏驱动。

StampTimerPower2.POWER_SOURCE_NONE

0

未检测到电源来源标志。

StampTimerPower2.POWER_SOURCE_5VIN

1

5VIN / USB 输入有效。

StampTimerPower2.POWER_SOURCE_5VINOUT

2

5VINOUT 双向端口输入有效。

StampTimerPower2.POWER_SOURCE_BATTERY

4

电池输入有效。

StampTimerPower2.WAKE_SOURCE_TIMER

1

定时器唤醒。

StampTimerPower2.WAKE_SOURCE_VIN

2

5VIN 插入唤醒。

StampTimerPower2.WAKE_SOURCE_POWER_BUTTON

4

电源键唤醒。

StampTimerPower2.WAKE_SOURCE_RESET_BUTTON

8

复位键唤醒。

StampTimerPower2.WAKE_SOURCE_COMMAND_RESET

16

命令复位唤醒。

StampTimerPower2.WAKE_SOURCE_GPIO

32

GPIO 输入唤醒。

StampTimerPower2.WAKE_SOURCE_5V_INOUT

64

5VINOUT 事件唤醒。

StampTimerPower2.BUTTON_TIMING_CLICK

0

单击判定时间。

StampTimerPower2.BUTTON_TIMING_DOUBLE

1

双击判定时间。

StampTimerPower2.BUTTON_TIMING_LONG

2

长按判定时间。

StampTimerPower2.TIMER_ACTION_STOP

0

定时到期后停止,不执行其它动作。

StampTimerPower2.TIMER_ACTION_FLAG

1

定时到期后产生事件标志。

StampTimerPower2.TIMER_ACTION_REBOOT

2

定时到期后重启。

StampTimerPower2.TIMER_ACTION_POWER_ON

3

定时到期后开机。

StampTimerPower2.TIMER_ACTION_POWER_OFF

4

定时到期后关机。

StampTimerPower2.IRQ_GROUP_GPIO

0

GPIO 中断状态组

StampTimerPower2.IRQ_GROUP_SYSTEM

1

系统中断状态组

StampTimerPower2.IRQ_GROUP_BUTTON

2

按钮中断状态组

StampTimerPower2.WAKE_EDGE_FALLING

0

下降沿唤醒

StampTimerPower2.WAKE_EDGE_RISING

1

上升沿唤醒

使用按位或组合 EVENT 标志并传入 add_event_cb()。该命名空间直接引用现有驱动常量,不复制数值。

常量

值

含义

StampTimerPower2.EVENT.GPIO0_CHANGE

0x1

G0 输入变化

StampTimerPower2.EVENT.GPIO1_CHANGE

0x2

G1 输入变化

StampTimerPower2.EVENT.GPIO2_CHANGE

0x4

G2 输入变化

StampTimerPower2.EVENT.GPIO3_CHANGE

0x8

G3 输入变化

StampTimerPower2.EVENT.GPIO4_CHANGE

0x10

G4 输入变化

StampTimerPower2.EVENT.VIN_INSERT

0x20

5VIN 接入

StampTimerPower2.EVENT.VIN_REMOVE

0x40

5VIN 移除

StampTimerPower2.EVENT.VINOUT_INSERT

0x80

5VINOUT 接入

StampTimerPower2.EVENT.VINOUT_REMOVE

0x100

5VINOUT 移除

StampTimerPower2.EVENT.BATTERY_INSERT

0x200

电池接入

StampTimerPower2.EVENT.BATTERY_REMOVE

0x400

电池移除

StampTimerPower2.EVENT.BUTTON_CLICK

0x800

按钮单击

StampTimerPower2.EVENT.WAKE

0x1000

wake

StampTimerPower2.EVENT.BUTTON_DOUBLE

0x2000

按钮双击

StampTimerPower2.EVENT.ALL

0x3fff

all

方法

以下方法均通过 StampTimerPower2 实例调用。寄存器访问可能抛出 OSError;is_connected() 将通信失败返回为 False。未列出返回值的设置和动作方法返回 None。参数按当前实现进行转换和校验,校验错误可能为 ValueError 或 TypeError。

add_event_cb(callback, filter, *, user_data=None)

注册事件监听者。IRQ 输出和 MCU 下降沿输入在构造 StampTimerPower2 对象时初始化。驱动会合并所有监听者的过滤器并自动配置 IRQ mask;GPIO 事件对应的引脚会自动切换为普通输入,但不会修改上下拉。最后一个相关监听者注销后恢复引脚原配置。硬中断只负责调度,I2C 读取和用户回调在调度上下文执行。

参数:
  • callback (callable) – 接收一个 Event 对象的回调函数。

  • filter (int) – 一个或多个按位或组合的 StampTimerPower2.EVENT.* 标志。

  • user_data (object) – 随事件原样提供给回调的数据。 默认值:None。 仅限关键字参数。

返回:

回调注册 handle,可传给 remove_event_cb() 。

返回类型:

int

抛出:

回调在 MicroPython 调度上下文执行。每个触发位产生一个含 target、code、user_data 的 Event,code 为单个 EVENT 标志。未配置 IRQ 引脚对时调用会抛出 RuntimeError;使用返回的句柄注销回调。

UiFlow2 图形代码块:

add_event_cb.png

MicroPython 代码块:

# Requires an stp2 instance configured for INT callbacks.
def on_event(event):
    print(event.code)

handle = stp2.add_event_cb(on_event, StampTimerPower2.EVENT.GPIO4_CHANGE)
# Keep the Basic main loop running; when finished:
# stp2.remove_event_cb(handle)
# stp2.deinit()
remove_event_cb(handle_or_callback)

按注册 handle 精确移除一个监听者,或按回调对象移除该对象的全部注册。

参数:

handle_or_callback (int / callable) – add_event_cb() 返回的 handle,或注册时使用的回调对象。

返回:

实际移除的注册数量。

返回类型:

int

抛出:

TypeError – 参数类型无效。

UiFlow2 图形代码块:

remove_event_cb.png

MicroPython 代码块:

# handle was returned by add_event_cb().
removed = stp2.remove_event_cb(handle)
deinit()

注销驱动创建的主控 IRQ,不关闭由应用传入的 I2C 总线。

此操作可重复调用,普通寄存器访问仍可使用;已配置 IRQ 引脚时,add_event_cb() 可重新创建中断注册。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

deinit.png

MicroPython 代码块:

stp2.deinit()
wake()

唤醒 StampTimerPower2,并等待通信恢复。方法通过 I2C 空事务触发唤醒;芯片可能 NACK 第一笔事务,该错误会被忽略。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

wake.png

MicroPython 代码块:

stp2.wake()
is_connected()

检查配置地址上的 StampTimerPower2 是否响应 I2C 访问。

返回:

设备响应时为 True ,否则为 False 。

返回类型:

bool

UiFlow2 图形代码块:

is_connected.png

MicroPython 代码块:

value = stp2.is_connected()
print(value)
get_device_info()

一次读取设备 ID、型号、硬件版本和固件版本。

返回:

(device_id, device_model, hw_version, firmware_version) 。

返回类型:

tuple

UiFlow2 图形代码块:

get_device_info.png

MicroPython 代码块:

value = stp2.get_device_info()
print(value)
get_uid()

读取长度为 12 字节的芯片唯一标识。

返回:

长度为 12 字节的设备 UID。

返回类型:

bytes

UiFlow2 图形代码块:

get_uid.png

MicroPython 代码块:

value = stp2.get_uid()
print(value)
get_device_id()

读取设备 ID。

返回:

设备 ID,范围 0~255 。

返回类型:

int

UiFlow2 图形代码块:

get_device_id.png

MicroPython 代码块:

value = stp2.get_device_id()
print(value)
get_device_model()

读取设备型号。

返回:

设备型号,范围 0~255 。

返回类型:

int

UiFlow2 图形代码块:

get_device_model.png

MicroPython 代码块:

value = stp2.get_device_model()
print(value)
get_hardware_version()

读取硬件版本。

返回:

硬件版本,范围 0~255 。

返回类型:

int

UiFlow2 图形代码块:

get_hardware_version.png

MicroPython 代码块:

value = stp2.get_hardware_version()
print(value)
get_firmware_version()

读取固件版本。

返回:

固件版本,范围 0~255 。

返回类型:

int

UiFlow2 图形代码块:

get_firmware_version.png

MicroPython 代码块:

value = stp2.get_firmware_version()
print(value)
Pin(gpio, mode=None, pull=-1, *, value=None)

创建与常用 MicroPython Pin 用法一致的 StampTimerPower2 GPIO 对象。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • mode (int / None) – 使用 Pin.IN 、 Pin.OUT 或 Pin.OPEN_DRAIN ; None 保持当前模式。 默认值:None。

  • pull (int / None) – 使用 Pin.PULL_UP 、 Pin.PULL_DOWN 或 None ; -1 保持当前配置。 默认值:-1。

  • value (int / bool / None) – 初始输出电平,支持 0 、 1 、 False 或 True ; None 不写输出。 默认值:None。 仅限关键字参数。

返回:

StampTimerPower2 GPIO 对象。

返回类型:

Pin

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

Pin.png

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(4)
# Use the returned object, then release it.
pin.deinit()
ADC(channel)

创建 ADC 对象。ADC1 固定使用 GPIO1,ADC2 固定使用 GPIO2。

参数:

channel (int) – ADC 通道编号,仅支持 1 (GPIO1)或 2 (GPIO2)。

返回:

ADC 对象。

返回类型:

ADC

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

ADC.png

MicroPython 代码块:

adc = stp2.ADC(1)
# Use the returned object, then release it.
adc.deinit()
PWM(channel, *, freq=None, duty_u16=0, duty_ns=None, invert=False)

创建 PWM 对象。PWM0 固定使用 GPIO3,PWM1 固定使用 GPIO4,两个通道共用频率。

参数:
  • channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

  • freq (int / None) – 共享频率范围为 1~65535 Hz; None 保持当前频率,寄存器为零时使用 500 Hz。 默认值:None。 仅限关键字参数。

  • duty_u16 (int) – 16 位占空比,范围 0~65535 。 默认值:0。 仅限关键字参数。

  • duty_ns (int / None) – 高电平脉宽,单位 ns; None 表示不设置。 默认值:None。 仅限关键字参数。

  • invert (bool) – 是否反相输出极性。 默认值:False。 仅限关键字参数。

返回:

PWM 对象。

返回类型:

PWM

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

PWM.png

MicroPython 代码块:

pwm = stp2.PWM(0)
# Use the returned object, then release it.
pwm.deinit()
NeoPixel(gpio, count, *, bpp=3, timing=1)

创建 NeoPixel 缓冲对象。StampTimerPower2 仅支持 GPIO0 和 RGB 三通道颜色。

参数:
  • gpio (int) – NeoPixel 输出引脚,仅支持 StampTimerPower2 GPIO0。

  • count (int) – 缓冲区中的 LED 数量,范围 1~32 。

  • bpp (int) – 每像素字节数;StampTimerPower2 仅支持 RGB,即 3 。 默认值:3。 仅限关键字参数。

  • timing (int) – NeoPixel 协议时序选择值,可用 0 或 1 ;两者均由 StampTimerPower2 使用固定硬件时序输出。 默认值:1。 仅限关键字参数。

返回:

NeoPixel 缓冲对象。

返回类型:

NeoPixel

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

NeoPixel.png

MicroPython 代码块:

pixels = stp2.NeoPixel(0, 1)
# Use the returned object, then release it.
pixels.deinit()
set_pin_function(gpio, function)

设置指定 GPIO 的复用功能。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • function (int) – GPIO 复用功能,使用 PIN_FUNCTION_* 常量。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_function.png

MicroPython 代码块:

stp2.set_pin_function(4, StampTimerPower2.PIN_FUNCTION_GPIO)
set_pin_mode(gpio, mode)

设置 GPIO 输入、推挽输出或开漏输出模式。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • mode (int) – 使用 GPIO_MODE_IN 、 GPIO_MODE_OUT 或 GPIO_MODE_OPEN_DRAIN 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_mode.png

MicroPython 代码块:

stp2.set_pin_mode(4, StampTimerPower2.GPIO_MODE_IN)
set_pin_pull(gpio, pull)

设置 GPIO 内部上拉、下拉或无上下拉。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • pull (int) – 使用 GPIO_PULL_NONE 、 GPIO_PULL_UP 或 GPIO_PULL_DOWN 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_pull.png

MicroPython 代码块:

stp2.set_pin_pull(4, StampTimerPower2.GPIO_PULL_UP)
set_pin_drive(gpio, drive)

设置 GPIO 推挽或开漏驱动方式。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • drive (int) – 使用 DRIVE_PUSH_PULL 或 DRIVE_OPEN_DRAIN 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_drive.png

MicroPython 代码块:

stp2.set_pin_drive(4, StampTimerPower2.DRIVE_PUSH_PULL)
set_pin_value(gpio, value)

设置 GPIO 输出电平。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • value (int / bool) – 输出电平,支持 0 、 1 、 False 或 True 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_value.png

MicroPython 代码块:

stp2.set_pin_value(4, 1)
read_pin(gpio)

读取 GPIO 当前输入电平。

参数:

gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

返回:

GPIO 电平, 0 或 1 。

返回类型:

int

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

read_pin.png

MicroPython 代码块:

value = stp2.read_pin(4)
print(value)
get_power_source()

读取当前有效电源来源位图,可同时包含多个 POWER_SOURCE_* 标志。

返回:

由 POWER_SOURCE_* 组成的电源来源位图。

返回类型:

int

UiFlow2 图形代码块:

get_power_source.png

MicroPython 代码块:

value = stp2.get_power_source()
print(value)
get_power_config()

读取充电、DCDC、LDO、BOOST 和 LED_EN 等电源配置位。

返回:

电源配置寄存器值,范围 0~255 。

返回类型:

int

UiFlow2 图形代码块:

get_power_config.png

MicroPython 代码块:

value = stp2.get_power_config()
print(value)
is_charging_enabled()

读取充电使能位。该值表示充电功能是否启用,不表示当前是否存在充电电流。

返回:

充电使能时为 True 。

返回类型:

bool

UiFlow2 图形代码块:

is_charging_enabled.png

MicroPython 代码块:

value = stp2.is_charging_enabled()
print(value)
is_dcdc_enabled()

读取 3.3 V DCDC 电源轨使能状态。

返回:

DCDC 电源轨启用时为 True 。

返回类型:

bool

UiFlow2 图形代码块:

is_dcdc_enabled.png

MicroPython 代码块:

value = stp2.is_dcdc_enabled()
print(value)
is_ldo_enabled()

读取 3.3 V LDO 电源轨使能状态。

返回:

LDO 电源轨启用时为 True 。

返回类型:

bool

UiFlow2 图形代码块:

is_ldo_enabled.png

MicroPython 代码块:

value = stp2.is_ldo_enabled()
print(value)
is_boost_enabled()

读取 BOOST / 5VINOUT 电源轨使能状态。

返回:

BOOST / 5VINOUT 电源轨启用时为 True 。

返回类型:

bool

UiFlow2 图形代码块:

is_boost_enabled.png

MicroPython 代码块:

value = stp2.is_boost_enabled()
print(value)
enable_charging()

启用电池充电功能。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_charging.png

MicroPython 代码块:

stp2.enable_charging()
disable_charging()

关闭电池充电功能。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_charging.png

MicroPython 代码块:

stp2.disable_charging()
enable_dcdc()

启用 3.3 V DCDC 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_dcdc.png

MicroPython 代码块:

stp2.enable_dcdc()
disable_dcdc()

关闭 3.3 V DCDC 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_dcdc.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.disable_dcdc()
enable_ldo()

启用 3.3 V LDO 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_ldo.png

MicroPython 代码块:

stp2.enable_ldo()
disable_ldo()

关闭 3.3 V LDO 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_ldo.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.disable_ldo()
enable_boost()

启用 BOOST / 5VINOUT 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_boost.png

MicroPython 代码块:

stp2.enable_boost()
disable_boost()

关闭 BOOST / 5VINOUT 电源轨。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_boost.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.disable_boost()
set_led_enable_level(level)

设置 LED_EN 的默认输出电平。

参数:

level (int / bool) – 目标电平,使用 False / True 或 0 / 1 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_led_enable_level.png

MicroPython 代码块:

stp2.set_led_enable_level(True)
set_battery_low_voltage_threshold_mv(voltage_mv)

设置电池低压保护阈值。

参数:

voltage_mv (int) – 电池低压保护阈值,范围 2000~3991 mV。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_battery_low_voltage_threshold_mv.png

MicroPython 代码块:

stp2.set_battery_low_voltage_threshold_mv(3000)
get_battery_low_voltage_threshold_mv()

读取电池低压保护阈值。

返回:

电池低压保护阈值,单位 mV。

返回类型:

int

UiFlow2 图形代码块:

get_battery_low_voltage_threshold_mv.png

MicroPython 代码块:

value = stp2.get_battery_low_voltage_threshold_mv()
print(value)
enable_gpio_power_hold(gpio)

使指定 GPIO 在关机后保持输出状态。

参数:

gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_gpio_power_hold.png

MicroPython 代码块:

stp2.enable_gpio_power_hold(4)
disable_gpio_power_hold(gpio)

取消指定 GPIO 的关机保持。

参数:

gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_gpio_power_hold.png

MicroPython 代码块:

stp2.disable_gpio_power_hold(4)
enable_ldo_power_hold()

使 LDO 在关机后保持供电。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_ldo_power_hold.png

MicroPython 代码块:

stp2.enable_ldo_power_hold()
disable_ldo_power_hold()

取消 LDO 的关机保持。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_ldo_power_hold.png

MicroPython 代码块:

stp2.disable_ldo_power_hold()
enable_boost_power_hold()

使 BOOST 在关机后保持供电。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_boost_power_hold.png

MicroPython 代码块:

stp2.enable_boost_power_hold()
disable_boost_power_hold()

取消 BOOST 的关机保持。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_boost_power_hold.png

MicroPython 代码块:

stp2.disable_boost_power_hold()
read_adc_raw(channel)

读取指定 ADC 通道的 12 位原始值。通道 6 是内部温度通道。

参数:

channel (int) – ADC 通道编号,支持 1 、 2 或内部温度通道 6 。

返回:

12 位 ADC 原始值,范围 0~4095 。

返回类型:

int

抛出:

UiFlow2 图形代码块:

read_adc_raw.png

MicroPython 代码块:

value = stp2.read_adc_raw(1)
print(value)
read_adc_mv(channel)

读取外部 ADC 通道电压,仅支持 ADC1 和 ADC2。输入不得超过 3.3 V。

参数:

channel (int) – 外部 ADC 通道编号,仅支持 1 (GPIO1)或 2 (GPIO2)。

返回:

外部 ADC 输入电压,单位 mV。

返回类型:

int

抛出:

UiFlow2 图形代码块:

read_adc_mv.png

MicroPython 代码块:

value = stp2.read_adc_mv(1)
print(value)
read_temperature_raw()

读取芯片内部温度传感器的 12 位原始值。

返回:

内部温度通道原始值,范围 0~4095 。

返回类型:

int

抛出:

OSError – 操作失败。

UiFlow2 图形代码块:

read_temperature_raw.png

MicroPython 代码块:

value = stp2.read_temperature_raw()
print(value)
read_button()

读取电源按键当前电平状态。

返回:

按键松开为 0 ,按下为 1 。

返回类型:

int

UiFlow2 图形代码块:

read_button.png

MicroPython 代码块:

value = stp2.read_button()
print(value)
read_button_event()

读取粘滞按键事件标志;硬件会在读取后清除该标志。

返回:

检测到按键事件时为 True 。

返回类型:

bool

UiFlow2 图形代码块:

read_button_event.png

MicroPython 代码块:

value = stp2.read_button_event()
print(value)
set_button_timing(event, duration_ms)

设置单击、双击或长按的判定时间。

参数:
  • event (int) – BUTTON_TIMING_CLICK 、 BUTTON_TIMING_DOUBLE 或 BUTTON_TIMING_LONG 。

  • duration_ms (int) – 按钮时间,单位 ms。单击/双击可选 125、250、500、1000;长按可选 1000、2000、3000、4000。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_button_timing.png

MicroPython 代码块:

stp2.set_button_timing(StampTimerPower2.BUTTON_TIMING_CLICK, 250)
read_reference_voltage_mv()

读取芯片当前参考电压。

返回:

参考电压,单位 mV。

返回类型:

int

UiFlow2 图形代码块:

read_reference_voltage_mv.png

MicroPython 代码块:

value = stp2.read_reference_voltage_mv()
print(value)
read_battery_voltage_mv()

读取电池电压。

返回:

电池电压,单位 mV。

返回类型:

int

UiFlow2 图形代码块:

read_battery_voltage_mv.png

MicroPython 代码块:

value = stp2.read_battery_voltage_mv()
print(value)
read_vin_voltage_mv()

读取外接模块 5VIN 输入电压。

返回:

5VIN 电压,单位 mV。

返回类型:

int

UiFlow2 图形代码块:

read_vin_voltage_mv.png

MicroPython 代码块:

value = stp2.read_vin_voltage_mv()
print(value)
read_5v_inout_voltage_mv()

读取外接模块 5VINOUT 端口电压。

返回:

5VINOUT 电压,单位 mV。

返回类型:

int

UiFlow2 图形代码块:

read_5v_inout_voltage_mv.png

MicroPython 代码块:

value = stp2.read_5v_inout_voltage_mv()
print(value)
get_wake_source(*, clear=False)

读取唤醒来源位图,并可选择清除状态。

参数:

clear (bool) – 是否清除本次读取到的唤醒来源位。 默认值:False。 仅限关键字参数。

返回:

由 WAKE_SOURCE_* 组成的唤醒来源位图。

返回类型:

int

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

get_wake_source.png

MicroPython 代码块:

value = stp2.get_wake_source()
print(value)
clear_wake_source(mask=None)

清除全部或指定唤醒来源状态位。

参数:

mask (int / None) – 要操作的状态位掩码。 默认值:None。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

clear_wake_source.png

MicroPython 代码块:

stp2.clear_wake_source()
set_pwm_frequency(frequency)

设置 PWM0 和 PWM1 共用的输出频率。

参数:

frequency (int) – 共享 PWM 频率,范围 1~65535 Hz。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pwm_frequency.png

MicroPython 代码块:

stp2.set_pwm_frequency(1000)
get_pwm_frequency()

读取 PWM0 和 PWM1 共用的输出频率。

返回:

共享 PWM 频率,单位 Hz。

返回类型:

int

UiFlow2 图形代码块:

get_pwm_frequency.png

MicroPython 代码块:

value = stp2.get_pwm_frequency()
print(value)
set_pwm_duty_percent(channel, percent, *, invert=False)

设置指定通道的百分比占空比和极性,不改变通道使能状态。

参数:
  • channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

  • percent (int) – 百分比占空比,范围 0~100 。

  • invert (bool) – 是否反相输出极性。 默认值:False。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pwm_duty_percent.png

MicroPython 代码块:

stp2.set_pwm_duty_percent(0, 50)
set_pwm_duty_u12(channel, duty_u12, *, invert=False)

设置指定通道的 12 位占空比和极性,不改变通道使能状态。

参数:
  • channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

  • duty_u12 (int) – 12 位占空比,范围 0~4095 。

  • invert (bool) – 是否反相输出极性。 默认值:False。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pwm_duty_u12.png

MicroPython 代码块:

stp2.set_pwm_duty_u12(0, 2048)
enable_pwm(channel)

启用指定 PWM 通道。

参数:

channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_pwm.png

MicroPython 代码块:

stp2.enable_pwm(0)
disable_pwm(channel)

关闭指定 PWM 通道。

参数:

channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_pwm.png

MicroPython 代码块:

stp2.disable_pwm(0)
get_pwm_duty_percent(channel)

读取百分比占空比。

参数:

channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

返回:

百分比占空比,范围 0~100 。

返回类型:

int

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

get_pwm_duty_percent.png

MicroPython 代码块:

value = stp2.get_pwm_duty_percent(0)
print(value)
get_pwm_duty_u12(channel)

读取 12 位占空比。

参数:

channel (int) – PWM 通道编号,仅支持 0 (GPIO3)或 1 (GPIO4)。

返回:

12 位占空比,范围 0~4095 。

返回类型:

int

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

get_pwm_duty_u12.png

MicroPython 代码块:

value = stp2.get_pwm_duty_u12(0)
print(value)
set_neopixel_count(count)

设置有效 NeoPixel 数量。

参数:

count (int) – 有效 LED 数量,范围 0~32 ; 0 表示关闭输出。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_neopixel_count.png

MicroPython 代码块:

stp2.set_neopixel_count(1)
set_neopixel_color(index, color)

设置 LED RAM 中单颗 LED 的颜色。

参数:
  • index (int) – LED 索引,范围 0~31 。

  • color (int / tuple) – 颜色,可使用 0xRRGGBB 或 (r, g, b) 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_neopixel_color.png

MicroPython 代码块:

stp2.set_neopixel_color(0, (32, 0, 0))
write_neopixels(colors, *, auto_refresh=True)

批量写入多颗 LED 的颜色,并可选择立即刷新。

参数:
  • colors (iterable) – RGB 颜色序列,最多 32 项。

  • auto_refresh (bool) – 写入后是否立即刷新 LED 输出。 默认值:True。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

write_neopixels.png

MicroPython 代码块:

stp2.write_neopixels([(32, 0, 0)])
refresh_neopixels()

把 LED RAM 的内容刷新到 NeoPixel 输出。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

refresh_neopixels.png

MicroPython 代码块:

stp2.refresh_neopixels()
clear_neopixels(*, auto_refresh=True)

清空当前有效 LED 的颜色,并可选择立即刷新。

参数:

auto_refresh (bool) – 写入后是否立即刷新 LED 输出。 默认值:True。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

clear_neopixels.png

MicroPython 代码块:

stp2.clear_neopixels()
enable_neopixels()

启用 NeoPixel 输出,不改写 LED RAM。disable_neopixels() 会清除保存的灯珠数量,随后启用默认使用一颗;需要其他数量时调用 set_neopixel_count()。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_neopixels.png

MicroPython 代码块:

stp2.enable_neopixels()
disable_neopixels()

关闭 NeoPixel 输出,不改写 LED RAM。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_neopixels.png

MicroPython 代码块:

stp2.disable_neopixels()
set_aw8737a_pulse(gpio, pulses, *, refresh=True)

配置指定 GPIO 输出 AW8737A 控制脉冲。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • pulses (int) – AW8737A 控制脉冲数,范围 0~3 。

  • refresh (bool) – 配置后是否立即执行脉冲输出。 默认值:True。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_aw8737a_pulse.png

MicroPython 代码块:

stp2.set_aw8737a_pulse(4, 1)
refresh_aw8737a()

执行最近一次保存的 AW8737A 脉冲配置。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

refresh_aw8737a.png

MicroPython 代码块:

stp2.refresh_aw8737a()
set_aw8737a_mode(gpio, mode, *, refresh=True)

按 AW8737A 模式编号配置控制脉冲。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • mode (int) – 工作模式;具体常量取决于对象接口或基础 GPIO 接口。

  • refresh (bool) – 配置后是否立即执行脉冲输出。 默认值:True。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_aw8737a_mode.png

MicroPython 代码块:

stp2.set_aw8737a_mode(4, 1)
get_irq_status(group, *, clear=False)

读取一个 IRQ 状态组,并可清除本次读到的状态。

参数:
  • group (int / str) – IRQ_GROUP_GPIO 、 IRQ_GROUP_SYSTEM 、 IRQ_GROUP_BUTTON ,或对应字符串。

  • clear (bool) – 是否清除本次读取到的状态位。 默认值:False。 仅限关键字参数。

返回:

指定 IRQ 组的状态位图。

返回类型:

int

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

get_irq_status.png

MicroPython 代码块:

value = stp2.get_irq_status(StampTimerPower2.IRQ_GROUP_GPIO)
print(value)
clear_irq(group, mask=None)

清除一个 IRQ 状态组的全部或指定状态位。

参数:
  • group (int / str) – IRQ_GROUP_GPIO 、 IRQ_GROUP_SYSTEM 、 IRQ_GROUP_BUTTON ,或对应字符串。

  • mask (int / None) – 要操作的状态位掩码。 默认值:None。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

clear_irq.png

MicroPython 代码块:

stp2.clear_irq(StampTimerPower2.IRQ_GROUP_GPIO)
disable_irq_events(group, events)

屏蔽指定 IRQ 状态位。

参数:
  • group (int / str) – IRQ_GROUP_GPIO 、 IRQ_GROUP_SYSTEM 、 IRQ_GROUP_BUTTON ,或对应字符串。

  • events (int) – 要禁用的组内事件位掩码。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_irq_events.png

MicroPython 代码块:

stp2.disable_irq_events(StampTimerPower2.IRQ_GROUP_GPIO, 0x10)
enable_irq_events(group, events)

解除指定 IRQ 状态位的屏蔽。

参数:
  • group (int / str) – IRQ_GROUP_GPIO 、 IRQ_GROUP_SYSTEM 、 IRQ_GROUP_BUTTON ,或对应字符串。

  • events (int) – 要启用的组内事件位掩码。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_irq_events.png

MicroPython 代码块:

stp2.enable_irq_events(StampTimerPower2.IRQ_GROUP_GPIO, 0x10)
enable_pin_wakeup(gpio)

启用指定 GPIO 的关机唤醒功能。

参数:

gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_pin_wakeup.png

MicroPython 代码块:

stp2.enable_pin_wakeup(4)
disable_pin_wakeup(gpio)

关闭指定 GPIO 的关机唤醒功能。

参数:

gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_pin_wakeup.png

MicroPython 代码块:

stp2.disable_pin_wakeup(4)
set_pin_wakeup_edge(gpio, edge)

设置指定 GPIO 的唤醒触发边沿。

参数:
  • gpio (int) – StampTimerPower2 GPIO 编号,范围 0~4 。

  • edge (int) – WAKE_EDGE_FALLING 或 WAKE_EDGE_RISING 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_pin_wakeup_edge.png

MicroPython 代码块:

stp2.set_pin_wakeup_edge(4, StampTimerPower2.WAKE_EDGE_FALLING)
enable_watchdog(timeout_s)

启用看门狗并设置超时时间。

参数:

timeout_s (int) – 看门狗超时时间,范围 1~255 秒。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_watchdog.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.enable_watchdog(10)
disable_watchdog()

关闭看门狗。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_watchdog.png

MicroPython 代码块:

stp2.disable_watchdog()
feed_watchdog()

重载看门狗计数。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

feed_watchdog.png

MicroPython 代码块:

stp2.feed_watchdog()
get_watchdog_countdown_s()

读取当前看门狗剩余计数。

返回:

看门狗剩余计数,范围 0~255 秒。

返回类型:

int

UiFlow2 图形代码块:

get_watchdog_countdown_s.png

MicroPython 代码块:

value = stp2.get_watchdog_countdown_s()
print(value)
set_timer(duration_s, action)

设置 PMIC 定时器持续时间和到期动作。

参数:
  • duration_s (int) – 定时器持续时间,范围 0~2147483647 秒。

  • action (int) – 定时器到期动作,使用 TIMER_ACTION_* 常量。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_timer.png

MicroPython 代码块:

stp2.set_timer(5, StampTimerPower2.TIMER_ACTION_FLAG)
clear_timer()

停止并清除 PMIC 定时器。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

clear_timer.png

MicroPython 代码块:

stp2.clear_timer()
set_i2c_sleep_timeout_s(timeout_s)

设置 I2C 空闲后进入休眠的等待时间;传入 0 时关闭休眠。

参数:

timeout_s (int) – 空闲休眠等待时间,范围 0~15 秒。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_i2c_sleep_timeout_s.png

MicroPython 代码块:

stp2.set_i2c_sleep_timeout_s(10)
get_i2c_sleep_timeout_s()

读取 I2C 空闲休眠等待时间。

返回:

I2C 空闲休眠等待时间,范围 0~15 秒。

返回类型:

int

UiFlow2 图形代码块:

get_i2c_sleep_timeout_s.png

MicroPython 代码块:

value = stp2.get_i2c_sleep_timeout_s()
print(value)
set_i2c_frequency(frequency)

设置 StampTimerPower2 使用的 I2C 总线速度配置。

参数:

frequency (int) – I2C 频率,仅支持 100000 或 400000 Hz。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

set_i2c_frequency.png

MicroPython 代码块:

stp2.set_i2c_frequency(100000)
get_i2c_frequency()

读取 StampTimerPower2 使用的 I2C 总线速度配置。

返回:

I2C 频率,返回 100000 或 400000 Hz。

返回类型:

int

UiFlow2 图形代码块:

get_i2c_frequency.png

MicroPython 代码块:

value = stp2.get_i2c_frequency()
print(value)
read_rtc_ram(offset=0, length=32)

读取 32 字节 RTC 保持 RAM 的指定区域。数据保持取决于模块供电条件,不等同于 Flash 非易失存储。

参数:
  • offset (int) – 字节偏移范围为 0~31;offset + length 不得超过 32。 默认值:0。

  • length (int) – 读取长度,且 offset + length 不得超过 32。 默认值:32。

返回:

读取到的 RTC RAM 数据。

返回类型:

bytes

抛出:

ValueError – 参数值无效。

UiFlow2 图形代码块:

read_rtc_ram.png

MicroPython 代码块:

value = stp2.read_rtc_ram()
print(value)
write_rtc_ram(offset, data)

写入 32 字节 RTC 保持 RAM 的指定区域,数据保持取决于模块供电条件。

参数:
  • offset (int) – 字节偏移范围为 0~31;offset + len(data) 不得超过 32。

  • data (buffer / iterable) – 要写入的 bytes-like 数据。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

write_rtc_ram.png

MicroPython 代码块:

original = stp2.read_rtc_ram(24, 2)
try:
    stp2.write_rtc_ram(24, bytes([0x55, 0xAA]))
finally:
    stp2.write_rtc_ram(24, original)
restore_defaults()

恢复电源、GPIO、唤醒、ADC、PWM、定时器、中断、按钮、NeoPixel 和 AW8737A 的可写配置,清除唤醒和 IRQ 粘滞状态并注销事件回调。保留设备信息、UID 和 32 字节 RTC RAM,不重启芯片。

I2C 速度恢复为 100 kHz,再次访问前应将主控总线配置为相同频率。已有 Pin 、 ADC 、 PWM 和 NeoPixel 对象须重新初始化后使用。

异常

I2C 失败会抛出 OSError ,此时配置可能仅部分恢复。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

restore_defaults.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.restore_defaults()
power_off()

向外接 StampTimerPower2 发送关机命令。Basic 由自己的 USB 或电池供电,不因此自动关机。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

power_off.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.power_off()
reboot()

重启外接 StampTimerPower2。Basic 继续运行,再次访问 I2C 前需等待模块恢复。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

reboot.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.reboot()
enter_download_mode()

发送进入下载模式命令。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enter_download_mode.png

MicroPython 代码块:

# Manual power test only; affects the external STP2.
stp2.enter_download_mode()
enable_download_lock()

启用下载模式锁定。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_download_lock.png

MicroPython 代码块:

stp2.enable_download_lock()
disable_download_lock()

关闭下载模式锁定。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_download_lock.png

MicroPython 代码块:

stp2.disable_download_lock()
enable_single_click_reset()

启用单击复位行为。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_single_click_reset.png

MicroPython 代码块:

stp2.enable_single_click_reset()
disable_single_click_reset()

关闭单击复位行为。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_single_click_reset.png

MicroPython 代码块:

stp2.disable_single_click_reset()
enable_double_click_power_off()

启用双击关机行为。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

enable_double_click_power_off.png

MicroPython 代码块:

stp2.enable_double_click_power_off()
disable_double_click_power_off()

关闭双击关机行为。

返回:

无返回值。

返回类型:

None

UiFlow2 图形代码块:

disable_double_click_power_off.png

MicroPython 代码块:

stp2.disable_double_click_power_off()

Pin 对象方法

通过 stp2.Pin() 创建此封装对象,以下方法属于返回的对象,不直接属于 StampTimerPower2 实例。

init(mode=None, pull=-1, *, value=None)

初始化或重新配置 Pin 对象。对象模式使用 machine.Pin 常量。

参数:
  • mode (int / None) – 使用 Pin.IN 、 Pin.OUT 或 Pin.OPEN_DRAIN ; None 保持当前模式。 默认值:None。

  • pull (int / None) – 使用 Pin.PULL_UP 、 Pin.PULL_DOWN 或 None ; -1 保持当前配置。 默认值:-1。

  • value (int / bool / None) – 初始输出电平,支持 0 、 1 、 False 或 True ; None 不写输出。 默认值:None。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(4, Pin.IN, pull=Pin.PULL_UP)
try:
    pin.init()
finally:
    pin.deinit()
deinit()

停用 Pin 对象,并将对应 GPIO 恢复为无上下拉输入。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(4, Pin.IN, pull=Pin.PULL_UP)
try:
    pin.deinit()
finally:
    pin.deinit()
value(value=None)

不传参数时读取电平;传入值时设置输出电平。

参数:

value (int / bool / None) – 输出电平; None 表示读取,写入支持 0 、 1 、 False 或 True 。 默认值:None。

返回:

读取时返回 0 或 1 ;设置时返回 None 。

返回类型:

int / None

抛出:

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(4, Pin.IN, pull=Pin.PULL_UP)
try:
    value = pin.value()
    print(value)
finally:
    pin.deinit()
on()

输出高电平。

抛出:

RuntimeError – 对象当前状态不允许此操作。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(3, Pin.OUT, value=0)
try:
    pin.on()
finally:
    pin.deinit()
off()

输出低电平。

抛出:

RuntimeError – 对象当前状态不允许此操作。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

from hardware import Pin
pin = stp2.Pin(3, Pin.OUT, value=0)
try:
    pin.off()
finally:
    pin.deinit()

pin() 读取电平, pin(value) 设置电平,等同于 value()。封装参数使用 hardware.Pin.IN 、 OUT 、 OPEN_DRAIN 、 PULL_UP 和 PULL_DOWN 。

ADC 对象方法

通过 stp2.ADC() 创建此封装对象,以下方法属于返回的对象,不直接属于 StampTimerPower2 实例。

init()

初始化或重新启用 ADC 对象,并将对应 GPIO 切换到 ADC 功能。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

adc = stp2.ADC(1)
try:
    adc.init()
finally:
    adc.deinit()
deinit()

停用 ADC 对象,并将对应 GPIO 恢复为无上下拉输入。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

adc = stp2.ADC(1)
try:
    adc.deinit()
finally:
    adc.deinit()
read()

读取 12 位 ADC 原始值。

返回:

12 位 ADC 原始值,范围 0~4095 。

返回类型:

int

抛出:

MicroPython 代码块:

adc = stp2.ADC(1)
try:
    value = adc.read()
    print(value)
finally:
    adc.deinit()
read_u16()

读取换算到 16 位满量程的 ADC 值。

返回:

归一化值,范围 0~65535 。

返回类型:

int

抛出:

MicroPython 代码块:

adc = stp2.ADC(1)
try:
    value = adc.read_u16()
    print(value)
finally:
    adc.deinit()
read_uv()

读取使用实时 VREF 换算的输入电压。

返回:

输入电压,单位 uV。

返回类型:

int

抛出:

MicroPython 代码块:

adc = stp2.ADC(1)
try:
    value = adc.read_uv()
    print(value)
finally:
    adc.deinit()

PWM 对象方法

通过 stp2.PWM() 创建此封装对象,以下方法属于返回的对象,不直接属于 StampTimerPower2 实例。

init(*, freq=None, duty_u16=None, duty_ns=None, invert=None)

初始化或重新配置 PWM 对象。

参数:
  • freq (int / None) – 共享频率范围为 1~65535 Hz; None 保持当前频率,寄存器为零时使用 500 Hz。 默认值:None。 仅限关键字参数。

  • duty_u16 (int / None) – 16 位占空比,范围 0~65535 。 默认值:None。 仅限关键字参数。

  • duty_ns (int / None) – 高电平脉宽,单位 ns; None 表示不设置。 默认值:None。 仅限关键字参数。

  • invert (bool / None) – 是否反相输出极性。 默认值:None。 仅限关键字参数。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    pwm.init()
finally:
    pwm.deinit()
deinit()

关闭当前 PWM 通道,并将固定映射 GPIO 恢复为输入。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    pwm.deinit()
finally:
    pwm.deinit()
freq(value=None)

不传参数时读取共享频率;传入频率时同时更新两个 PWM 通道的频率。

参数:

value (int / None) – PWM 频率,范围 1~65535 Hz; None 表示读取。 默认值:None。

返回:

读取时返回频率,单位 Hz;设置时返回 None 。

返回类型:

int / None

抛出:

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    value = pwm.freq()
    print(value)
finally:
    pwm.deinit()
duty_u16(value=None)

读取或设置 0~65535 范围的占空比。

参数:

value (int / None) – 16 位占空比,范围 0~65535 ; None 表示读取。 默认值:None。

返回:

读取时返回 0~65535 ;设置时返回 None 。

返回类型:

int / None

抛出:

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    value = pwm.duty_u16()
    print(value)
finally:
    pwm.deinit()
duty_ns(value=None)

读取或设置高电平脉宽,单位为纳秒。

参数:

value (int / None) – 高电平脉宽,单位 ns; None 表示读取。设置值不得超过当前 PWM 周期。 默认值:None。

返回:

读取时返回高电平脉宽,单位 ns;设置时返回 None 。

返回类型:

int / None

抛出:

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    value = pwm.duty_ns()
    print(value)
finally:
    pwm.deinit()
invert(value=None)

读取或设置输出极性反相状态。

参数:

value (bool / None) – True 表示反相; False 表示正常极性; None 表示读取。 默认值:None。

返回:

读取时返回反相状态;设置时返回 None 。

返回类型:

bool / None

抛出:

MicroPython 代码块:

pwm = stp2.PWM(0, freq=1000, duty_u16=32768)
try:
    value = pwm.invert()
    print(value)
finally:
    pwm.deinit()

使用 duty_u16() 或 duty_ns();当前实现未提供 duty()。两个通道共享频率。

NeoPixel 对象方法

通过 stp2.NeoPixel() 创建此封装对象,以下方法属于返回的对象,不直接属于 StampTimerPower2 实例。

init()

初始化或重新启用 GPIO0 NeoPixel 输出。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pixels = stp2.NeoPixel(0, 1)
try:
    pixels.init()
finally:
    pixels.deinit()
deinit()

清空并关闭 LED 输出,将 GPIO0 恢复为输入。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pixels = stp2.NeoPixel(0, 1)
try:
    pixels.deinit()
finally:
    pixels.deinit()
fill(color)

用同一 RGB 颜色填充本地像素缓冲区,不立即刷新硬件。

参数:

color (int / tuple) – 颜色,可使用 0xRRGGBB 或 (r, g, b) 。

抛出:

ValueError – 参数值无效。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pixels = stp2.NeoPixel(0, 1)
try:
    pixels.fill((32, 0, 0))
    pixels.write()
finally:
    pixels.deinit()
write()

将本地 RGB 缓冲区写入 StampTimerPower2 并刷新 LED 输出。

抛出:

RuntimeError – 对象当前状态不允许此操作。

返回:

无返回值。

返回类型:

None

MicroPython 代码块:

pixels = stp2.NeoPixel(0, 1)
try:
    pixels.fill((32, 0, 0))
    pixels.write()
finally:
    pixels.deinit()

len(pixels) 返回灯珠数量。 pixels[index] 读取或设置本地缓冲区 RGB 元组,调用 write() 后更新灯珠。下标范围为 0 到 count-1,RGB 分量范围为 0 到 255。