258 字
1 分钟
合宙 ESP32-C3使用SPI和I2C
2023-05-25
无标签

前言#

不知道为啥,同样是ESP32-C3,乐鑫和合宙的芯片引脚定义差了很多,导致PlatformIO中乐鑫的开发工具无法和合宙兼容。

参考 ../esp32c3/pins_arduino.h

硬件功能乐鑫 ESP32-C3合宙 ESP32-C3
SPI-SSGPIO07GPIO07
SPI-MOSIGPIO06GPIO03
SPI-MISOGPIO05GPIO10
SPI-SCKGPIO04GPIO02
I2C-SDAGPIO08GPIO04
I2C-SCLGPIO09GPIO05

因此如果需要使用 <SPI.h><Wire.h> 都需要对引脚重新定义。

SPI#

这里在SPI中定义CS引脚为-1,即不设置CS引脚,需要外部定义并使用CS引脚。

#define SPI_CS 7
#define SPI_SCK 2
#define SPI_MOSI 3
#define SPI_MISO 10
void setup() {
pinMode(SPI_CS, OUTPUT);
digitalWrite(SPI_CS, HIGH); // 高电平, 未选中设备
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI, -1);
}
void loop() {
digitalWrite(SPI_CS, LOW); // 低电平, 选中设备
SPI.transfer(0xFE);
digitalWrite(SPI_CS, HIGH); // 高电平, 未选中设备
delay(1000);
}

I2C#

arduino的I2C中 Wire.write() 并不是直接发送,而是写入发送缓冲区,需要通过 Wire.endTransmission() 将缓冲区内数据进行发送。

#define I2C_SDA 4
#define I2C_SCL 5
void setup() {
Wire.begin(I2C_SDA, I2C_SCL);
}
void loop() {
Wire.beginTransmission(0x42); // 向地址为0x42的从机发送数据
Wire.write("Hello!"); // 发送6B数据
Wire.write(0x42); // 发送1B数据
Wire.endTransmission(); // 结束发送
delay(1000);
}
合宙 ESP32-C3使用SPI和I2C
https://fuwari.vercel.app/posts/嵌入式/其他/合宙-esp32-c3使用spi和i2c/
作者
Asuwee
发布于
2023-05-25
许可协议
CC BY-NC-SA 4.0