瑞萨电子 RA 快速参考¶
瑞萨电子 EK-RA6M2 板。
以下是瑞萨电子 RA 板的快速参考。如果这是您第一次使用此板,了解微控制器和板的概述可能会很有用:
安装 MicroPython¶
请参阅教程的相应部分: Renesas RA 上的 MicroPython 入门。它还包括故障排除小节。
通用板控¶
MicroPython REPL 通过 USB 串行端口访问。制表符补全对于找出对象具有哪些方法很有用。粘贴模式 (ctrl-E) 对于将大量 Python 代码粘贴到 REPL 中很有用。瑞萨 RA 板的某些功能尚未实现,请参阅教程了解更多详细信息。
machine
模块:
import machine
machine.freq() # get the current frequency of the CPU
支持以下功能:
machine.freq()
machine.reset()
machine.soft_reset()
machine.unique_id()
目前不支持以下功能:
machine.reset_cause()
machine.bootloader([value])
machine.disable_irq()
machine.enable_irq(state)
machine.freq([hz])
machine.idle()
machine.sleep()
machine.lightsleep()
machine.lightsleep([time_ms])
machine.deepsleep()
machine.deepsleep([time_ms])
machine.wake_reason()
machine.time_pulse_us(pin, pulse_level, timeout_us=1000000,/)
machine.bitstream(pin, encoding, timing, data, /)
machine.rng()
延迟和计时¶
使用 time
模块:
import time
time.sleep(1) # sleep for 1 second
time.sleep_ms(500) # sleep for 500 milliseconds
time.sleep_us(10) # sleep for 10 microseconds
start = time.ticks_ms() # get value of millisecond counter
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
计时器¶
RA MCU 的系统定时器外设提供全局微秒时基并为其生成中断。软件定时器目前可用,数量不限(内存允许)。无需指定计时器 id(目前支持 id=-1),因为它默认为这个。
使用 machine.Timer
类:
from machine import Timer
tim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t: print(2))
- 目前不支持以下功能:
Timer(id) # 不支持硬件定时器。
引脚和 GPIO¶
使用 machine.Pin类:
from machine import Pin
p0 = Pin('P000', Pin.OUT) # create output pin on P000
p0.on() # set pin to "on" (high) level
p0.off() # set pin to "off" (low) level
p0.value(1) # set pin to on/high
p2 = Pin(Pin.cpu.P002, Pin.IN) # create input pin on P002
print(p2.value()) # get value, 0 or 1
p4 = Pin('P004', Pin.PULL_UP) # enable internal pull-up register
p5 = Pin('P005', Pin.OUT, value=1) # set pin high on creation
Pin id 对应于 RA MCU 的引脚名称,即 Pin.cpu.P106 和“P106”。RA MCU 有许多特性的引脚。但是,在某些情况下,引脚功能是固定的或未由板连接。请确认引脚映射的板手册。
UART(串行总线)¶
RA MCU 有一些称为 SCI(串行通信接口)的硬件 UART。UART id 对应 RA MCU 的 SCI 编号,UART(0) 为 SCI0,UART(1) 为 SCI1。
请参阅 machine.UART。
from machine import UART
uart1 = UART(1, 115200)
uart1.write('hello') # write 5 bytes
uart1.read(5) # read up to 5 bytes
板上可用的 UART 和引脚是固定的并遵循。这些 UART 之一用于 REPL。
EK-RA4M1 |
UART0(REPL) |
UART1 |
UART2 |
---|---|---|---|
tx |
P411 |
P401 |
P302 |
rx |
P410 |
P402 |
P301 |
EK-RA4W1 |
UART1 |
UART4(REPL) |
UART9 |
---|---|---|---|
tx |
P213 |
P204 |
P109 |
rx |
P212 |
P206 |
P110 |
EK-RA6M1 |
UART0(REPL) |
UART2 |
UART8 |
---|---|---|---|
tx |
P411 |
P302 |
P105 |
rx |
P410 |
P301 |
P104 |
EK-RA6M2 |
UART0(REPL) |
UART7 |
UART9 |
---|---|---|---|
tx |
P411 |
P401 |
P602 |
rx |
P410 |
P402 |
P601 |
RA4M1-CLICKER |
UART0 |
UART1(REPL) |
---|---|---|
tx |
P411 |
P401 |
rx |
P410 |
P402 |
目前不支持以下功能:
UART.init(baudrate) # now only 115200 is confirmed
UART.init(cts, rts) # Pins are fixed.
UART.init(invert)
UART.init(tx,rx) # Pins are fixed.
UART.init(txbuf)
UART.init(flow)
UART.irq(handler)
UART.irq(trigger=RX_ANY)
UART.irq(priority)
UART.irq(wake=machine.IDLE)
实时时钟 (RTC)¶
from machine import RTC
rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
# time, eg 2017/8/23 1:12:48
rtc.datetime() # get date and time
目前不支持以下功能:
RTC.init(datetime)
RTC.now()
RTC.deinit()
RTC.alarm()
RTC.alarm_left()
RTC.cancel()
RTC.irq()
ADC(模数转换)¶
from machine import ADC
adc = ADC('P000') # create an ADC object acting on a pin
adc.read_u16() # read a raw analog value in the range 0-65535
引脚 id 对应于 RA MCU 的引脚名称,即“P000”作为 AN000(模拟通道 000)。RA MCU 有许多模拟通道。但是,在某些情况下,电路板固定或不提供引脚功能。请确认 MCU 和板子手册的管脚映射。
目前不支持以下功能:
ADC.init()
ADC(sample_ns)
ADC(atten)
ADC.read_uv()
ADC.block()
SPI总线¶
RA MCU 有一些硬件 SPI(串行外设接口)。SPI id 对应 RA MCU 的 SPI 编号,即 SPI(0) 为 SPI0,SPI(1) 为 SPI1。如果没有附加参数,则调用 machine.SoftSPI()。
请参阅 machine.SPI。
from machine import SPI, Pin
spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
cs(0)
spi.write(b"12345678")
cs(1)
板上可用的 SPI 和引脚是固定的并遵循。
EK-RA4M1 |
SPI0 |
---|---|
sck |
P102 |
mosi |
P101 |
miso |
P100 |
cs |
P206 |
EK-RA4W1 |
SPI0 |
---|---|
sck |
P102 |
mosi |
P101 |
miso |
P100 |
cs |
P103 |
EK-RA6M1 |
SPI0 |
---|---|
sck |
P102 |
mosi |
P101 |
miso |
P100 |
cs |
P103 |
EK-RA6M2 |
SPI0 |
SPI1 |
---|---|---|
sck |
P102 |
P702 |
mosi |
P101 |
P701 |
miso |
P100 |
P700 |
cs |
P103 |
P703 |
RA4M1-CLICKER |
SPI0 |
---|---|
sck |
P102 |
mosi |
P101 |
miso |
P100 |
cs |
P103 |
目前不支持以下功能:
SPI.init(firstbit) # now fixed with SPI.LSB
SPI.init(baudrate) # now confirmed only 500000
I2C 总线¶
RA MCU 有一些硬件 IIC(内部集成电路总线)。I2C id 对应 RA MCU 的 I2C 编号可用,即 I2C(0) 为 IIC0,I2C(1) 为 IIC1。如果没有附加参数,则调用 machine.SoftI2C()。
from machine import I2C
i2c = I2C(0)
i2c.scan() # returns list of slave addresses
i2c.readfrom_mem(0x50, 0x10, 2, addrsize=16) # read 2 bytes from slave 0x50, slave memory 0x10
板上可用的 I2C 和引脚是固定的并遵循。
EK-RA4M1 |
|
---|---|
scl |
not supported |
sda |
not supported |
EK-RA4W1 |
I2C0 |
---|---|
scl |
P204 |
sda |
P407 |
EK-RA6M1 |
I2C0 |
---|---|
scl |
P400 |
sda |
P401 |
EK-RA6M2 |
I2C2 |
---|---|
scl |
P512 |
sda |
P511 |
RA4M1-CLICKER |
I2C1 |
---|---|
scl |
P205 |
sda |
P206 |
目前不支持以下功能:
I2C.init(freq) # now confirmed only 400000
I2C.deinit()
I2C.start()
I2C.stop()
PWM(脉宽调制)¶
不支持 PWM。
WDT(看门狗定时器)¶
不支持 WDT。
SD卡¶
通过将 microSD 卡设备连接到硬件 SPI0 引脚可以使用冻结的 sdcard 驱动程序 (drivers/sdcard/sdcard.py)。:
from machine import Pin, SPI
import os, sdcard
spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
sd = sdcard.SDCard(spi, cs)
os.mount(sd, '/sd')
os.listdir('/')
os.chdir('/sd')
os.umount('/sd')
OneWire 驱动程序¶
OneWire 驱动程序在软件中实现,适用于所有引脚:
from machine import Pin
import onewire
ow = onewire.OneWire(Pin(P012)) # create a OneWire bus on P012
ow.scan() # return a list of devices on the bus
ow.reset() # reset the bus
ow.readbyte() # read a byte
ow.writebyte(0x12) # write a byte on the bus
ow.write('123') # write bytes on the bus
ow.select_rom(b'12345678') # select a specific device by its ROM code
DS18S20 和 DS18B20 设备有一个特定的驱动程序:
import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(ds.read_temp(rom))
一定要在数据线上放一个4.7k的上拉电阻。请注意,convert_temp()
每次要对温度进行采样时都必须调用该方法。
NeoPixel 和 APA106 驱动程序¶
目前不支持 NeoPixel。