未验证 提交 9fa8c78c 编写于 作者: mysterywolf's avatar mysterywolf 提交者: GitHub

update arduino related (#5809)

- add comments
- remove ARDUINO_PWM_HZ
- remove initVariant blank function
- support DAC0
- improve Kconfig of STM32L475 PANDORA
- add readme
- add i2c1 bus device
上级 615dbe94
......@@ -15,7 +15,7 @@
{Arduino Pin, RT-Thread Pin [, Device Name(PWM or ADC), Channel]}
[] means optional
Digital pins must NOT give the device name and channel.
Analog pins MUST give the device name and channel(ADC or PWM).
Analog pins MUST give the device name and channel(ADC, PWM or DAC).
Arduino Pin must keep in sequence.
*/
const pin_map_t pin_map_table[]=
......@@ -43,9 +43,3 @@ const pin_map_t pin_map_table[]=
{A4, GET_PIN(C,1), "adc1", 11}, /* ADC */
{A5, GET_PIN(C,0), "adc1", 10} /* ADC */
};
/* initialization for BSP; maybe a blank function */
void initVariant(void)
{
/* Nothing needs to initialize for this BSP */
}
......@@ -7,6 +7,7 @@
* Date Author Notes
* 2021-12-10 Meco Man first version
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
......@@ -34,10 +35,8 @@
#define A4 (20)
#define A5 (21)
#define LED_BUILTIN D13 /* Built-in LED */
#define ARDUINO_PWM_HZ 500 /* Arduino UNO's PWM is around 500Hz */
#define LED_BUILTIN D13 /* Default Built-in LED */
#define ARDUINO_DEFAULT_IIC_BUS_NAME "i2c4"
#define ARDUINO_DEFAULT_IIC_BUS_NAME "i2c1"
#endif /* Pins_Arduino_h */
......@@ -17,7 +17,7 @@ menu "Onboard Peripheral Drivers"
config BSP_USING_ARDUINO
bool "Support Arduino"
select PKG_USING_RTDUINO
select RT_USING_PIN
select BSP_USING_GPIO
select BSP_USING_ADC
select BSP_USING_ADC1
select BSP_USING_PWM
......
# STM32L475潘多拉的Arduino生态兼容说明
## 1 RTduino - RT-Thread的Arduino生态兼容层
STM32L475潘多拉已经完整适配了[RTduino软件包](https://github.com/mysterywolf/RTduino),即RT-Thread的Arduino生态兼容层。用户可以按照Arduino的编程习惯来操作该BSP,并且可以使用大量Arduino社区丰富的库,是对RT-Thread生态的极大增强。更多信息,请参见[RTduino软件包说明文档](https://github.com/mysterywolf/RTduino)
### 1.1 如何开启针对本BSP的Arduino生态兼容层
Env 工具下敲入 menuconfig 命令,或者 RT-Thread Studio IDE 下选择 RT-Thread Settings:
```Kconfig
Hardware Drivers Config --->
Onboard Peripheral Drivers --->
[*] Support Arduino
```
## 2 Arduino引脚排布
该BSP遵照Arduino UNO板的引脚排列方式,并扩展增加了潘多拉自身的板载资源功能引脚。
### 2.1 Arduino引脚排布
详见 `pins_arduino.c`
| Arduino引脚编号 | STM32引脚编号 | 备注 |
| --------------------- | ------------- | --------------------------------------------------------- |
| 0 (D0) | -- | 该引脚在UNO板中为串口RX引脚,不能被使用 |
| 1 (D1) | -- | 该引脚在UNO板中为串口TX引脚,不能被使用 |
| 2 (D2) | PB9 | 普通IO |
| 3 (D3) | PD15 | PWM |
| 4 (D4) | PA8 | 普通IO |
| 5 (D5) | PD14 | 普通IO |
| 6 (D6) | PB11 | PWM |
| 7 (D7) | PB14 | 普通IO |
| 8 (D8) | PB12 | 普通IO |
| 9 (D9) | PD12 | PWM |
| 10 (D10) | PB10 | PWM |
| 11 (D11) | PB8 | PWM |
| 12 (D12) | PB15 | 普通IO |
| 13 (D13) | PB13 | 普通IO |
| 14 (D14) | PA1 | 振动电机-A |
| 15 (D15) | PA0 | 振动电机-B |
| 16 (D16) | PB2 | 蜂鸣器 |
| 17 (D17) | PD10 | KEY0 |
| 18 (D18) | PD9 | KEY1 |
| 19 (D19) | PD8 | KEY2 |
| 20 (D20) | PC13 | KEY-WKUP |
| 21 (D21) | PE7 | 红色LED |
| 22 (D22, LED_BUILTIN) | PE8 | 绿色LED,Arduino默认LED |
| 23 (D23) | PE9 | 蓝色LED,具有PWM功能 |
| 24 (D24) | PB0 | 红外发送 |
| 25 (D25) | PB1 | 红外接收 |
| A0 | PC2 | ADC |
| A1 | PC4 | ADC |
| A2 | -- | 芯片内部参考电压 ADC |
| A3 | -- | 芯片内部温度 ADC |
| A4 | PC7 | I2C-SDA,被RT-Thread的I2C设备框架i2c1总线接管,无模拟功能 |
| A5 | PC6 | I2C-SCL,被RT-Thread的I2C设备框架i2c1总线接管,无模拟功能 |
| DAC0 | PA4 | 真模拟输出 DAC |
### 2.2 板载排针的Arduino引脚排布
| STM32引脚编号 | Arduino引脚编号 | 备注 | STM32引脚编号 | Arduino引脚编号 | 备注 |
| ------------- | --------------- | -------- | ------------- | --------------- | -------- |
| PB8 | 11 (D11) | PWM | PB9 | 2 (D2) | 普通IO |
| PC7 | A4 | I2C1-SDA | PA8 | 4 (D4) | 普通IO |
| PD15 | 3 (D3) | PWM | PC6 | A5 | I2C1-SCL |
| PD13 | -- | -- | PD14 | 5 (D5) | 普通IO |
| PC2 | A0 | ADC | PD12 | 9 (D9) | PWM |
| PB14 | 7 (D7) | 普通IO | PB15 | 12 (D12) | 普通IO |
| PB12 | 8 (D8) | 普通IO | PB13 | 13 (D13) | 普通IO |
| PB10 | 10 (D10) | PWM | PB11 | 6 (D6) | PWM |
| PC4 | A1 | ADC | PA4 | DAC0 | DAC |
### 2.3 板载外设的Arduino引脚排布
| 外设名称 | Arduino引脚编号 | STM32引脚编号 |
| --------------------- | --------------------- | ------------- |
| 振动电机-A | 14 (D14) | PA1 |
| 振动电机-B | 15 (D15) | PA0 |
| 蜂鸣器 | 16 (D16) | PB2 |
| KEY0 | 17 (D17) | PD10 |
| KEY1 | 18 (D18) | PD9 |
| KEY2 | 19 (D19) | PD8 |
| KEY-WKUP | 20 (D20) | PC13 |
| 红LED | 21 (D21) | PE7 |
| 绿LED,Arduino默认LED | 22 (D22, LED_BUILTIN) | PE8 |
| 蓝LED,具有PWM功能 | 23 (D23) | PE9 |
| 红外发射 | 24 (D24) | PB0 |
| 红外接收 | 25 (D25) | PB1 |
## 3 I2C总线
潘多拉Arduino支持三条I2C总线,分别是:i2c1、i2c3 和 i2c4。你可以通过`pins_arduino.h`文件中的 `ARDUINO_DEFAULT_IIC_BUS_NAME` 宏来设定Arduino的I2C总线,**默认为 i2c4 总线**。其中:
- i2c1 为用户总线,PC7 为 SDA,PC6 为 SCL。用户可以通过杜邦线连接其他 I2C 传感器/芯片。
- i2c3 为板载 I2C 外设总线,连接板载 ICM20608(陀螺仪和加速度传感器) 和 AP3216C(距离和光亮度传感器) 芯片
- i2c4 为板载 I2C 外设总线,连接板载 AHT10(温湿度传感器) 芯片
> 注意:
>
> A4和A5引脚在Arduino UNO中即可以被用于模拟管脚,也可以当做I2C引脚使用。在RTduino中,RTduino的I2C功能是由RT-Thread的I2C设备框架直接接管的,A4和A5引脚被定死为I2C引脚。因此,这两个引脚实际并未被定义。
>
> 您只需要知道,如果想要使用I2C功能,只需要修改 `ARDUINO_DEFAULT_IIC_BUS_NAME` 宏的对应名称即可直接使用。与A4和A5这两个标识没有什么关系。
## 4 特殊功能说明
### 4.1 芯片内部ADC通道
本BSP适配了STM32的两个芯片内部ADC通道,可以通过 analogRead 函数来分别获取如下功能:
| 特殊功能 | Arduino引脚编号 | STM32引脚编号 |
| -------------------- | --------------- | ------------- |
| 芯片内部参考电压 ADC | A2 | -- |
| 芯片内部温度 ADC | A3 | -- |
### 4.2 真模拟输出功能 (True Analog Output)
Arduino的 analogWrite 函数虽为模拟写,但是实际输出的是PWM数字信号,并非真正的模拟信号。这是由于Arduino早期使用的AVR单片机并不支持DAC的功能,因此这个习惯就被保留了下来。但是随着Arduino支持芯片的丰富,部分高级芯片已经内建了DAC(例如Arduino官方板MKR、Zero等),因此Arduino的 analogWrite 函数后续也支持了真模拟输出功能。
在潘多拉板上,使用PA4来当做真模拟输出功能引脚,使用方法为:
```c
analogWrite(DAC0, 1024); // STM32的DAC分辨率为12位,因此第二个参数范围可以为0-4095
```
......@@ -15,7 +15,7 @@
{Arduino Pin, RT-Thread Pin [, Device Name(PWM or ADC), Channel]}
[] means optional
Digital pins must NOT give the device name and channel.
Analog pins MUST give the device name and channel(ADC or PWM).
Analog pins MUST give the device name and channel(ADC, PWM or DAC).
Arduino Pin must keep in sequence.
*/
const pin_map_t pin_map_table[]=
......@@ -44,14 +44,11 @@ const pin_map_t pin_map_table[]=
{D21, GET_PIN(E,7)}, /* BSP: RED-LED */
{D22, GET_PIN(E,8)}, /* LED_BUILTIN, BSP: GREEN-LED */
{D23, GET_PIN(E,9), "pwm1", 1}, /* PWM, BSP: BLUE-LED */
{D24, GET_PIN(B,0)}, /* INFRARED EMISSION */
{D25, GET_PIN(B,1)}, /* INFRARED RECEPTION */
{A0, GET_PIN(C,2), "adc1", 3}, /* ADC */
{A1, GET_PIN(C,4), "adc1", 13}, /* ADC */
{A2, RT_NULL, "adc1", 0}, /* ADC, On-Chip: internal reference voltage */
{A3, RT_NULL, "adc1", 17} /* ADC, On-Chip: internal temperature sensor */
{A3, RT_NULL, "adc1", 17}, /* ADC, On-Chip: internal temperature sensor */
{DAC0, GET_PIN(A,4), "dac1", 1} /* DAC */
};
/* initialization for BSP; maybe a blank function */
void initVariant(void)
{
/* Nothing needs to initialize for this BSP */
}
......@@ -7,6 +7,7 @@
* Date Author Notes
* 2021-12-10 Meco Man first version
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
......@@ -35,15 +36,21 @@
#define D21 (21)
#define D22 (22)
#define D23 (23)
#define A0 (24)
#define A1 (25)
#define A2 (26)
#define A3 (27)
#define LED_BUILTIN D22 /* Built-in LED */
#define D24 (24)
#define D25 (25)
#define A0 (26)
#define A1 (27)
#define A2 (28)
#define A3 (29)
#define DAC0 (30)
#define ARDUINO_PWM_HZ 500 /* Arduino UNO's PWM is around 500Hz */
#define LED_BUILTIN D22 /* Default Built-in LED */
/*
* i2c1 - PC7-SDA PC6-SCL(User I2C)
* i2c3 - ICM20608, AP3216C (On Board)
* i2c4 - AHT10 (On Board)
*/
#define ARDUINO_DEFAULT_IIC_BUS_NAME "i2c4"
#endif /* Pins_Arduino_h */
......@@ -22,6 +22,7 @@ menu "Onboard Peripheral Drivers"
config BSP_USING_ARDUINO
bool "Support Arduino"
select PKG_USING_RTDUINO
select BSP_USING_GPIO
select BSP_USING_PWM
select BSP_USING_PWM1
select BSP_USING_PWM1_CH1
......@@ -35,12 +36,14 @@ menu "Onboard Peripheral Drivers"
select BSP_USING_ADC
select BSP_USING_ADC1
select BSP_USING_I2C
select BSP_USING_I2C1
select BSP_USING_I2C3
select BSP_USING_I2C4
select BSP_USING_DAC
select BSP_USING_DAC1
imply RTDUINO_USING_SERVO
imply RTDUINO_USING_WIRE
imply RTDUINO_USING_ADAFRUIT
imply RTDUINO_USING_USBSERIAL
default n
config BSP_USING_KEY
......@@ -95,7 +98,7 @@ menu "Onboard Peripheral Drivers"
default n
config BSP_USING_ICM20608
bool "Enable icm20608 (i2c3)"
bool "Enable ICM20608 (i2c3)"
select BSP_USING_I2C
select BSP_USING_I2C3
select PKG_USING_SENSORS_DRIVERS
......@@ -104,7 +107,7 @@ menu "Onboard Peripheral Drivers"
default n
config BSP_USING_AHT10
bool "Enable aht10 (i2c4)"
bool "Enable AHT10 (i2c4)"
select BSP_USING_I2C
select BSP_USING_I2C4
select PKG_USING_SENSORS_DRIVERS
......@@ -261,12 +264,12 @@ menu "On-chip Peripheral Drivers"
default n
menuconfig BSP_USING_SPI
bool "Enable SPI BUS"
bool "Enable SPI Bus"
default n
select RT_USING_SPI
if BSP_USING_SPI
config BSP_USING_SPI1
bool "Enable SPI1 BUS"
bool "Enable SPI1 Bus"
default n
config BSP_SPI1_TX_USING_DMA
......@@ -281,7 +284,7 @@ menu "On-chip Peripheral Drivers"
default n
config BSP_USING_SPI2
bool "Enable SPI2 BUS"
bool "Enable SPI2 Bus"
default n
config BSP_SPI2_TX_USING_DMA
......@@ -296,7 +299,7 @@ menu "On-chip Peripheral Drivers"
default n
config BSP_USING_SPI3
bool "Enable SPI3 BUS"
bool "Enable SPI3 Bus"
default n
config BSP_SPI3_TX_USING_DMA
......@@ -312,7 +315,7 @@ menu "On-chip Peripheral Drivers"
endif
config BSP_USING_QSPI
bool "Enable QSPI BUS"
bool "Enable QSPI Bus"
select RT_USING_QSPI
select RT_USING_SPI
default n
......@@ -322,39 +325,52 @@ menu "On-chip Peripheral Drivers"
default n
menuconfig BSP_USING_I2C
bool "Enable I2C BUS"
bool "Enable I2C Bus"
default n
select RT_USING_I2C
select RT_USING_I2C_BITOPS
select RT_USING_PIN
if BSP_USING_I2C
menuconfig BSP_USING_I2C3
bool "Enable I2C3 BUS (software simulation)"
default y
config BSP_USING_I2C1
bool "Enable I2C1 Bus (User I2C)"
default n
if BSP_USING_I2C1
comment "Notice: PC7 --> 39; PC6 --> 38"
config BSP_I2C1_SCL_PIN
int "i2c1 SCL pin number"
range 1 176
default 38
config BSP_I2C1_SDA_PIN
int "I2C1 SDA pin number"
range 1 176
default 39
endif
config BSP_USING_I2C3
bool "Enable I2C3 Bus (AP3216C/ICM20608/ES8388)"
default n
if BSP_USING_I2C3
comment "Notice: PC0 --> 32; PC1 --> 33"
# Notice: PC0 --> 32; PC1 --> 33
config BSP_I2C3_SCL_PIN
int "i2c3 scl pin number"
range 1 176
int
default 32
config BSP_I2C3_SDA_PIN
int "I2C3 sda pin number"
range 1 176
int
default 33
endif
menuconfig BSP_USING_I2C4
bool "Enable I2C4 BUS (AHT10)"
config BSP_USING_I2C4
bool "Enable I2C4 Bus (AHT10)"
default n
if BSP_USING_I2C4
comment "Notice: PC1 --> 33; PD6 --> 54"
# Notice: PC1 --> 33; PD6 --> 54
config BSP_I2C4_SCL_PIN
int "i2c4 scl pin number"
range 1 176
int
default 54
config BSP_I2C4_SDA_PIN
int "I2C4 sda pin number"
range 1 176
int
default 33
endif
endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册