Stamp Timer Power 2
StampTimerPower2 通过 I2C 提供电源管理、GPIO、ADC、PWM、NeoPixel、按钮事件、中断、唤醒、看门狗、定时器和 RTC RAM 功能。
支持以下产品:
UiFlow2 示例
GPIO 输入
在 UiFlow2 中打开 basic_stp2_gpio_input_example.m5f2 项目。
G4 上拉输入,接地显示 Low (0),松开显示 High (1)。
UiFlow2 图形代码块:
示例输出:
None
GPIO 输出
在 UiFlow2 中打开 basic_stp2_gpio_output_example.m5f2 项目。
G3 输出:A 置低、B 翻转、C 置高;分别显示设定值和引脚读回值。
UiFlow2 图形代码块:
示例输出:
None
GPIO 中断
在 UiFlow2 中打开 basic_stp2_gpio_irq_example.m5f2 项目。
IRQ 线连接 STP2 G0 与 Basic G26。G4 接地或松开产生输入变化;A 清零、B 暂停、C 继续,显示中断次数和 G4 电平。
UiFlow2 图形代码块:
示例输出:
None
ADC 输入
在 UiFlow2 中打开 basic_stp2_adc_example.m5f2 项目。
读取 G1、G2 的 ADC 原始值,范围为 0~4095。
UiFlow2 图形代码块:
示例输出:
None
PWM 输出
在 UiFlow2 中打开 basic_stp2_pwm_example.m5f2 项目。
PWM0 使用 G3,频率 1 kHz。A 将占空比降低 10 个百分点,B 置零,C 提高 10 个百分点,范围 0~100%。
UiFlow2 图形代码块:
示例输出:
None
NeoPixel 控制
在 UiFlow2 中打开 basic_stp2_neopixel_example.m5f2 项目。
LED 数据输入连接 G0,并共地。按键 A 切换红、绿、蓝、白色,B 降低 10 个百分点亮度,C 提高 10 个百分点亮度。示例默认控制 1 颗 LED,初始为红色、20% 亮度。
UiFlow2 图形代码块:
示例输出:
None
电源控制
在 UiFlow2 中打开 basic_stp2_power_config_example.m5f2 项目。
按键 A 切换 LDO 开关,按键 B 切换 DCDC 开关。屏幕和串口每 100 ms 显示从模块读取的使能状态。
UiFlow2 图形代码块:
示例输出:
None
定时开机
在 UiFlow2 中打开 basic_stp2_timer_example.m5f2 项目。
按键 A 切换关机期间的 LDO 输出保持,默认关闭。按键 B 循环选择 5、10、15 秒开机延时,默认 5 秒。按键 C(Shutdown)应用设置、启动定时开机并立即关闭 STP2。倒计时期间锁定按键。
Basic 需独立供电,以便在 STP2 关机期间继续显示倒计时。
图形化示例在倒计时结束后显示 Timer elapsed,不核对唤醒来源。
UiFlow2 图形代码块:
示例输出:
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。- 参数:
- 抛出:
ValueError – GPIO 参数无效,或 IRQ 引脚未成对配置。
OSError – I2C 通信失败。
RuntimeError – 主机不支持所需的 IRQ 功能。
UiFlow2 图形代码块:

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)
常量
常量 |
值 |
含义 |
|---|---|---|
|
0 |
普通 GPIO 功能。 |
|
1 |
低有效 IRQ 输出功能。 |
|
2 |
GPIO 关机唤醒输入功能。 |
|
3 |
ADC、PWM 或 NeoPixel 等复用功能。 |
|
0 |
数字输入模式。 |
|
1 |
推挽输出模式。 |
|
2 |
开漏输出模式。 |
|
0 |
无内部上下拉。 |
|
1 |
启用内部上拉。 |
|
2 |
启用内部下拉。 |
|
0 |
推挽驱动。 |
|
1 |
开漏驱动。 |
|
0 |
未检测到电源来源标志。 |
|
1 |
5VIN / USB 输入有效。 |
|
2 |
5VINOUT 双向端口输入有效。 |
|
4 |
电池输入有效。 |
|
1 |
定时器唤醒。 |
|
2 |
5VIN 插入唤醒。 |
|
4 |
电源键唤醒。 |
|
8 |
复位键唤醒。 |
|
16 |
命令复位唤醒。 |
|
32 |
GPIO 输入唤醒。 |
|
64 |
5VINOUT 事件唤醒。 |
|
0 |
单击判定时间。 |
|
1 |
双击判定时间。 |
|
2 |
长按判定时间。 |
|
0 |
定时到期后停止,不执行其它动作。 |
|
1 |
定时到期后产生事件标志。 |
|
2 |
定时到期后重启。 |
|
3 |
定时到期后开机。 |
|
4 |
定时到期后关机。 |
|
0 |
GPIO 中断状态组 |
|
1 |
系统中断状态组 |
|
2 |
按钮中断状态组 |
|
0 |
下降沿唤醒 |
|
1 |
上升沿唤醒 |
使用按位或组合 EVENT 标志并传入 add_event_cb()。该命名空间直接引用现有驱动常量,不复制数值。
常量 |
值 |
含义 |
|---|---|---|
|
0x1 |
G0 输入变化 |
|
0x2 |
G1 输入变化 |
|
0x4 |
G2 输入变化 |
|
0x8 |
G3 输入变化 |
|
0x10 |
G4 输入变化 |
|
0x20 |
5VIN 接入 |
|
0x40 |
5VIN 移除 |
|
0x80 |
5VINOUT 接入 |
|
0x100 |
5VINOUT 移除 |
|
0x200 |
电池接入 |
|
0x400 |
电池移除 |
|
0x800 |
按钮单击 |
|
0x1000 |
wake |
|
0x2000 |
按钮双击 |
|
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 读取和用户回调在调度上下文执行。
- 参数:
- 返回:
回调注册 handle,可传给
remove_event_cb()。- 返回类型:
- 抛出:
TypeError – 参数类型无效。
ValueError – 参数值无效。
回调在 MicroPython 调度上下文执行。每个触发位产生一个含 target、code、user_data 的 Event,code 为单个 EVENT 标志。未配置 IRQ 引脚对时调用会抛出 RuntimeError;使用返回的句柄注销回调。
UiFlow2 图形代码块:

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,或注册时使用的回调对象。- 返回:
实际移除的注册数量。
- 返回类型:
- 抛出:
TypeError – 参数类型无效。
UiFlow2 图形代码块:

