哥伦布 (STM32F407) 快速参考手册

哥伦布开发板使用STM32F407ZGT6作为主控,以下是哥伦布描述图:

Columbus

以下是快速参考内容,如果你是第一次使用哥伦布开发板,请考虑先阅读以下章节内容:

通用控制

See pyb.

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, 等待外部中断

延时和计时器

使用 time 模块:

import time

time.sleep(1)           # 睡眠1s
time.sleep_ms(500)      # 睡眠500ms
time.sleep_us(10)       # 睡眠10ms
start = time.ticks_ms() # 获取毫秒计数器的值
delta = time.ticks_diff(time.ticks_ms(), start) # 计算启动时间

板载LEDs

See pyb.LED.

from pyb import LED

led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
led.toggle()
led.on()
led.off()

板载按键

See pyb.Switch.

from pyb import Switch

sw = Switch()
sw.value() # 返回 True 或者 False
sw.callback(lambda: pyb.LED(1).toggle()) #按键按下执行相关函数

引脚和GPIO口

See pyb.Pin.

from pyb import Pin

p_out = Pin('A0', Pin.OUT_PP)
p_out.high()
p_out.low()

p_in = Pin('E3', Pin.IN, Pin.PULL_UP)
p_in.value() # 获取数值, 0 或者 1

舵机控制

See pyb.Servo.

from pyb import Servo

s1 = Servo(1) # 舵机连接到接口1 (X1, VIN, GND)
s1.angle(45) # 旋转到45°位置
s1.angle(-60, 1500) # 在1500毫秒内转到-60°的位置
s1.speed(50) # 适用于连续旋转舵机

注意: 哥伦布开发板只有3路舵机接口 1->A0, 2->A2, 3->A3。

外部中断

See pyb.ExtInt.

from pyb import Pin, ExtInt

callback = lambda e: print("intr")
ext = ExtInt(Pin('A0'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)

计时器

See pyb.Timer.

from pyb import Timer

tim = Timer(1, freq=1000)
tim.counter() # 获取计时器数值
tim.freq(0.5) # 0.5 Hz
tim.callback(lambda t: pyb.LED(1).toggle())

实时时钟

See pyb.RTC

from pyb import RTC

rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 设置日期和时间
rtc.datetime() # 获取日期和时间

PWM (脉宽调变)

See pyb.Pin and pyb.Timer.

from pyb import Pin, Timer

p = Pin('A0') # X1 has TIM2, CH1
tim = Timer(2, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p)
ch.pulse_width_percent(50)

ADC (模数转换)

See pyb.Pin and pyb.ADC.

from pyb import Pin, ADC

adc = ADC(Pin('A5'))
adc.read() # 读取数值, 0-4095

DAC (数模转换)

See pyb.Pin and pyb.DAC.

from pyb import Pin, DAC

dac = DAC(Pin('A5'))
dac.write(120) # 输出数值 0 至 255

UART(串行总线)

See pyb.UART.

from pyb import UART

uart = UART(3, 115200)
uart.write('hello')
uart.read(5) # 读取 5 个字节

SPI总线

See pyb.SPI.

from pyb import SPI

spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
spi.send('hello')
spi.recv(5) # 接收5个字节
spi.send_recv('hello') # 发送和接收5个字节

I2C总线

硬件I2C可以直接通过X和Y半部分接口直接定义成 I2C('X')I2C('Y') ,此时使用默认的I2C接口。 另外也可以直接使用标识符,例如 I2C(1)。 软件I2C可以通过 sclsda 结合引脚来自定义。 更多详细信息请看 machine.I2C.

from machine import I2C

i2c = I2C('X', freq=400000)                 # 定义硬件I2C对象
i2c = I2C(scl='B10', sda='B11', freq=100000)  # 定义软件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支持,请参阅 pyb.I2C.

CAN总线 (区域网络控制)

See pyb.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 上接收信息

4.3寸MCU显示屏

详情请参考 tftlcd.LCD43Mtouch.GT1151 .

LCD例程:

import tftlcd

d = tftlcd.LCD43M(portrait=1)  #构建LCD对象
d.fill((255, 255, 255))  #填充白色
d.drawRect(0, 0, 100, 100, (255,0,0))  #画红色矩形
d.printStr('Hello 01Studio!', 0, 0, (0,255,0))  #写字符
d.Picture(0, 0, '/flash/curry.jpg')  #显示图片

触摸例程:

import touch

t = touch.GT1151(portrait=1)  #构建触摸屏对象
t.read()  #获取触摸状态和坐标

摄像头

OV2640摄像头的应用。详情请参考 sensor.OV2640 .

示例:

import sensor

cam = sensor.OV2640() #构建摄像头对象。
cam.set_framesize(sensor.VGA) #设置帧大小
cam.snapshot('/flash/test.jpb')  #拍照并保存
    cam.display()  #液晶屏实时显示摄像头图像

音频

WM8978音频应用。详情请参考 audio.WM8978

示例:

import audio

wm = audio.WM8978()  #构建音频对象
wm.load('/flash/music/Love.mp3')  #加载音频文件
wm.play() #播放音乐
wm.pause()  #暂停播放
wm.stop()  #停止播放
wm.volume(80)  #音量设置为80
wm.record('/flash/test.wav', 80) #开始录音,输入增益为80

视频

构建该对象可以轻松实现avi视频的应用。详情请参考 video.VIDEO

示例:

import video

v = video.VIDEO()  #构建视频对象
v.load('/sd/video/badapple.avi')  #加载视频文件
v.play() #播放视频
v.pause()  #暂停播放
v.stop()  #停止播放
v.volume(80)  #音量设置为80

GUI-触摸按钮

TouchButton 类提供触摸按钮控制接口,通过构建该对象可以轻松显示屏触摸按钮应用。 详情请参考 gui.TouchButton .

示例:

import gui

B1 = gui.TouchButton(0,0,120,80,(255,0,0),'LED3',(255,255,255),fun1) #构建一个按钮
print(B1.ID())  #打印按钮编号