由于內部sram大小只有64kb,為了跑函式,所以擴展了外部1mb的sdram進行使用,起始地址為0x68000000 大小為0x100000。這樣用外部SRAM就跟用內部SRAM一樣,不用自己去申請記憶體,也不用考慮什么記憶體地址,一切讓編譯器自己去解決。
根據庫函式例程fsmc來實作擴展外部sdram。在庫函式的system_stm32f10x.c這個初始化檔案當中其實就已經有外部SRAM的初始化,我們只要增加“#define DATA_IN_ExtSRAM 1”這句宏定義
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
/* #define DATA_IN_ExtSRAM */
#define DATA_IN_ExtSRAM 1
#endif
再編譯的時候就會把外部SRAM的初始化編譯進去,初始化的代碼大家可以去看檔案中的void SystemInit_ExtMemCtl(void) 這個函式。
有一個問題就是,呼叫函式的內部陣列被分配在外部sdram空間中沒有問題,但是sp指標(自動分配的堆疊區并不是很大),在函式呼叫程序中,出現堆疊空間sp值小于0x68000000的情況發生。所以問一下,外部sdram中,堆疊區間大小在哪里進行設定?還是說是有系統自動分配的,要是自動分配的不應該在函式呼叫的程序中出現堆疊空間不夠的情況啊。。。
uj5u.com熱心網友回復:
幫頂!更正下:STM32F1只能驅動SRAM,無法驅動SDRAM,從專業角度上,樓主描述有些不太正確,但不影響理解。uj5u.com熱心網友回復:
謝謝~ 這個問題現在被解決了,但是放在外部SRAM中運行的結果就是時間耗時過長,不時很實用啊。 對于內部sram空間問題真是頭疼。。
uj5u.com熱心網友回復:
理論上會比內部的慢,但不至于太明顯,檢查FSMC總線時鐘、速度等問題。
uj5u.com熱心網友回復:
幫頂!更正下:STM32F1只能驅動SRAM,無法驅動SDRAM,從專業角度上,樓主描述有些不太正確,但不影響理解。
謝謝~ 這個問題現在被解決了,但是放在外部SRAM中運行的結果就是時間耗時過長,不時很實用啊。 對于內部sram空間問題真是頭疼。。
理論上會比內部的慢,但不至于太明顯,檢查FSMC總線時鐘、速度等問題。
ok~ 檢查了MDK關于時鐘的設定,沒有配置到和芯片時鐘一樣,所以sec統計的時間有誤。 外部SRAM中運行的時間也是滿足要求的,謝謝~
uj5u.com熱心網友回復:
謝謝~ 這個問題現在被解決了,但是放在外部SRAM中運行的結果就是時間耗時過長,不時很實用啊。 對于內部sram空間問題真是頭疼。。uj5u.com熱心網友回復:
樓主遇到過外擴SRAM情況下,外圍設備硬體錯誤,比如CAN通信引起硬體錯誤,這種情況嗎?uj5u.com熱心網友回復:
請問樓主是怎么解決問題的?需要另外配置堆疊嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/50491.html
標籤:單片機/工控
下一篇:兩臺樹莓派實作資料通信
