本帖最后由 dcexpert 于 2016-10-31 12:14 编辑
PYB Nano 开发板快速指南
这篇快速指南是为 MicroPython 和 PYB Nano 的初学者写的,通过这个文档,可以快速掌握 MicroPython 和 PYB Nano 的基本使用方法。
PYB Nano开发板简介
PYB Nano开发板是目前体积最小、成本最低的MicroPython开发板
PYB Nano的主要特点- STM32F401CEU6微控制器
- 16M主时钟
- 支持 macroUSB
- 2路UART
- 3路I2C
- 3路SPI
- 10路12位ADC
- 支持RTC
- 支持后备电池输入
- 支持USB供电和VIN输入(最高12V)
- 一个用户按键和一个复位键
- 带有 4个支持亮度调节功能的 LED
- 带有加速度传感器(MMA7660)
- 支持USB升级功能
- 低成本、高性能
- 开源
应用范围- 教育、学习
- 电子竞赛
- 机器人
- 智能硬件
- 物联网开发
- 快速原型设计
- 创客、DIYer
PYB Nano非常适合作为MicroPython的入门开发板,它支持绝大部分MicroPython的功能和函数,成本却只有官方 PyBoard 的几分之一,是学习MicroPython的首选开发板之一,也是从Arduino进阶到其它应用的最好选择。
系统需求
在开始使用 PYB Nano 前,需要做一点准备工作:
- 一台计算机,安装了不低于Win7,或者Linux、MacOS操作系统,32位/64位都可以
- 串口终端软件,如超级终端、putty、MobaXterm、SecureCRT等
- macroUSB数据线(可以使用安卓手机的数据线)
因为Windows的用户最多,所以下面的介绍也以Windwos为主,但其它操作系统下的用法也是类似的,甚至更简单。
另外,为了顺利使用 MicroPython,大家还需要对 Python 语言有基本了解,因为MicroPython 是基于 python3 的。
安装驱动
在Windows系统中,第一次连接开发板时,会出现一个PYBFLASH磁盘,同时提示需要安装新的设备。这个新的设备就是虚拟串口,它的驱动程序就在新出现的PYBFLASH磁盘上,浏览到这个磁盘安装驱动,安装后就可以使用。
在大部分的Linux、MacOS下无需安装任何驱动程序。
终端软件设置
在调试时,通常都使用串口终端软件。在使用前,需要对终端软件的串口参数进行设置。
先用数据线连接开发板,然后运行任一串口终端软件,并设置串口为 PYB Nano 对应的虚拟串口,在将串口参数设置如下:
波特率
| 115200
|
数据位
| 8
|
奇偶校验
| 无
|
停止位
| 1
|
流量控制
| 无
|
个别软件还需要设置字符集才能正常显示。
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条命令
- 左右键,在当前命令行中移动,编辑命令
基本用法
LED
无论在哪个开发板中,LED都是最常用的的例程,我们也从这里开始。
PYB Nano上有4个LED,分别是红、绿、黄、蓝色。我们可以通过 pyb.LED(n) [n = 1-4]去使用它们。如:
- pyb.LED(1).on() # LED1亮
- pyb.LED(2).off() # LED2灭
- pyb.LED(3).toggle() #翻转LED3
- pyb.LED(4).intensity(20) # 设置LED4亮度20 [范围是0-255]
复制代码
呼吸灯,下面程序将LED3设置为呼吸灯
- from pyb import Timer
-
- ia = 1
- da = 1
- def fa(t):
- global ia, da
- if (ia==0)or(ia==255):
- da=256-da
- ia=(ia+da)%256
- pyb.LED(3).intensity(ia)
-
- tm=Timer(1, freq=200, callback=fa)
复制代码
在其它MicroPython开发板上,LED的数量可能是1-4个,但用法是一样的。此外不是每种 MicroPyhon 开发板的 LED 都支持亮度调整功能(intensity())。
按键
在MicroPython的Pyboard中,预定义了按键开关对象,它的使用方法如下:
如果按键按下,返回True,否则返回False。
GPIO
使用GPIO,需要导入pyb库的Pin对象。
- from pyb import Pin
-
- p_out = Pin('X1', Pin.OUT_PP) # 定义 X1 引脚为输出
- p_out.high() # 输出高电平
- p_out.low() # 输出低电平
- p_out.value(1) # 等同于 p_out.high()
-
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP) # 定义 X2 为输入
- p_in.value() # get value, 0 or 1
复制代码
外中断
下面代码将按键(PC13)定义为外中断输入,上升沿触发模式。每当按下一次按键,LED1就会翻转一次。
- from pyb import Pin, ExtInt
-
- callback = lambda e: pyb.LED(1).toggle()
- ext = ExtInt(Pin('C13'), ExtInt.IRQ_RISING, Pin.PULL_UP, callback)
复制代码
定时器
定时器需要使用到pyb库的Timer对象。下面程序中,先设置定时器1的频率为1000Hz,然后读取计数器的值,再设置定时器的频率为0.5Hz,并在定时器回调函数(中断)里翻转LED2。
- from pyb import Timer
-
- tim = Timer(1, freq=1000)
- tim.counter() # get counter value
- tim.freq(0.5) # 0.5 Hz
- tim.callback(lambda t: pyb.LED(2).toggle())
复制代码
PWM
PWM是定时器模块的一个子功能,可以将定时器的某一通道设置为PWM输出。下面代码将 PA3 设置为定时器2的CH4输出,最后设置占空比是10%。注意占空比参数可以是浮点数。
- from pyb import Pin, Timer
-
- p = Pin('A3') # X1 has TIM2, CH4
- tim = Timer(2, freq=1000)
- ch = tim.channel(4, Timer.PWM, pin=p)
- ch.pulse_width_percent(10)
复制代码
ADC
PYB Nano带有10路12位ADC输入,可以非常容易读取ADC的参数。下面的代码读取引脚 X8 (PB0)的输入
- from pyb import Pin, ADC
-
- adc = ADC(Pin('X8'))
- adc.read() # read value, 0-4095
复制代码
另外一种读取ADC的方法是
- from pyb import Pin, ADC
-
- a=pyb.ADCAll(12) # 设置ADC为12位模式
- a.read_channel(8) # 读取ADC8
- a.read_core_temp() # 读取内部温度传感器
复制代码
UART
- from pyb import UART
-
- uart = UART(1, 9600)
- uart.write('hello')
- uart.read(5) # read up to 5 bytes
复制代码
I2C
- from pyb import I2C
-
- i2c = I2C(1, I2C.MASTER, baudrate=100000)
- i2c.scan() # returns list of slave addresses
- i2c.send('hello', 0x42) # send 5 bytes to slave with address 0x42
- i2c.recv(5, 0x42) # receive 5 bytes from slave
- i2c.mem_read(2, 0x42, 0x10) # read 2 bytes from slave 0x42, slave memory 0x10
- i2c.mem_write('xy', 0x42, 0x10) # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
SPI
- from pyb import SPI
-
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
- spi.send('hello')
- spi.recv(5) # receive 5 bytes on the bus
- spi.send_recv('hello') # send a receive 5 bytes
复制代码
加速度传感器
PYB Nano内置了加速度传感器MMA7660,可以直接读取传感器的参数(数值范围是[-32..32])。
- acc = pyb.Accel()
- while True:
- print(acc.x(), acc.y(), acc.z())
- pyb.delay(500)
复制代码
其它常用功能
- pyb.delay(500) # 延时500ms
- pyb.udelay(20) # 延时20us
- pyb.unique_id() # 读取芯片的唯一序列号
- pyb.millis() # 复位后的运行时间(ms)
- pyb.hard_reset() # 复位,和按下复位键的效果相同
- pyb.bootloader() # 直接进入 bootloader 模式升级
- pyb.disable_irq() # 禁止中断
- pyb.enable_irq() # 恢复中断
- pyb.freq() # 读取系统时钟
- pyb.wfi() # 等待内部或外部中断
- pyb.stop() # 休眠模式,需要外部中断或者实时时钟唤醒
复制代码
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模式,需要安装ST的DfuSe_demo软件(Windows)或者dfu-util(Linux)。使用SWD需要将开发板的SWD接口(PA13/PA14)连接到编程器,通过编程软件下载。
参考资料
以上是 MicroPython 和 PYB Nano 的最基础知识,掌握后大家就可以逐步深入了。下面是一些参考网站和论坛,供大家参考。