MicroPython 代码块:
# handle was returned by add_event_cb(). removed = stp2.remove_event_cb(handle)
- deinit()
注销驱动创建的主控 IRQ,不关闭由应用传入的 I2C 总线。
此操作可重复调用,普通寄存器访问仍可使用;已配置 IRQ 引脚时,add_event_cb() 可重新创建中断注册。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.deinit()
- wake()
唤醒 StampTimerPower2,并等待通信恢复。方法通过 I2C 空事务触发唤醒;芯片可能 NACK 第一笔事务,该错误会被忽略。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.wake()
- is_connected()
检查配置地址上的 StampTimerPower2 是否响应 I2C 访问。
- 返回:
设备响应时为
True,否则为False。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.is_connected() print(value)
- get_device_info()
一次读取设备 ID、型号、硬件版本和固件版本。
- 返回:
(device_id, device_model, hw_version, firmware_version)。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_device_info() print(value)
- get_uid()
读取长度为 12 字节的芯片唯一标识。
- 返回:
长度为 12 字节的设备 UID。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_uid() print(value)
- get_device_id()
读取设备 ID。
- 返回:
设备 ID,范围
0~255。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_device_id() print(value)
- get_device_model()
读取设备型号。
- 返回:
设备型号,范围
0~255。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_device_model() print(value)
- get_hardware_version()
读取硬件版本。
- 返回:
硬件版本,范围
0~255。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_hardware_version() print(value)
- get_firmware_version()
读取固件版本。
- 返回:
固件版本,范围
0~255。- 返回类型:
UiFlow2 图形代码块:

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 对象。
- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

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 对象。
- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

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~65535Hz;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 图形代码块:

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 三通道颜色。
- 参数:
- 返回:
NeoPixel 缓冲对象。
- 返回类型:
NeoPixel
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

