#include <SPI.h>
#include <SdFat.h> //
https://github.com/greiman/SdFat
// set ENABLE_EXTENDED_TRANSFER_CLASS non-zero to use
faster EX classes
// Use second SPI port
SdFat sd;
//SdFatEX sd(2);
SdFile file;
//const uint8_t SD_CS = PB12; // chip select
for sd2
const uint8_t SD_CS = PA15; // chip select for
sd
//------------------------------------------------------------------------------
// print error msg, any SD error codes, and halt.
// store messages in flash
#define errorExit(msg) errorHalt(F(msg))
#define initError(msg) initErrorHalt(F(msg))
//------------------------------------------------------------------------------
int pins[] = { PA4, PA5, PA6, PA7 };
int numpins;
void setup() {
delay(1000);
Serial.begin(9600);
Serial.println("SdFat_ListDir_STM32");
/*
* CS ----- PA15
* SCK ---- PB3
* MISO --- PB4
* MOSI --- PB5
*/
afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY); //
release PB3 and PB5
afio_remap(AFIO_REMAP_SPI1); // remap SPI1
gpio_set_mode(GPIOB, 3, GPIO_AF_OUTPUT_PP);
gpio_set_mode(GPIOB, 4, GPIO_INPUT_FLOATING);
gpio_set_mode(GPIOB, 5, GPIO_AF_OUTPUT_PP);
//Serial.print(F("FreeStack: "));
//Serial.println(FreeStack());
// initialize the second card
if (!sd.begin(SD_CS, SD_SCK_MHZ(18))) {
//if (!sd.begin(SD_CS)) {
sd.initError("sd:");
}
#if 0
numpins=sizeof(pins)/4;
Serial.print("numpins=");
Serial.println(numpins);
for (int i=0;i<numpins;i++) {
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], LOW);
}
#endif
}
void loop() {
static int pin=0;
sd.ls(LS_DATE | LS_SIZE | LS_R);
numpins=sizeof(pins)/4;
Serial.print("numpins=");
Serial.println(numpins);
for (int i=0;i<numpins;i++) {
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], LOW);
}
Serial.print("pin=");
Serial.println(pins[pin]);
for (int i=0;i<numpins;i++) {
digitalWrite(pins[i], LOW);
}
digitalWrite(pins[pin], HIGH);
pin++;
if (pin == numpins) pin=0;
delay(1000);
} |