3
我正在使用基於微控制器STM32F401RET6的Nucleo F401Re電路板。我連接到一個Micro SD插槽,並有興趣將數據寫入SD卡並從中讀取數據。我使用STM32CubeX軟件生成代碼,特別是內置函數的SD庫。我試圖編寫一個簡單的代碼,將數組寫入特定的數組,並嘗試讀取相同的數據後綴。代碼如下:使用STM32處理器與SD卡通信 - SDIO協議
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);
}
在功能HAL_Init(中間的代碼stopps)和我得到了以下信息:
The stack pointer for stack 'CSTACK' (currently 0x1FFFFD30) is outside the stack range (0x20000008 to 0x20000408)
此消息未出現時,我不不使用函數HAL_SD_WriteBlocks()或HAL_SD_ReadBlocks()。如果有人已經有這個問題,並知道如何解決它,一些幫助會救我。如果需要,我可以添加其餘的代碼。
你可以內主要使用的是靜態聲明還定義了緩衝區。 –
謝謝。我不確定是否問題來自於此,因爲如果沒有調用內置函數讀取和寫入sd卡,代碼完美工作。你知道什麼可能會導致這些失敗的功能? –
你試過了嗎?在嵌入式系統中分配如此巨大的緩衝區是一個問題,你應該修復它。我90%確定這是根本原因,尤其是因爲錯誤消息表明你的堆棧只有1kB大小。如果你沒有調用'HAL_SD_ *'函數,緩衝區可能會被優化掉或者其他東西。 – svens