MicroPython 代码块:
pixels = stp2.NeoPixel(0, 1) # Use the returned object, then release it. pixels.deinit()
- set_pin_function(gpio, function)
设置指定 GPIO 的复用功能。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pin_function(4, StampTimerPower2.PIN_FUNCTION_GPIO)
- set_pin_mode(gpio, mode)
设置 GPIO 输入、推挽输出或开漏输出模式。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pin_mode(4, StampTimerPower2.GPIO_MODE_IN)
- set_pin_pull(gpio, pull)
设置 GPIO 内部上拉、下拉或无上下拉。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pin_pull(4, StampTimerPower2.GPIO_PULL_UP)
- set_pin_drive(gpio, drive)
设置 GPIO 推挽或开漏驱动方式。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

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 图形代码块:

MicroPython 代码块:
stp2.set_pin_value(4, 1)
- read_pin(gpio)
读取 GPIO 当前输入电平。
- 参数:
gpio (int) – StampTimerPower2 GPIO 编号,范围
0~4。- 返回:
GPIO 电平,
0或1。- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_pin(4) print(value)
- get_power_source()
读取当前有效电源来源位图,可同时包含多个
POWER_SOURCE_*标志。- 返回:
由
POWER_SOURCE_*组成的电源来源位图。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_power_source() print(value)
- get_power_config()
读取充电、DCDC、LDO、BOOST 和 LED_EN 等电源配置位。
- 返回:
电源配置寄存器值,范围
0~255。- 返回类型:
UiFlow2 图形代码块:
get_power_config.pngMicroPython 代码块:
value = stp2.get_power_config() print(value)
- is_charging_enabled()
读取充电使能位。该值表示充电功能是否启用,不表示当前是否存在充电电流。
- 返回:
充电使能时为
True。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.is_charging_enabled() print(value)
- is_dcdc_enabled()
读取 3.3 V DCDC 电源轨使能状态。
- 返回:
DCDC 电源轨启用时为
True。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.is_dcdc_enabled() print(value)
- is_ldo_enabled()
读取 3.3 V LDO 电源轨使能状态。
- 返回:
LDO 电源轨启用时为
True。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.is_ldo_enabled() print(value)
- is_boost_enabled()
读取 BOOST / 5VINOUT 电源轨使能状态。
- 返回:
BOOST / 5VINOUT 电源轨启用时为
True。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.is_boost_enabled() print(value)
- enable_charging()
启用电池充电功能。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_charging()
- disable_charging()
关闭电池充电功能。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_charging.pngMicroPython 代码块:
stp2.disable_charging()
- enable_dcdc()
启用 3.3 V DCDC 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_dcdc()
- disable_dcdc()
关闭 3.3 V DCDC 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_dcdc.pngMicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.disable_dcdc()
- enable_ldo()
启用 3.3 V LDO 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_ldo()
- disable_ldo()
关闭 3.3 V LDO 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_ldo.pngMicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.disable_ldo()
- enable_boost()
启用 BOOST / 5VINOUT 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_boost()
- disable_boost()
关闭 BOOST / 5VINOUT 电源轨。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_boost.pngMicroPython 代码块:
# 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 图形代码块:

