Raspberr Pi Pico 笔记

上学期末做项目,要用到下位机实现底层的硬件控制。然而STM32板子价格疯涨。看着本来十几块的小板子一下子涨到近40块,这个功能相似的树莓派pico板子倒被我看上了。虽然最后为了求稳,我还是用了STM32板子,不过借着这个机会我也成功搞来了几块pico玩。

网上关于pico的教程十分少且碎,我只能看官方文档慢慢学。目前笔记也不很全、甚至可以说有些乱,但说不定可以帮后来人尽快地上手。


上电刷机

挺简单的,按住BOOTSET键用microUSB连电脑,之后就可以用uf2程序以文件复制的方式刷机了。

MicroPython的uf2文件可以从这里下载:microPython环境

而对于C/C++而言,需要编译出uf2文件,然后如上烧进板子中。

在这里插入图片描述

管脚图

在这里插入图片描述

MicroPython控制

machine模块

machine.Pin

GPIO类。通过类似下面的代码可以实现对GPIO的操作。

switch = Pin(0, Pin.IN, Pin.PULL_DOWN)  # 设置下拉输入
trigger = Pin(1, Pin.IN, Pin.PULL_UP)  # 设置上拉输入
led = Pin(25, Pin.OUT)  # 板载LED为25号GP

state = 0
def change():
    global state
    state = 1-state

def setLED(pin):  # 中断处理函数,接收一个参数为触发者的Pin对象
    led.value(state)
    # 无参数时,value()返回引脚的值
    # 有参数时,value(i)设置引脚值为i
    
trigger.irq(setLED, Pin.IRQ_FALLING)  # 设置下降沿触发中断

while True:
    if switch.value():  # 如果为高电平
        change()
        while switch.value():
            pass  # 在降回低电平之前,等待

引脚设置相当方便~

初始化:

初始化需要至少指定GP引脚,GP对应的物理引脚见上图。同时要指定I/O,若未指定,则引脚默认置0。

p1 = Pin(0)
p2 = Pin(1, Pin.IN)
p3 = Pin(2, Pin.OUT)

指定为OUT时,引脚初始为低电平,可以使用high()函数或on()函数来置位、用low()函数或off()函数来复位、用value(v)函数来直接指定值、用toggle()函数来反转高低电平。此时,还可以用value()函数来查询引脚的电平高低。具体可以看下面两节。

指定为IN时,引脚初始电平为初始化时所处电平,但可以指定上拉输入和下拉输入:

p4 = Pin(3, Pin.IN, Pin.PULL_UP)
p5 = Pin(4, Pin.IN, Pin.PULL_DOWN)

此时,high()low()on()off()toggle()value(v)都可以顺利调用但不会生效。使用value()函数可以正常查询引脚电平。

除了默认的初始化,还可以使用重初始化函数init(),除了无需设置引脚,其他同上。

设置引脚电平:

仅能对OUT GP设置。高电平为3V3。

使用high()on()value(1)来置位,即将引脚电平置高;使用low()off()value(0)来复位,即将引脚电平置低;使用toggle()来反转高低。

led = Pin(25, Pin.OUT)
led.high()
sleep(2)
led.low()
sleep(3)
while True:
    led.toggle()
    sleep(0.5)

读取引脚电平:

对各类GP,皆可读取。

使用value()来读取,高电平返回1,低电平返回0。

led = Pin(25, Pin.OUT)
button = Pin(0, Pin.IN, Pin.PULL_DOWN)
while True:
    led.value(button.value())

设置/查询中断:

对各类GP皆可设置中断。

使用irq(func[, flag])函数来设置。第一个参数指定中断触发调用的函数,函数须有一个参数,用来接收触发中断的Pin对象。第二个参数可选,用来指定上升沿/下降沿触发,默认为IRQ_FALLING | IRQ_RISING,即电平任意变化触发。

函数会返回GP的irq对象。它的flags()方法可以查询当前触发状态,未触发则为0,否则为IRQ_FALLINGIRQ_RISING之一。它的trigger()方法返回中断种类,未设置中断则为0,否则为IRQ_FALLINGIRQ_RISINGIRQ_FALLING | IRQ_RISING之一。

无参数调用irq()则只会返回GP的irq对象。

button = Pin(0, Pin.IN, Pin.PULL_UP)

def handler(pin):
    print('I am pulled down.' if pin.irq().flags() == Pin.IRQ_FALLING else 'I am pulled up.')

button.irq(handler)
machine.PWM

直接上官方例程吧,因为挺简单的。

官方例程:

# Example using PWM to fade an LED.
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值