资讯详情

MicroPython pyboard 快速参考指南:核心 API 实战速查与源码级解读

📅 2026/9/20 23:33:37 | 华诺云谱 👁 阅读
MicroPython pyboard 快速参考指南:核心 API 实战速查与源码级解读
MicroPython pyboard 快速参考指南核心 API 实战速查与源码级解读【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址: https://gitcode.com/gh_mirrors/mi/micropython本指南以 pyboardPYBv1.1为对象系统梳理 MicroPython 在该开发板上的核心 API 用法从 GPIO、LED、定时器到 UART/SPI/I2C/I2S/CAN 等外设每个示例均可直接复制到 REPL 或main.py中运行并结合当前仓库源码说明其底层实现与引脚映射帮助开发者快速上手并深入理解 pyboard 的硬件控制模型。引言pyboard 与本文适用范围pyboard 是 MicroPython 官方推出的 STM32 开发板本文所对应的快速参考文档docs/pyboard/quickref.rst面向PYBv1.1硬件版本。该板基于 STM32F405RG 芯片板载 4 个 LED、1 个用户按键、1 个三轴加速度计MMA7660并引出 X/Y 两排 GPIO 与多种外设总线。从源码结构看pyboard 的移植层位于 ports/stm32板级定义见 ports/stm32/boards/PYBV11/mpconfigboard.h。文档中涉及的引脚名如 X1、Y6与板载资源映射均可在该配置文件中找到对应的硬件定义例如板名定义为PYBv1.1、MCU 为STM32F405RG并启用了 RNG、RTC、Servo、DAC、USB、SD 卡等外设功能。如果你是第一次接触该开发板建议先阅读 docs/pyboard/general.rst本地文件系统、启动模式、故障诊断等与 docs/pyboard/tutorial/index.rst入门教程再回到本文进行 API 速查。板级资源一览PYBv1.1资源说明源码定义位置MCUSTM32F405RGports/stm32/boards/PYBV11/mpconfigboard.h4 个 LED红(A13)/绿(A14)/黄(A15)/蓝(B4)同上 L84-L92用户按键 USRSWB3按下为低电平内部上拉同上 L78-L82加速度计MMA7660AVDD 引脚 B5同上 L104-L105SD 卡检测引脚 A8同上 L94-L97RTC32kHz 外部晶振LSE同上 L22-L25I2C 总线I2C1 命名为 X、I2C2 命名为 Y同上 L47-L53SPI 总线SPI1 命名为 X、SPI2 命名为 Y同上 L55-L65CAN 总线CAN1 命名为 YA、CAN2 命名为 YB同上 L70-L76需要说明的是本文快速参考面向 PYBv1.1其他版本PYBv1.0、PYBLITEv1.0-AC、PYBLITEv1.0的引脚图可在官方资源站点查看本文不再列出外部链接。通用板级控制pyb模块提供对开发板整体的控制接口。以下代码演示了 REPL 串口重定向、低功耗等待与 CPU 频率操作import pyb pyb.repl_uart(pyb.UART(1, 9600)) # 将 REPL 复制到 UART(1) pyb.wfi() # 暂停 CPU等待中断唤醒 pyb.freq() # 获取 CPU 与总线频率 pyb.freq(60000000) # 将 CPU 频率设置为 60MHz pyb.stop() # 停止 CPU等待外部中断唤醒从源码角度可以验证这些接口的实现pyb.repl_uart()在 ports/stm32/modpyb.c 中实现注释明确指出这是一个legacy 函数推荐使用os.dupterm替代它负责将 REPL 输出复制到指定的 UART 对象uart_attach_to_repl。pyb.wfi()在 ports/stm32/modpyb.c 中实现对应machine.idle()其底层通过执行 WFIWait For Interrupt指令降低功耗见 ports/stm32/modmachine.c 中的__WFI()调用。pyb.freq()与pyb.stop()属于 legacy 别名分别映射到machine.freq与machine.stop见 ports/stm32/modpyb.c 的模块表。其中频率设置最终调用powerctrl_set_sysclk完成 PLL 重配置ports/stm32/modmachine.c非法频率会抛出ValueError。提示在旧版固件上pyb.freq()也可直接获取频率设置频率时建议先查询当前值再修改并注意 USB 等外设的时钟依赖。延时与计时使用标准库time即可实现延时与高精度计时import time time.sleep(1) # 休眠 1 秒 time.sleep_ms(500) # 休眠 500 毫秒 time.sleep_us(10) # 休眠 10 微秒 start time.ticks_ms() # 获取毫秒计数器当前值 delta time.ticks_diff(time.ticks_ms(), start) # 计算时间差ticks_ms()返回的毫秒计数存在回绕因此计算差值必须使用ticks_diff()而非直接相减ticks_diff在 py/runtime.c 与 extmod/modtime.c 中有对应实现它正确处理了有符号回绕语义。内部 LED板载 4 个 LED 通过pyb.LED控制编号 1红、2绿、3黄、4蓝from pyb import LED led LED(1) # 1red, 2green, 3yellow, 4blue led.toggle() led.on() led.off() # LED 3 和 4 支持 PWM 亮度调节0-255 LED(4).intensity() # 获取亮度 LED(4).intensity(128) # 设置为一半亮度从板级配置看LED3 与 LED4 的 PWM 通道在 ports/stm32/boards/PYBV11/mpconfigboard.h 中定义为#define MICROPY_HW_LED1 (pin_A13) // red #define MICROPY_HW_LED2 (pin_A14) // green #define MICROPY_HW_LED3 (pin_A15) // yellow #define MICROPY_HW_LED4 (pin_B4) // blue #define MICROPY_HW_LED3_PWM { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 } #define MICROPY_HW_LED4_PWM { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }即 LED3 复用 TIM2 的通道 1LED4 复用 TIM3 的通道 1这正是intensity()能够调节亮度的硬件基础。实现细节可参考 ports/stm32/led.c若需深入。内部用户按键用户按键通过pyb.Switch读取支持查询与中断回调两种模式from pyb import Switch sw Switch() sw.value() # 返回 True 或 False sw.callback(lambda: pyb.LED(1).toggle())该按键连接在 B3 引脚配置为内部上拉、下降沿中断触发见上文板级配置 L78-L82因此value()在按下时返回False低电平有效代码中常见写法为not sw.value()判断按下。中断回调在按键事件触发时由底层 EXTI 机制调用。引脚与 GPIOX/Y 排针上的引脚可通过名称或Pin对象操作支持输出、输入、上下拉等模式from pyb import Pin p_out Pin(X1, Pin.OUT_PP) p_out.high() p_out.low() p_in Pin(X2, Pin.IN, Pin.PULL_UP) p_in.value() # 获取电平0 或 1Pin的常用模式包括模式含义Pin.OUT_PP推挽输出Pin.OUT_OD开漏输出Pin.IN输入Pin.IN_PULL_UP/Pin.IN_PULL_DOWN上拉/下拉输入Pin.PULL_NONE/Pin.PULL_UP/Pin.PULL_DOWN上下拉配置完整的引脚能力复用功能、模拟输入等可查阅 docs/library/pyb.Pin.rst 与 docs/library/machine.Pin.rst。舵机控制pyb.Servo支持标准舵机与连续旋转舵机的控制from pyb import Servo s1 Servo(1) # 舵机位于位置 1X1, VIN, GND 三个引脚 s1.angle(45) # 转到 45 度 s1.angle(-60, 1500) # 在 1500ms 内转到 -60 度 s1.speed(50) # 用于连续旋转舵机angle(deg, time)的第一参数为目标角度范围约 -90 到 90第二参数可选指定过渡时间毫秒。角度信号由定时器 PWM 生成板级配置中启用了MICROPY_HW_ENABLE_SERVOports/stm32/boards/PYBV11/mpconfigboard.h。接线示意图与更多用法见 docs/pyboard/tutorial/servo.rst。外部中断ExtInt外部中断允许在引脚电平跳变时触发回调from pyb import Pin, ExtInt callback lambda e: print(intr) ext ExtInt(Pin(Y1), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)常用触发模式常量触发条件ExtInt.IRQ_RISING上升沿ExtInt.IRQ_FALLING下降沿ExtInt.IRQ_RISING_FALLING双边沿回调函数接收一个参数触发事件可用于打印日志或置位标志位。详细说明见 docs/library/pyb.ExtInt.rst。定时器Timerpyb.Timer提供硬件定时器可配置频率与周期回调from pyb import Timer tim Timer(1, freq1000) tim.counter() # 获取计数器当前值 tim.freq(0.5) # 0.5 Hz tim.callback(lambda t: pyb.LED(1).toggle())Timer(id, freq...)以指定频率创建定时器counter()返回当前计数值freq()可读取或重新设置频率callback()注册周期中断回调参数为定时器对象本身。定时器还可与 PWM、输入捕获等模式结合使用见下文 PWM 小节。注意tim.callback(None)可取消回调。RTC实时时钟板载 RTC 基于 32kHz 外部晶振LSE运行掉电后由后备电池维持若硬件提供from pyb import RTC rtc RTC() rtc.datetime((2017, 8, 23, 0, 1, 12, 48, 0)) # 设置日期时间如 2017/8/23 1:12:48 # 星期字段第 4 个值此处为 0会被忽略 rtc.datetime() # 读取日期时间datetime元组格式为(year, month, day, weekday, hours, minutes, seconds, subseconds)其中 weekday0-6与 subseconds 在设置时被忽略。板级配置中MICROPY_HW_RTC_USE_LSE (1)表明使用外部低速晶振ports/stm32/boards/PYBV11/mpconfigboard.h。pyb.RTC的完整方法含闹钟、唤醒见 docs/library/pyb.RTC.rst。PWM脉冲宽度调制PWM 通过定时器通道输出可精确控制占空比from pyb import Pin, Timer p Pin(X1) # X1 复用 TIM2 的 CH1 tim Timer(2, freq1000) ch tim.channel(1, Timer.PWM, pinp) ch.pulse_width_percent(50)引脚 X1 对应 TIM2 通道 1配置见 ports/stm32/boards/PYBV11/mpconfigboard.h 中 SPI 与定时器复用定义X1-X8 对应 SPI1 的 NSS/SCK/MISO/MOSI 所在引脚其中 X1 即 PA0/A4 相邻区域具体以官方引脚图为准tim.channel(channel, mode, pin...)将定时器通道绑定到指定引脚pulse_width_percent(0-100)以百分比设置占空比也可用pulse_width()以微秒为单位设置脉冲宽度。注意不同引脚可复用的定时器/通道不同使用时需对照引脚图选择匹配组合同一定时器不同通道可输出多路同频 PWM。ADC模数转换板载 12 位 ADC读取电压转换为 0-4095 的整数值from pyb import Pin, ADC adc ADC(Pin(X19)) adc.read() # 读取值范围 0-4095ADC(pin)以引脚创建 ADC 对象read()返回 12 位采样值0-4095对应 0-3.3V 输入参考电压由硬件决定更精确的电压换算可乘以3.3 / 4095。machine.ADC模块还提供 16 位过采样模式见 docs/library/machine.ADC.rst 与 docs/library/pyb.ADC.rst。DAC数模转换板载 8 位 DAC可将数字值转换为模拟电压输出from pyb import Pin, DAC dac DAC(Pin(X5)) dac.write(120) # 输出值介于 0 和 255 之间DAC(pin)创建 DAC 对象仅特定引脚支持如 X5write(value)输出 0-255 对应的电压0V 到参考电压还可使用write_timed()配合定时器输出波形见 docs/library/pyb.DAC.rst。板级配置中MICROPY_HW_ENABLE_DAC (1)ports/stm32/boards/PYBV11/mpconfigboard.h表明该功能已启用。UART 串口通信pyb.UART提供异步串口通信from pyb import UART uart UART(1, 9600) uart.write(hello) uart.read(5) # 读取最多 5 字节UART(id, baudrate)创建串口对象pyboard 上常见串口编号为 1、2、3、4、6write()发送字节串read(n)阻塞读取最多 n 字节可返回少于 n 字节readline()读取一行any()查询接收缓冲区是否有数据。板级配置中 UART1 命名为 XB、UART2 无命名、UART3 命名为 YB、UART4 命名为 XA、UART6 命名为 YAports/stm32/boards/PYBV11/mpconfigboard.h这些命名对应板上的 XA/XB/YA/YB 串口引脚组合。pyb.repl_uart(pyb.UART(1, 9600))可将 REPL 复制到 UART1见前文。详细方法见 docs/library/pyb.UART.rst。SPI 总线pyb.SPI提供主机Controller模式 SPI 通信from pyb import SPI spi SPI(1, SPI.CONTROLLER, baudrate200000, polarity1, phase0) spi.send(hello) spi.recv(5) # 在总线上接收 5 字节 spi.send_recv(hello) # 发送并接收 5 字节参数含义baudrate波特率、polarity时钟极性0/1、phase时钟相位0/1二者组合定义 SPI 模式CPOL/CPHAsend()/recv()/send_recv()分别对应发送、接收、全双工收发。板级配置中 SPI1 命名为 X对应 X5X8 引脚SPI2 命名为 Y对应 Y5Y8 引脚ports/stm32/boards/PYBV11/mpconfigboard.h。注意 I2S 与 SPI 共享引脚资源。machine.SPI提供更通用的接口见 docs/library/machine.SPI.rst。I2C 总线pyboard 同时支持硬件 I2C 与软件 I2Cfrom machine import I2C i2c I2C(X, freq400000) # 创建硬件 I2C 对象X 半区 i2c I2C(sclX1, sdaX2, freq100000) # 创建软件 I2C 对象指定引脚 i2c.scan() # 返回总线上从设备地址列表 i2c.writeto(0x42, hello) # 向地址 0x42 的从设备写入 5 字节 i2c.readfrom(0x42, 5) # 从地址 0x42 的从设备读取 5 字节 i2c.readfrom_mem(0x42, 0x10, 2) # 从从设备 0x42 的内存地址 0x10 读取 2 字节 i2c.writeto_mem(0x42, 0x10, xy) # 向从设备 0x42 的内存地址 0x10 写入 2 字节硬件 I2C 可通过总线名I2C(X)/I2C(Y)或外设整数编号I2C(1)创建板级配置中 I2C1 命名为 XSCLB6, SDAB7I2C2 命名为 YSCLB10, SDAB11见 ports/stm32/boards/PYBV11/mpconfigboard.h软件 I2C 通过显式指定scl与sda引脚创建可自由选择任意 GPIOscan()返回检测到的从设备地址列表常用于总线调试readfrom_mem/writeto_mem用于带寄存器地址的器件读写如传感器、EEPROM。兼容性说明旧版pyb.I2C仍可使用但新项目推荐使用machine.I2C其完整 API 见 docs/library/machine.I2C.rst。I2S 总线音频I2S 用于数字音频传输支持发送TX与接收RX模式from machine import I2S, Pin # 发送模式播放音频 i2s I2S(2, sckPin(Y6), wsPin(Y5), sdPin(Y8), modeI2S.TX, bits16, formatI2S.STEREO, rate44100, ibuf40000) i2s.write(buf) # 将音频采样缓冲区写入 I2S 设备 # 接收模式录制音频 i2s I2S(1, sckPin(X5), wsPin(X6), sdPin(Y4), modeI2S.RX, bits16, formatI2S.MONO, rate22050, ibuf40000) i2s.readinto(buf) # 从 I2S 设备填充音频采样缓冲区参数说明参数含义idI2S 外设编号PYBv1.0/v1.1 只有一个 I2S 总线id2PYBD-SFxW 有两个id1 和 id2sck/ws/sd位时钟、左右声道时钟字选择、数据引脚modeI2S.TX或I2S.RXbits采样位深如 16formatI2S.STEREO或I2S.MONOrate采样率Hz如 44100ibuf内部缓冲区字节数重要提示I2S 类当前为Technical Preview技术预览状态。预览期间欢迎用户反馈基于反馈 API 与实现可能会调整。此外I2S 与 SPI 共享引脚使用时需避免冲突板级配置中MICROPY_HW_I2S2 (1)ports/stm32/boards/PYBV11/mpconfigboard.h确认 PYBv1.1 启用 id2 的 I2S。详细说明见 docs/library/machine.I2S.rst。CAN 总线pyboard 支持 CAN 总线通信可用于车载/工业现场总线场景from pyb import CAN can CAN(1, CAN.LOOPBACK) can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126)) can.send(message!, 123) # 发送 ID 为 123 的消息 can.recv(0) # 在 FIFO 0 上接收消息CAN(id, mode)CAN.NORMAL正常模式、CAN.LOOPBACK回环模式自发自收便于测试setfilter(bank, mode, fifo, params)配置接收过滤器CAN.LIST16表示 16 位 ID 列表模式send(data, id)发送消息recv(fifo)从指定 FIFO 接收。板级配置中 CAN1 命名为 YATXB9/Y4, RXB8/Y3CAN2 命名为 YBTXB13/Y6, RXB12/Y5见 ports/stm32/boards/PYBV11/mpconfigboard.h。完整方法见 docs/library/pyb.CAN.rst。板载加速度计板载 MMA7660 三轴加速度计可通过pyb.Accel读取from pyb import Accel accel Accel() print(accel.x(), accel.y(), accel.z(), accel.tilt())x()/y()/z()返回三轴加速度读数tilt()返回倾斜方向0-7对应 8 个方向之一。板级配置中MICROPY_HW_HAS_MMA7660 (1)ports/stm32/boards/PYBV11/mpconfigboard.h与 MMA 的 AVDD 供电引脚 B5同上 L104-L105定义了该外设启动流程中也会调用accel_init()完成初始化ports/stm32/main.c。教程示例见 docs/pyboard/tutorial/accel.rst。实战将各模块组合为一个小程序将上述 API 组合可以快速验证板载外设是否工作正常。以下脚本将每秒读取加速度计并闪烁 LEDimport time from pyb import LED, Accel led LED(1) accel Accel() while True: x, y, z accel.x(), accel.y(), accel.z() print(accel: x%d y%d z%d % (x, y, z)) led.toggle() time.sleep_ms(1000)将脚本保存为main.py放入 pyboard 的 USB 闪存盘复位后即可自动运行参见 docs/pyboard/general.rst 中关于 boot 文件系统的说明。深入阅读docs/pyboard/general.rst本地文件系统/flash、/sd、SKIPSD、启动模式、LED 故障指示docs/pyboard/tutorial/index.rst面向初学者的分步教程docs/library/index.rstpyb与machine模块完整 API 文档ports/stm32/boards/PYBV11/mpconfigboard.hPYBv1.1 板级硬件映射源码ports/stm32/main.c启动流程、文件系统挂载与 boot 序列源码。【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址: https://gitcode.com/gh_mirrors/mi/micropython创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。