На материнской плате расположен слот для подключения microSD-карты, на которой можно
сохранять данные. Это может пригодиться для логирования информации во время проведения
экспериментов, когда макет спутника работает автономно, чтобы полезные данные не
потерялись из-за возможных перебоев со связью по радиоканалу.
Обмен данными между микроконтроллером и картой памяти происходит по протоколу SPI
(последовательный периферийный интерфейс). На плате Blue Pill выведены две шины SPI, и
подключение к карте памяти происходит через первый (SPI1):
| Название вывода SPI | Номер вывода на плате Blue Pill |
| MOSI1 | PA7 |
| MISO1 | PA6 |
| SCK1 | PA5 |
| CS1 (NSS1) | PA4 |

Напишем тестовый код для проверки записи данных на карту памяти. Для работы с картой памяти используются две встроенные в Arduino IDE библиотеки: SD и SPI. В начале кода подключим соответствующие заголовочные файлы и определим константу, содержащую номер вывода, к которому подключена линия Chip Select шины SPI1.
#include#include #define chipSelect PA4
void setup() {
// Инициализация обмена данными по UART
Serial.begin(115200, SERIAL_8E1);
Serial.print("Initializing SD card...");
// Проверка подключения карты памяти и возможности обмена данными с ней
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// Если карта памяти недоступна, уходим в бесконечный цикл:
while (1);
}
Serial.println("card initialized.");
}
void loop() {
// Создание строки типа данных String, значение которой будет записано на карту памяти
String dataString = "testprint";
// Открываем файл. Если файл не существует, он будет создан.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// Если с файлом всё хорошо, записываем в него данные:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// Выводим записываемые данные в монитор порта для проверки
Serial.println(dataString);
}
// Если файл недоступен, выводим сообщение об ошибке:
else {
Serial.println("error opening datalog.txt");
}
// Необязательная задержка
delay(1000);
}

Существующие примеры написаны для обмена данными между картой памяти и платой Arduino. В комментариях к скетчам указано, какая распиновка используется для SPI:

Для успешной работы скетчей из примеров на используемом в конструкторе микроконтроллере STM32F103C8 необходимо заменить строку, определяющую номер вывода chipSelect:
