瑞萨电子 RA 快速参考

Renesas Evaluation Kit for RA6M2 MCU Group

瑞萨电子 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)

machine.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(模数转换)

machine.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()。

machine.I2C

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。