258 字
1 分钟
合宙 ESP32-C3使用SPI和I2C
前言
不知道为啥,同样是ESP32-C3,乐鑫和合宙的芯片引脚定义差了很多,导致PlatformIO中乐鑫的开发工具无法和合宙兼容。
参考 ../esp32c3/pins_arduino.h:
硬件功能 | 乐鑫 ESP32-C3 | 合宙 ESP32-C3 |
---|---|---|
SPI-SS | GPIO07 | GPIO07 |
SPI-MOSI | GPIO06 | GPIO03 |
SPI-MISO | GPIO05 | GPIO10 |
SPI-SCK | GPIO04 | GPIO02 |
I2C-SDA | GPIO08 | GPIO04 |
I2C-SCL | GPIO09 | GPIO05 |
因此如果需要使用 <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/