PYB操作-点灯开箱、GPIO操作

学习内容

pyb的一些简单操作。熟悉micropython在pyb上面的应用

开发环境

putty、PYB nano

MocroPython的启动模式

在启动后,MicroPython会先运行 boot.py 文件,加载用户驱动,然后在运行main.py,执行用户程序。可以将用户程序放在main.py中,也可以在main.py中再加载其它的文件。

常见故障

在使用过程中,我们需要注意下面问题,避免造成文件系统破坏、数据丢失。
取下数据线前,需要先U盘那样安全删除硬件,弹出PYBFLASH磁盘,否则可能会造成文件系统破坏,特别在修改了文件或复制新文件到PYBFLASH磁盘后。
不要轻易按复位键,这样会造成当前的USB通讯中断。一般的问题,可以通过按下Ctrl-D软复位接近。

出厂模式

使用时间长了,因为各种原因可能会出现故障,造成无法正常启动,不能进入REPL,文件系统破坏等现象,这时就需要通过出厂模式进行恢复。

进入出厂模式的方法是:
按下复位键(RESET)的同时,按住用户按键SW。
然后保持用户按键不放,释放复位键。
这时LED将循环显示:绿-》黄-》绿+黄-》灭
等黄绿灯同时亮时,松开用户键,这时黄绿灯会同时快速闪4次
然后红灯亮起(这时红绿黄三个灯同时亮)
红灯灭,开始进行恢复到出厂状态
所有灯都灭,恢复出厂设置完成。
恢复出厂设置后,PYBFLASH中的内容会丢失,变为默认文件。

升级固件

MicroPython的更新速度很快,每次更新都会带来一些新的功能,修正错误。所以掌握 MicroPython 的固件升级方法是有必要的。

PYB Nano支持下面几种升级方法:
通过DFU模式升级 通过SWD方式升级
使用DFU模式,需要安装ST的DfuSe_demo软件(Windows)或者dfu-util(Linux)。使用SWD需要将开发板的SWD接口(PA13/PA14)连接到编程器,通过编程软件下载。

REPL 的用法

通常调试程序时,都是在 MicroPython 的 REPL (read–eval–print loop,循环交互解释器)环境下运行。在REPL下可以直接输入命令,有内置的解释器执行。如果命令输入正常,就会显示运行结果,否则会给出错误提示。

MicroPython支持几个常用的快捷键,如果你熟悉串口终端,会发现它们的习惯是一样的。

  • Ctrl-C,停止正在的程序或终止当前的命令行

  • Ctrl-D,软复位(soft reset)

  • Ctrl-B,显示系统提示

  • Ctrl-E,进入粘贴模式。可以按下Ctrl-C退出粘贴模式,Ctrl-D完成粘贴

  • Tab,键盘上的Tab键,可以补全命令
    除了Ctrl-C,其它快捷键需要在空命令行下(没有输入任何字符)才能生效。此外,还可以使用上下左右光标键

  • 上下键,调出以前输入的命令。MicroPython可以保存最后输入的6条命令

  • 左右键,在当前命令行中移动,编辑命令

配置终端

MicroPython和PC的标准连接是通过USB接口,使用虚拟磁盘和虚拟串口(VCP)方式。其中虚拟串口(在pyboard和STM32上可以同时使用USB虚拟串口和物理串口两种方式)是调试中最常用的方式,无须频繁复制文件避免造成Flash的损耗。在MicroPython上我们使用串口终端软件和MicroPython的REPL进行交互,发送命令。通过串口终端软件,我们可以方便地在 REPL 中输入代码,运行和调试程序,打印结果。开发MicroPython程序时,掌握终
端软件的使用是非常有必要的,注意不要使用Windows下的串口调试助手、串口精灵这样的软件,因为它们只适合一般的串口调试,发送数据,但是不方便输入命令,不支持粘贴功能,不能和REPL进行交互操作。
这里我用的是putty
配置过程接很简单,首先打开设备管理器:

