* [bsp][essemi] Fix a bug of I2C and edit some documents (#6159)

* [bsp][essemi] Fix a bug of I2C and edit some documents
This commit is contained in:
shiwa 2022-07-13 09:50:14 +08:00 committed by GitHub
parent 5c6e7d815b
commit 81cdeaf902
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 9 deletions

View File

@ -2,7 +2,7 @@
## 1 RTduino - RT-Thread的Arduino生态兼容层
ES32F3696已经适配了RTduino可正常使用全部功能包含GPIO/PWM及I2C/SPI通信接口。除标准arduino uno的接口外该开发板还额外添加了4个led和一个方向键对应的GPIO方便使用。
ES32F3696已经适配了[RTduino软件包](https://github.com/RTduino/RTduino)可正常使用全部功能包含GPIO/PWM及I2C/SPI通信接口。除标准arduino uno的接口外该开发板还额外添加了4个led和一个方向键对应的GPIO方便使用。更多信息,请参见[RTduino软件包说明文档](https://github.com/RTduino/RTduino)
### 1.1 使用Keil+Env
@ -128,13 +128,15 @@ ES32-Arduino的SPI总线是spi0总线 `SCK`、`MISO`、`MOSI`引脚是被RT-T
2. 第三方arduino库导入测试
[DFRobot_BMI160](https://github.com/DFRobot/DFRobot_BMI160)
用法:下载完毕后解压放到 packages\RTduino-latest\libraries\user目录下即可
需要修改一处这个库有一处函数重载歧义856行需改为Wire.requestFrom(dev->id,(uint8_t)len);
选择BMI160的库DFRobot_BMI160用于测试用keil编译时存在以下问题
1. 缺少INT8_C和UINT8_C宏定义手动添加
1. 缺少INT8_C和UINT8_C宏定义手动在pins_arduino.h或其他Arduino头文件中添加
```c
#ifndef INT8_C
@ -145,16 +147,18 @@ ES32-Arduino的SPI总线是spi0总线 `SCK`、`MISO`、`MOSI`引脚是被RT-T
#endif
```
2. keil的AC5不支持类变量直接初始化目前版本的AC6编译器会报错需要修改工程文件删掉所有的 --cpp11 --c11 --gnu
2. 编译报错Data initializer is not allowed
解决以上问题后,能成功调用传感器获取加速度和重力等信息
如果使用AC5编译器给arduino_main.cpp和DFRobot_BMI160.cpp添加 --cpp11 --gnu
如果使用AC6编译器修改工程文件删掉所有的 --cpp11 --c11 --gnu
如果用RT-Thread Studio编译则不存在这些问题只需修改存在歧义的问题即可直接使用
## 6 其他说明
### 1.ADC
目前ES32的ADC返回的是原始值需要计算转换为实际的电压值暂时不支持分辨率调节会出现警告信息。
目前ES32的ADC返回的是原始值需要计算转换为实际的电压值暂时不支持分辨率调节会出现警告信息,无视即可
### 2.对非数字IO的管脚不要调用pinMode
非数字IO的管脚在其他地方已经初始化了再次调用pinMode会使他变为普通管脚且无法再重新初始化为非数字IO的功能。即对于任意管脚可以调用pinMode使它变为数字IO管脚但这一过程不可逆原有的预设功能将会失效
### 3.SPI/I2C/UART使用

View File

@ -6,6 +6,7 @@
* Change Logs:
* Date Author Notes
* 2021-12-10 Meco Man first version
* 2022-07-11 shiwa add examples for es32f3696
*/
#include <Arduino.h>

View File

@ -19,6 +19,7 @@
* 2019-11-01 wangyq update libraries
* 2020-01-14 wangyq the first version
* 2021-04-20 liuhy the second version
* 2022-07-11 shiwa Support for RT_NO_START/RT_NO_STOP
*/
#include <rthw.h>
@ -275,6 +276,10 @@ static rt_size_t es32f3_master_xfer(struct rt_i2c_bus_device *bus,
for (i = 0; i < num; i++)
{
msg = &msgs[i];
if (msg->buf==NULL||msg->len==0)
{
continue;
}
if (msg->flags & RT_I2C_RD)
{
if (ald_i2c_master_recv(bus->priv, msg->addr << 1, msg->buf, msg->len, TIMEOUT) != 0)
@ -286,7 +291,10 @@ static rt_size_t es32f3_master_xfer(struct rt_i2c_bus_device *bus,
else
{
uint32_t f=((msg->flags&RT_I2C_NO_START)?0x1:0)|((msg->flags&RT_I2C_NO_STOP)?0x2:0);
if (I2C_GET_FLAG((i2c_handle_t *)bus->priv, I2C_STAT_BUSY) == RESET)
{
f=f&(~_I2C_NO_START);
}
if (_i2c_master_send(bus->priv, msg->addr << 1, msg->buf, msg->len, TIMEOUT,f) != 0)
{
LOG_E("i2c bus write failed,i2c bus stop!\n");
@ -298,7 +306,7 @@ static rt_size_t es32f3_master_xfer(struct rt_i2c_bus_device *bus,
ret = i;
out:
//LOG_E("send stop condition\n");
LOG_D("send stop condition\n");
return ret;
}