Ich verwende das Board Nucleo F401Re basierend auf Mikrocontroller STM32F401RET6. Ich habe einen Micro-SD-Steckplatz an die Karte angeschlossen und daran interessiert, Daten auf die SD-Karte zu schreiben und Daten daraus zu lesen. Ich habe die Software STM32CubeX verwendet, um Code und insbesondere die SD-Bibliothek mit eingebauten Funktionen zu erzeugen. Ich habe versucht, einen einfachen Code zu schreiben, der ein Array in ein spezifisches Array schreibt und versucht, dieselben Daten später zu lesen. Der Code lautet wie folgt:Kommunikation mit SD-Karte mit STM32-Prozessor - SDIO-Protokoll
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SDIO_SD_Init();
char buffer[14] = "Hello, world\n";
uint32_t to_send[512] ; // Te
uint32_t to_receive[512];
uint64_t address = 150;
HAL_SD_WriteBlocks(&hsd, to_send, address, 512, 1);
HAL_SD_ReadBlocks(&hsd, to_receive, address, 512, 1);
while (1)
{
HAL_UART_Transmit(&huart2, (uint8_t *)buffer, 14, 1000);
HAL_UART_Transmit(&huart2, (uint8_t *)to_receive, 512, 1000);
}
Der Code stoppt in der Mitte der Funktion HAL_Init() und ich erhalte die folgende Meldung:
The stack pointer for stack 'CSTACK' (currently 0x1FFFFD30) is outside the stack range (0x20000008 to 0x20000408)
Diese Meldung erscheint nicht, wenn ich don Verwenden Sie nicht die Funktionen HAL_SD_WriteBlocks() oder HAL_SD_ReadBlocks(). Wenn jemand dieses Problem bereits hatte und weiß, wie es zu beheben ist, würde mich eine Hilfe retten. Bei Bedarf kann ich den Rest des Codes hinzufügen.
Sie auch die Puffer innerhalb des Haupt mit einer statischen Deklaration definieren könnte. –
Danke. Ich bin mir nicht sicher, ob das Problem daraus kommt, denn ohne die Aufrufe der integrierten Funktionen lesen und schreiben auf die SD-Karte funktioniert der Code perfekt. Weißt du, was diesen Fehler in diesen eingebauten Funktionen verursachen könnte? –
Haben Sie es versucht? Die Zuweisung solch großer Puffer ist ein Problem in eingebetteten Systemen. Sie sollten es auf jeden Fall beheben. Ich bin 90% sicher, dass dies die Ursache ist, vor allem, da die Fehlermeldung darauf hindeutet, dass Ihr Stack nur 1kB groß ist. Die Puffer werden wahrscheinlich weg optimiert oder etwas, wenn Sie die 'HAL_SD_ *' Funktionen nicht aufrufen – svens