MicroPython 代码块:
stp2.set_led_enable_level(True)
- set_battery_low_voltage_threshold_mv(voltage_mv)
设置电池低压保护阈值。
- 参数:
voltage_mv (int) – 电池低压保护阈值,范围
2000~3991mV。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_battery_low_voltage_threshold_mv(3000)
- get_battery_low_voltage_threshold_mv()
读取电池低压保护阈值。
- 返回:
电池低压保护阈值,单位 mV。
- 返回类型:
UiFlow2 图形代码块:

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 图形代码块:

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.pngMicroPython 代码块:
stp2.disable_gpio_power_hold(4)
- enable_ldo_power_hold()
使 LDO 在关机后保持供电。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_ldo_power_hold()
- disable_ldo_power_hold()
取消 LDO 的关机保持。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_ldo_power_hold.pngMicroPython 代码块:
stp2.disable_ldo_power_hold()
- enable_boost_power_hold()
使 BOOST 在关机后保持供电。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_boost_power_hold()
- disable_boost_power_hold()
取消 BOOST 的关机保持。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_boost_power_hold.pngMicroPython 代码块:
stp2.disable_boost_power_hold()
- read_adc_raw(channel)
读取指定 ADC 通道的 12 位原始值。通道 6 是内部温度通道。
- 参数:
channel (int) – ADC 通道编号,支持
1、2或内部温度通道6。- 返回:
12 位 ADC 原始值,范围
0~4095。- 返回类型:
- 抛出:
ValueError – 参数值无效。
OSError – 操作失败。
UiFlow2 图形代码块:

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。
- 返回类型:
- 抛出:
ValueError – 参数值无效。
OSError – 操作失败。
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_adc_mv(1) print(value)
- read_temperature_raw()
读取芯片内部温度传感器的 12 位原始值。
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_temperature_raw() print(value)
- read_button()
读取电源按键当前电平状态。
- 返回:
按键松开为
0,按下为1。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_button() print(value)
- read_button_event()
读取粘滞按键事件标志;硬件会在读取后清除该标志。
- 返回:
检测到按键事件时为
True。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_button_event() print(value)
- set_button_timing(event, duration_ms)
设置单击、双击或长按的判定时间。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_button_timing(StampTimerPower2.BUTTON_TIMING_CLICK, 250)
- read_reference_voltage_mv()
读取芯片当前参考电压。
- 返回:
参考电压,单位 mV。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_reference_voltage_mv() print(value)
- read_battery_voltage_mv()
读取电池电压。
- 返回:
电池电压,单位 mV。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_battery_voltage_mv() print(value)
- read_vin_voltage_mv()
读取外接模块 5VIN 输入电压。
- 返回:
5VIN 电压,单位 mV。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_vin_voltage_mv() print(value)
- read_5v_inout_voltage_mv()
读取外接模块 5VINOUT 端口电压。
- 返回:
5VINOUT 电压,单位 mV。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.read_5v_inout_voltage_mv() print(value)
- get_wake_source(*, clear=False)
读取唤醒来源位图,并可选择清除状态。
- 参数:
clear (bool) – 是否清除本次读取到的唤醒来源位。 默认值:
False。 仅限关键字参数。- 返回:
由
WAKE_SOURCE_*组成的唤醒来源位图。- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_wake_source() print(value)
- clear_wake_source(mask=None)
清除全部或指定唤醒来源状态位。
- 参数:
mask (int / None) – 要操作的状态位掩码。 默认值:
None。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.clear_wake_source()
- set_pwm_frequency(frequency)
设置 PWM0 和 PWM1 共用的输出频率。
- 参数:
frequency (int) – 共享 PWM 频率,范围
1~65535Hz。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pwm_frequency(1000)
- get_pwm_frequency()
读取 PWM0 和 PWM1 共用的输出频率。
- 返回:
共享 PWM 频率,单位 Hz。
- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_pwm_frequency() print(value)
- set_pwm_duty_percent(channel, percent, *, invert=False)
设置指定通道的百分比占空比和极性,不改变通道使能状态。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pwm_duty_percent(0, 50)
- set_pwm_duty_u12(channel, duty_u12, *, invert=False)
设置指定通道的 12 位占空比和极性,不改变通道使能状态。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pwm_duty_u12(0, 2048)
- enable_pwm(channel)
启用指定 PWM 通道。
- 参数:
channel (int) – PWM 通道编号,仅支持
0(GPIO3)或1(GPIO4)。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_pwm(0)
- disable_pwm(channel)
关闭指定 PWM 通道。
- 参数:
channel (int) – PWM 通道编号,仅支持
0(GPIO3)或1(GPIO4)。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_pwm.pngMicroPython 代码块:
stp2.disable_pwm(0)
- get_pwm_duty_percent(channel)
读取百分比占空比。
- 参数:
channel (int) – PWM 通道编号,仅支持
0(GPIO3)或1(GPIO4)。- 返回:
百分比占空比,范围
0~100。- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

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。- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_pwm_duty_u12(0) print(value)
- set_neopixel_count(count)
设置有效 NeoPixel 数量。
- 参数:
count (int) – 有效 LED 数量,范围
0~32;0表示关闭输出。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

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 图形代码块:

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 图形代码块:

MicroPython 代码块:
stp2.write_neopixels([(32, 0, 0)])
- refresh_neopixels()
把 LED RAM 的内容刷新到 NeoPixel 输出。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.refresh_neopixels()
- clear_neopixels(*, auto_refresh=True)
清空当前有效 LED 的颜色,并可选择立即刷新。
- 参数:
auto_refresh (bool) – 写入后是否立即刷新 LED 输出。 默认值:
True。 仅限关键字参数。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.clear_neopixels()
- enable_neopixels()
启用 NeoPixel 输出,不改写 LED RAM。disable_neopixels() 会清除保存的灯珠数量,随后启用默认使用一颗;需要其他数量时调用 set_neopixel_count()。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_neopixels()
- disable_neopixels()
关闭 NeoPixel 输出,不改写 LED RAM。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_neopixels.pngMicroPython 代码块:
stp2.disable_neopixels()
- set_aw8737a_pulse(gpio, pulses, *, refresh=True)
配置指定 GPIO 输出 AW8737A 控制脉冲。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_aw8737a_pulse(4, 1)
- refresh_aw8737a()
执行最近一次保存的 AW8737A 脉冲配置。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.refresh_aw8737a()
- set_aw8737a_mode(gpio, mode, *, refresh=True)
按 AW8737A 模式编号配置控制脉冲。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

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 组的状态位图。
- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

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 图形代码块:

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.pngMicroPython 代码块:
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 图形代码块:

MicroPython 代码块:
stp2.enable_irq_events(StampTimerPower2.IRQ_GROUP_GPIO, 0x10)
- enable_pin_wakeup(gpio)
启用指定 GPIO 的关机唤醒功能。
- 参数:
gpio (int) – StampTimerPower2 GPIO 编号,范围
0~4。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_pin_wakeup(4)
- disable_pin_wakeup(gpio)
关闭指定 GPIO 的关机唤醒功能。
- 参数:
gpio (int) – StampTimerPower2 GPIO 编号,范围
0~4。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:
disable_pin_wakeup.pngMicroPython 代码块:
stp2.disable_pin_wakeup(4)
- set_pin_wakeup_edge(gpio, edge)
设置指定 GPIO 的唤醒触发边沿。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_pin_wakeup_edge(4, StampTimerPower2.WAKE_EDGE_FALLING)
- enable_watchdog(timeout_s)
启用看门狗并设置超时时间。
- 参数:
timeout_s (int) – 看门狗超时时间,范围
1~255秒。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.enable_watchdog(10)
- disable_watchdog()
关闭看门狗。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.disable_watchdog()
- feed_watchdog()
重载看门狗计数。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.feed_watchdog()
- get_watchdog_countdown_s()
读取当前看门狗剩余计数。
- 返回:
看门狗剩余计数,范围
0~255秒。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_watchdog_countdown_s() print(value)
- set_timer(duration_s, action)
设置 PMIC 定时器持续时间和到期动作。
- 参数:
- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_timer(5, StampTimerPower2.TIMER_ACTION_FLAG)
- clear_timer()
停止并清除 PMIC 定时器。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.clear_timer()
- set_i2c_sleep_timeout_s(timeout_s)
设置 I2C 空闲后进入休眠的等待时间;传入 0 时关闭休眠。
- 参数:
timeout_s (int) – 空闲休眠等待时间,范围
0~15秒。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_i2c_sleep_timeout_s(10)
- get_i2c_sleep_timeout_s()
读取 I2C 空闲休眠等待时间。
- 返回:
I2C 空闲休眠等待时间,范围
0~15秒。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_i2c_sleep_timeout_s() print(value)
- set_i2c_frequency(frequency)
设置 StampTimerPower2 使用的 I2C 总线速度配置。
- 参数:
frequency (int) – I2C 频率,仅支持
100000或400000Hz。- 抛出:
ValueError – 参数值无效。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.set_i2c_frequency(100000)
- get_i2c_frequency()
读取 StampTimerPower2 使用的 I2C 总线速度配置。
- 返回:
I2C 频率,返回
100000或400000Hz。- 返回类型:
UiFlow2 图形代码块:

