rt-thread/bsp/essemi/es32vf2264/applications/arduino_pinout
Meco Man d2c12e2da8 [RTduino] change the pinout group name 2024-03-29 21:49:13 +08:00
..
examples [bsp][essemi]es32vf2264更新部分库函数和驱动,添加RTduino支持 (#7619) 2023-06-08 02:13:01 -04:00
picture [bsp][essemi]es32vf2264更新部分库函数和驱动,添加RTduino支持 (#7619) 2023-06-08 02:13:01 -04:00
README.md [bsp][essemi]es32vf2264更新部分库函数和驱动,添加RTduino支持 (#7619) 2023-06-08 02:13:01 -04:00
SConscript [RTduino] change the pinout group name 2024-03-29 21:49:13 +08:00
arduino_pins.xlsx [bsp][essemi]es32vf2264更新部分库函数和驱动,添加RTduino支持 (#7619) 2023-06-08 02:13:01 -04:00
pins_arduino.c [bsp][essemi]es32vf2264更新部分库函数和驱动,添加RTduino支持 (#7619) 2023-06-08 02:13:01 -04:00
pins_arduino.h [RTduino] pins_arduino.h add limit check 2024-03-08 09:39:57 +08:00

README.md

ES32VF2264的Arduino生态兼容说明

1 RTduino - RT-Thread的Arduino生态兼容层

ES32VF2264已经适配了RTduino软件包可正常使用全部功能包含GPIO、PWM、I2C、SPI、UART功能。除标准arduino uno的接口外该开发板还额外添加了4个led和一组方向键对应的GPIO由于设计原因该开发板仅有A0-A1两个ADC可用原本对应A2-A5的ADC被换为了数字接口(可用作SPI1)。更多信息,请参见RTduino软件包说明文档

1.1 使用CDK+Env

  1. Env 工具下敲入 menuconfig 命令,或者 RT-Thread Studio IDE 下选择 RT-Thread Settings
Hardware Drivers Config --->
    Onboard Peripheral Drivers --->
        [*] Compatible with Arduino Ecosystem (RTduino)
  1. 进入RTduino配置打开需要使用的各项配置 (SPI,I2C,Adafrui等)
RT-Thread online packages --->
    system packages --->
        RTduino: Arduino Ecological Compatibility Layer
  1. 使用 pkgs --update下载RTduino包及其他软件包
  2. 使用scons --target=cdk生成代码

2 Arduino引脚排布

该BSP遵照Arduino UNO板的引脚排列方式并额外扩展了一些LED和按键更多引脚布局相关信息参见 pins_arduino.cpins_arduino.h

arduino引脚排布参见下图(或arduino_pins.xlsx)。

注意由于设计原因左边部分原本对应Arduino的A2-A5这4个ADC接口不可用可以作为普通数字IO或SPI1使用。

image-20230602165933931

各引脚功能参见下表

Arduino引脚编号 ES32引脚编号 备注
D0 PC11 CUART2 RX
D1 PC10 CUART2 TX
D2 PB5 普通IO
D3 PC15 PWM3 通道4
D4 PB4 普通IO
D5 PC7 PWM2 通道2
D6 PC6 PWM0 通道1
D7 PA8 普通IO
D8 PB11 普通IO
D9 PB10 普通IO
D10 PA4 SPI片选/普通IO
D11 PA7 SPI0_MOSI/普通IO
D12 PA6 SPI0_MISO/普通IO
D13 PA5 SPI0_SCK/普通IO
D14 PB3 I2C0_SDA
D15 PB2 I2C0_SCL
D16 PA15 LED4
D17 PC12 LED5
D18 PC13 LED6
D19 PC14 LED7
D20 PB7 KEY_UP
D21 PB9 KEY_DOWN
D22 PB6 KEY_LEFT
D23 PB8 KEY_RIGHT
D24 PD2 KEY_CENTER
D25 PB15 SPI1_MOSI/普通IO
D26 PB14 SPI1_MISO/普通IO
D27 PB13 SPI1_SCK/普通IO
D28 PB12 SPI片选/普通IO
A0 PC1 ADC
A1 PC2 ADC

3 I2C总线

ES32-Arduino支持的I2C总线是i2c0。

I2C的引脚都是被RT-Thread I2C设备框架接管的不需要直接操控这两个引脚。

在RTduino中选择启用<Wire.h>即可使用。

或者在RTduino中开启Adafruit_Bus后可使用Adafruit_I2CDevice.h控制

4 SPI总线

ES32-Arduino的SPI总线是spi0、spi1 SCKMISOMOSI引脚是被RT-Thread SPI设备框架接管的不需要直接操控这3个引脚。

在RTduino中选择启用<SPI.h>即可使用,用户需要自行控制片选。

或者在RTduino中开启Adafruit_Bus后使用Adafruit_SPIDevice.h控制。

5 测试说明

在applications/arduino_pinout/examples/arduino_examples.cpp文件中已经根据功能预设了一系列函数用于测试arduino各个功能,可根据测试需要取消注释对应的宏定义即可启用对应的测试。如果需要测试请将arduino_examples.cpp文件的内容覆盖到applications/arduino_main.cpp文件中

  1. RTduino各功能测试

目前支持的测试如下:

宏定义 名称 描述
ARDU_TEST_GPIO 数字GPIO测试 测试数字管脚的输出功能,包括两个管脚输出高/低电平一个管脚输出一个0.5s周期的方波
ARDU_TEST_PWM 模拟PWM输出测试 PWM功能输出测试分别在三个PWM管脚输出不同的三种占空比的方波
ARDU_TEST_UART UART测试 在cuart2串口不断打印"Hello"
ARDU_TEST_ADAFRUIT_I2C AdafruitI2C测试 使用AdafruitI2C库发送数据测试正常可以收到不断发送的"HelloRTduinoHello"
ARDU_TEST_ADAFRUIT_SPI AdafruitSPI测试 使用AdafruitSPI库发送数据测试正常可收到不断的"TEST"
ARDU_TEST_I2C I2C测试 通过I2C接口发送数据测试正常可收到不断的"Hello"
ARDU_TEST_SPI SPI测试 通过SPI接口发送和接收数据测试正常可收到不断的"ABCD"
ARDU_TEST_INT 中断测试 测试外部中断,按下方向键的中键会打印相关信息
ARDU_TEST_DIGITAL_READ 数字读测试 不断读取各个方向键的状态,并在按下时输出信息
ARDU_TEST_ADC_READ ADC测试 循环读取各个ADC的数据并通过串口打印

6 其他说明

1.ADC

目前ES32的ADC返回的是原始值(范围0-4095),需要计算转换为实际的电压值,暂时不支持分辨率调节。

2.对非数字IO的管脚不要调用pinMode

非数字IO的管脚在其他地方已经初始化了再次调用pinMode会使他变为普通管脚且无法再重新初始化为非数字IO的功能。即对于任意管脚可以调用pinMode使它变为数字IO管脚但这一过程不可逆原有的预设功能将会失效

3.SPI/I2C/UART使用

默认开启了spi0、spi1、i2c0、cuart1(默认控制台串口)、cuart2,如果需要使用其他的spi/i2c/uart可以在配置中启用并在初始化时指定名称即可。如果想要调整管脚信息可以使用ESCodeMaker辅助但要注意打开对应的外设。

SPI必须先调用begin才能使用其他函数

4.C++异常和RTTI

若使用c++异常,则该机制会占用大量内存(~18k),该内存会在C++部分初始化时使用malloc申请。在编译参数中加入-fno-exceptions禁用c++异常机制可去除该问题。

若使用RTTI(运行时类型识别)会需要额外的stdc++库支持需要在CDK的Linker页面中在Library Name中添加"stdc++",可通过在编译参数中加入-fno-rtti禁用但由于CDK不区分C和C++的编译参数会导致编译C文件时产生警告"warning: command-line option '-fno-rtti' is valid for C++/D/ObjC++ but not for C"。

本BSP默认禁用异常连接stdc++库

5.已知问题

  1. 开启C++选项后即使未选择使用C++ thread也会引入thread支持此支持需要使用event若未开启则会编译报错。需要在"RT-Thread Kernel → Inter-Thread communication"中,开启"Enable Event Flag"
  2. rt_atomic.h文件循环包含导致编译报错临时解决方案在编译器的宏定义中添加"__RT_ATOMIC_H__"临时屏蔽该文件之后的解决方案等待rt-thread更新

7 参考资料