这里可以看到对应PYB板子的串口,我们只需要在PUTTY打开这个串口终端即可。
这里我的串口是COM20 波特率是115200,记得选择serial。当然为了方便大家可以把这个COM存起来。
在这里插入图片描述
大功告成!现在只需要打开对应的端口即可使用,效果如图:
在这里插入图片描述
当然我们也可以在我的电脑板子上的文件:
在这里插入图片描述
下面就简单操作下板载的函数熟悉下操作吧~

PYB库函数操作

1.点灯工程师~(点亮,关闭,翻转,闪烁)

首先要说明的是可以在终端进行代码操作,也可以将代码输入main.py中,在终端中输入的将不会保存,而在main.py中输入后,保存后按下Ctrl+D后,实现软件复位。将会看到编写的代码实现的操作。

import pyb
# 点亮操作
pyb.LED(1).on() #点亮 LED1
pyb.LED(2).on() #点亮 LED2
pyb.LED(3).on() #点亮 LED3
pyb.LED(4).on() #点亮 LED4

# 关闭操作
pyb.LED(1).off() #关闭 LED1
pyb.LED(2).off() #关闭 LED2

# 翻转操作
pyb.LED(1).toggle() #翻转 LED1

#闪烁操作
while True:
	pyb.LED(1).toggle() #翻转 LED1
	pyb.delay(200) #延时200ms

除了打开、关闭、翻转功能外,部分 LED 还可以控制亮度。在PYB上,LED3和LED4支持亮度调整功能,如可以这样控制LED3的亮度:

import pyb
pyb.LED(3).intensity(10)

亮度的范围为0~255,0最暗(关闭),255最亮。对于那些不支持亮度功能的LED,在设置亮度时,0是关,大于0就是开。
LED.intensity([value])
读取或者设置LED亮度。亮度的范围是0(熄灭)到255(最亮)。
注意:只有LED(3)和LED(4)支持亮度调节功能,它们使用定时器的PWM方式来控制LED的亮度。LED(3)使用定时器2,LED(4)使用定时器3(如果改变了定时器2/3的参数,亮度调整功能会受到影响)。只有在使用了LED.intensity()功能,并且参数在1~
254之间时定时器才会自动配置为PWM模式。

1.1跑马灯

import pyb
leds =[pyb.LED(i) for i in range(1,5)] #定义led
n=0
while True:
	n = (n+1)%4
	leds[n].on()
	pyb.delay(200)
	leds[n].off()

1.2.往返式跑马灯

import pyb
n=1
dn=1
while True:
	pyb.LED(n).toggle()
	pyb.delay(200)
	pyb.LED(n).toggle()
	n=n+dn
	if (n>3)or(n<2):
		dn=-dn;#改变方向

2.按键的操作

2.1 读取按键键值

import pyb
sw = pyb.Switch() #定义按键对象
print(sw()) #读取按键状态

如果按下了按键,就返回True,否则返回False。我们还可以定义一个按键的回调函数(类似C语言里的中断函数),当按下按键时将自动执行这个回调函数。下面定义的回调函数中,每当按下一次按键,就将翻转一次LED1。

2.2 读取按键键值

import pyb
sw = pyb.Switch() #定义按键对象
print(sw()) #读取按键状态
while True:
	sw.callback(lambda:pyb.LED(1).toggle())

自己定义函数进行类似外部中断操作:

# main.py -- put your code here!
import pyb
sw = pyb.Switch() #定义按键对象
print(sw()) #读取按键状态
def f():
	pyb.LED(1).toggle()
while True:
	sw.callback(f)

3.GPIO的使用

首先我们需要导入pyb中的Pin模块,然后就可以定义一个Pin对象,及其使用的引脚和功能。这个和PYNQ操作类似:

3.1 配置gpio

from pyb import Pin
pin_demo =  Pin(Pin.cpu.A0) # 定义GPIO
pin_demo.init(Pin.OUT) # 配置gpio为输出

3.2 配置gpio功能

我们知道一个标准的GPIO可以设置为输入或者输出,在MicroPython中,可以用init()函数去设置Pin的功能,除了通用输出外,还可以设置推挽方式输出和开漏输出:

pin_demo.init(Pin.OUT) # 配置gpio为通用输出
pin_demo.init(Pin.OUT_PP) # 配置gpio为推挽输出
pin_demo.init(Pin.OUT_OD) # 配置gpio为开漏输出
pin_demo.init(Pin.IN) # 配置gpio为输入

对于输入,还可以设置内部的上拉下拉电阻状态,比如设置上拉电阻的方法是:

pin_demo.init(Pin.IN,pull=PULL_UP) # 配置gpio为输入

需要下拉电阻时设置pull参数为:pull=PULL_DOWN,而不需要上拉下拉电阻时就设置pull=PULL_NONE。

3.3 配置GPIO的输出

我们可以使用下面方法控制:

pin_demo.high()  #high
pin_demo(1)

pin_demo.low()  #low
pin_demo(0)

也可以使用value()函数设置输出电平:

pin_demo.value(1)
pin_demo.value(0)

3.4 配置GPIO的输入

对于GPIO的输入,可以直接读取:

pin_demo()

或者使用不带参数的value()函数:

pin_demo.value()
init(mode,pull=Pin.PULL_NONE,af=-1)

初始化GPIO。
mode:
◆ Pin.IN-输入
◆ Pin.OUT_PP-推挽输出(push-pull)
◆ Pin.OUT_OD-开漏输出(open-drain)
◆ Pin.AF_PP-第二功能,推挽模式
◆ Pin.AF_OD-第二功能,开漏模式
◆ Pin.ANALOG-模拟功能
pull
◆ Pin.PULL_NONE-无上拉下拉
◆ Pin.PULL_UP-上拉
◆ Pin.PULL_DOWN-下拉
af,当mode是Pin.AF_PP或Pin.AF_OD时,可以选择第二功能索引或名称
● af_list()
返回GPIO的第二功能列表

Pin.af_list(pyb.Pin.board.X1)
[Pin.AF1_TIM2, Pin.AF2_TIM5, Pin.AF7_USART2]

af()
返回GPIO第二功能索引值,如果没有使用第二功能将返回0,否则返回实际的索引值。
注意这个索引值并不是对应af_list()函数返回的列表,而是控制器手册中的第二功能映射表。PYB V10使用的控制器是STM32F405RG,可以参考它的数据手册第61页的“Table 9.Alternatefunction mapping”。如,PA11是AF10_USB_DM功能:

 Pin.af(pyb.Pin("A11"))
10

3.5 name

name() 返回GPIO的名称,如:

Pin.name(Pin("X15"))
'A8'

ain = Pin(Pin.cpu.A0)
ain.name()
'A0'

names()
返回GPIO和别名,如:

ain = Pin(Pin.cpu.A0)
ain.names()
['A0', 'X0', 'PA0']

pin() 返回引脚在端口中的序号
port() 返回端口序号。端口A的序号是0,端口B的序号是1,端口C的序号是2,以此类推。按键sw对应的引脚是B3,因此返回值是1。
● pull() 引脚的上拉状态。具体参数含义参考init()函数中pull参数。

在定义 GPIO 时我们使用了两种不同方式的名称。
第一种方式使用MCU的引脚名称,比较直观,但是比较长。
第二种方式是为GPIO起一个别名(小名),通过这个别名去使用GPIO,比较简洁。GPIO的别名并不是GPIO的定义,它只是为了方便区分不同的GPIO,从而方便后面编程使用。
在PYB V10上有两排排针,从板子中心分为两个部分。上边的以字母″Y″加数字命名,下边的以字母″X″加数字命名。注意″X″、″Y″这种方式只是MicroPython团队给出的一种命名方式,并不是一种标准。GPIO的别名不同于GPIO的变量名,它是可以任意起的,它是在编译固件时就设定好,一个GPIO可以有多个别名。如,对于用户按键,就有″X17″、″SW″等别名,我们可以用下面几种方式定义,效果是完全一样的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vuko-wxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值