MicroPython 代码块:
value = stp2.get_i2c_frequency() print(value)
- read_rtc_ram(offset=0, length=32)
读取 32 字节 RTC 保持 RAM 的指定区域。数据保持取决于模块供电条件,不等同于 Flash 非易失存储。
- 参数:
- 返回:
读取到的 RTC RAM 数据。
- 返回类型:
- 抛出:
ValueError – 参数值无效。
UiFlow2 图形代码块:

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 图形代码块:

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 图形代码块:

MicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.restore_defaults()
- power_off()
向外接 StampTimerPower2 发送关机命令。Basic 由自己的 USB 或电池供电,不因此自动关机。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.power_off()
- reboot()
重启外接 StampTimerPower2。Basic 继续运行,再次访问 I2C 前需等待模块恢复。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.reboot()
- enter_download_mode()
发送进入下载模式命令。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
# Manual power test only; affects the external STP2. stp2.enter_download_mode()
- enable_download_lock()
启用下载模式锁定。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_download_lock()
- disable_download_lock()
关闭下载模式锁定。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.disable_download_lock()
- enable_single_click_reset()
启用单击复位行为。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_single_click_reset()
- disable_single_click_reset()
关闭单击复位行为。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.disable_single_click_reset()
- enable_double_click_power_off()
启用双击关机行为。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

MicroPython 代码块:
stp2.enable_double_click_power_off()
- disable_double_click_power_off()
关闭双击关机行为。
- 返回:
无返回值。
- 返回类型:
None
UiFlow2 图形代码块:

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
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
ValueError – 参数值无效。
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。- 返回类型:
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
OSError – 操作失败。
MicroPython 代码块:
adc = stp2.ADC(1) try: value = adc.read() print(value) finally: adc.deinit()
- read_u16()
读取换算到 16 位满量程的 ADC 值。
- 返回:
归一化值,范围
0~65535。- 返回类型:
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
OSError – 操作失败。
MicroPython 代码块:
adc = stp2.ADC(1) try: value = adc.read_u16() print(value) finally: adc.deinit()
- read_uv()
读取使用实时 VREF 换算的输入电压。
- 返回:
输入电压,单位 uV。
- 返回类型:
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
OSError – 操作失败。
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~65535Hz;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~65535Hz;None表示读取。 默认值:None。- 返回:
读取时返回频率,单位 Hz;设置时返回
None。- 返回类型:
int / None
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
ValueError – 参数值无效。
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
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
ValueError – 参数值无效。
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
- 抛出:
RuntimeError – 对象当前状态不允许此操作。
ValueError – 参数值无效。
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
- 抛出:
ValueError – 参数值无效。
RuntimeError – 对象当前状态不允许此操作。
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。







