Chat
Welcome to Flux
Treat Flux like your intern. Tell it what you'd like to build and it'll get to work. You can also ask it questions, brainstorm ideas, and teach it your preferences. Learn More
Table
| Function | U2 Pin | Net | Connected To | Notes |
|---|---|---|---|---|
| SPI1_SCK | PA5 | ADS_SPI1_SCLK | U1 SCLK | ADS1299 SPI clock |
| SPI1_MISO | PA6 | ADS_SPI1_MISO | U1 DOUT | ADS1299 data out |
| SPI1_MOSI | PA7 | ADS_SPI1_MOSI | U1 DIN | ADS1299 command/data in |
| ADS CS | PB6 | ADS_SPI1_CS | U1 ~CS | Active low |
| ADS RESET | PC7 | ADS_RESET_CTRL | U1 ~RESET | Active low |
| ADS DRDY | PA9 | ADS_DRDY | U1 ~DRDY | Interrupt input |
| SPI2_SCK | PB13 | STM32_ESP_SPI2_SCK | U3 IO18 | STM32 ↔ ESP32 bridge |
| SPI2_MISO | PB14 | STM32_ESP_SPI2_MISO | U3 IO19 | STM32 ↔ ESP32 bridge |
| SPI2_MOSI | PB15 | STM32_ESP_SPI2_MOSI | U3 IO23 | STM32 ↔ ESP32 bridge |
| SPI2_CS | PB12 | STM32_ESP_SPI2_CS | U3 IO5 | STM32 ↔ ESP32 bridge |
| READY | PC8 | STM32_ESP_READY | U3 IO27 | Interprocessor ready/handshake |
| SWDIO | PA13 | SWDIO | J1 pin 2 | SWD programming |
| SWCLK | PA14 | SWCLK | J1 pin 4 | SWD programming |
| NRST | NRST | MCU_NRST | J1 pin 5, C26 | Reset |
| BOOT0 | BOOT0 | MCU_BOOT0 | R6 10k to GND | Normal boot low |
Table
| Function | ESP32 Pin | Net | Connected To | Notes |
|---|---|---|---|---|
| UART0_RX | IO3 | ESP_UART0_RX | U8 TXD | USB-UART programming/debug |
| UART0_TX | IO1 | ESP_UART0_TX | U8 RXD | USB-UART programming/debug |
| EN | EN | ESP_EN | Pullup, cap, reset button, Q1 | Reset/program circuit |
| BOOT | IO0 | ESP_IO0_BOOT | Pullup, boot button, Q2 | Bootloader strap |
| SPI bridge SCK | IO18 | STM32_ESP_SPI2_SCK | U2 PB13 | Separate from microSD VSPI |
| SPI bridge MISO | IO19 | STM32_ESP_SPI2_MISO | U2 PB14 | Separate from microSD VSPI |
| SPI bridge MOSI | IO23 | STM32_ESP_SPI2_MOSI | U2 PB15 | Separate from microSD VSPI |
| SPI bridge CS | IO5 | STM32_ESP_SPI2_CS | U2 PB12 | Separate from microSD VSPI |
| READY | IO27 | STM32_ESP_READY | U2 PC8 | Handshake |
| microSD CLK | IO14 | SD_VSPI_CLK | J4 CLK | VSPI SD bus |
| microSD MISO | IO12 | SD_VSPI_MISO_IO12_STRAP | J4 DAT0, 10k pulldown | Boot strap; held low at boot |
| microSD MOSI | IO13 | SD_VSPI_MOSI | J4 CMD | VSPI SD bus |
| microSD CS | IO15 | SD_VSPI_CS | J4 DAT3/CD, 10k pullup | VSPI SD bus |
C
#include "main.h" #include <stdint.h> SPI_HandleTypeDef hspi1; // ADS1299 SPI_HandleTypeDef hspi2; // ESP32 bridge #define ADS_CS_GPIO_Port GPIOB #define ADS_CS_Pin GPIO_PIN_6 #define ADS_RESET_GPIO_Port GPIOC #define ADS_RESET_Pin GPIO_PIN_7 #define ADS_DRDY_GPIO_Port GPIOA #define ADS_DRDY_Pin GPIO_PIN_9 static void ADS1299_Select(void) { HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_RESET); } static void ADS1299_Deselect(void) { HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET); } static HAL_StatusTypeDef ADS1299_Command(uint8_t cmd) { ADS1299_Select(); HAL_StatusTypeDef st = HAL_SPI_Transmit(&hspi1, &cmd, 1, 100); ADS1299_Deselect(); return st; } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); MX_SPI2_Init(); HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(ADS_RESET_GPIO_Port, ADS_RESET_Pin, GPIO_PIN_RESET); HAL_Delay(10); HAL_GPIO_WritePin(ADS_RESET_GPIO_Port, ADS_RESET_Pin, GPIO_PIN_SET); HAL_Delay(100); ADS1299_Command(0x11); // SDATAC before register configuration while (1) { if (HAL_GPIO_ReadPin(ADS_DRDY_GPIO_Port, ADS_DRDY_Pin) == GPIO_PIN_RESET) { uint8_t tx[27] = {0}; uint8_t rx[27] = {0}; ADS1299_Select(); HAL_SPI_TransmitReceive(&hspi1, tx, rx, sizeof(rx), 100); ADS1299_Deselect(); HAL_SPI_Transmit(&hspi2, rx, sizeof(rx), 100); } } }
Cpp
#include <Arduino.h> #include <SPI.h> #include <SD.h> #include <WiFi.h> #define STM32_SPI_SCK 18 #define STM32_SPI_MISO 19 #define STM32_SPI_MOSI 23 #define STM32_SPI_CS 5 #define STM32_READY 27 #define SD_CLK 14 #define SD_MISO 12 #define SD_MOSI 13 #define SD_CS 15 SPIClass sdSPI(VSPI); void setup() { Serial.begin(115200); pinMode(STM32_READY, INPUT); pinMode(STM32_SPI_CS, INPUT_PULLUP); sdSPI.begin(SD_CLK, SD_MISO, SD_MOSI, SD_CS); if (!SD.begin(SD_CS, sdSPI)) { Serial.println("microSD init failed"); } else { Serial.println("microSD ready"); } WiFi.mode(WIFI_STA); Serial.println("ESP32 EEG bridge ready"); } void loop() { // TODO: implement STM32 SPI slave/handshake protocol or use an ESP32-supported slave library. delay(1000); }
Platforms
Pin Mapping — STM32L152RET6 U2
Pin Mapping — ESP32-WROOM-32E U3
STM32 HAL Starter Skeleton
ESP32 Arduino Starter Skeleton
Bring-up Notes