前言
今天總結“STM32F103FSMC讀寫外部SRAM”,主要使用FSMC來控制外部SRAM,對SRAM進行讀寫的操作。本文章提供的工程對SRAM讀寫從操作類似于對FLASH讀寫操作。
關于STM32的FSMC(靈活的靜態存儲器控制器)這一部分內容比較實用,在實際應用中也是比較重要的(對于需要實用FSMC來說)。運用FSMC來控制外接器件比運用軟件模擬來控制效率要高的多,而且操作簡單。
也許對于初學者來說,對FSMC不了解,或不感興趣。因為FSMC在實際開發中主要用于外擴RAM和ROM,初學者對于RAM和ROM的需求不高,基本上內部資源都夠了。對于喜歡使用LCD屏的人應該了解FSMC,因為FSMC控制LCD也是一種很好的方式,市面上很多開發板上的LCD屏都兼容FSMC。
今天提供下載的“軟件工程”都是在硬件板子上進行多次測試、并保證沒問題才上傳至360云盤。
今天的軟件工程下載地址(360云盤):
https://yunpan.cn/cSrN5SYtDcyBA訪問密碼 47fb
STM32F10x的資料可以在我360云盤下載:
https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90
內容講解
工程概要說明: 提供工程是對外部SRAM讀寫,可以當做緩存(如:一個BUF)來使用,但并不是芯片的RAM(運行內存),只是對SRAM進行讀寫操作。
程序運行流程:上電寫入外部SRAM數據“0 - 262143”(剛好是1M空間,4字節空間一數據),再通讀讀函數讀出其數據,通過串口打印出來。這里每讀一次串口打印一次數據,LED變化一次。(請觀測現象)
提供的工程以簡單為原則,詳細中文注釋,方便自己方便大家。
關于“STM32F103 片內FLASH編程”我把重要的幾點在下面分別講述:
一、時鐘
該函數位于bsp.c文件下面;
開啟FSMC和需要使用引腳的時鐘。
二、FSMC引腳配置
該函數位于fsmc.c文件下面;
使用了FSMC的引腳都須配置為“GPIO_Mode_AF_PP”,否則不能使用(感興趣的可以試試)。對于NE3就是:NOR/PSRAM3,我測試的工程是使用FSCM存儲塊1(下圖)的NOR/PSRAM3。所以我測試工程里面的地址是“0x68000000”,其實這個地址有講究的,請看最后重點。
三、FSMC配置
該函數位于fsmc.c文件下面;
這里的配置和你的SRAM有一點的關聯(速度、數據寬度等)。
三、外部SRAM寫數據
該函數位于fsmc.c文件下面;
對1M的SRAM寫數據(為了測試),方便下面讀操作。
四、外部SRAM讀數據
該函數位于fsmc.c文件下面;
對1M的SRAM讀數據,通過串口打印出來寫入的數據,每讀一次,打印一次,中間有個延時,所以整個讀取的過程時間比較長。
這個地址可以修改,或者選擇一段來讀取測試也行。希望看到的人都親自修改程序來測試一下,方便記憶和鞏固。
五、今天的重點
A.關于地址的問題,今天提供的工程外部SRAM地址是“0x68000000”(宏定義在fsmc.h里),善于發現問題和動手的人會發現一個問題,我將這個地址改為“0x68100000”或“0x68200000”測試的效果都一樣。我告訴你答案,效果確實是一樣的,原因就在于外部SRAM容量“SRAM_EXT_SIZE”大小是1M,而“0x00100000”剛好是1M,這里的地址溢出部分剛好抵消了,所以為什么修改地址也是一樣的效果。但地址必須在存儲塊1的NOR/PSRAM3區域。
B.今天是自己通過標準庫來配置的FSMC,其實在“system_stm32f10x.c”文件里面有使用寄存器直接配置FSMC的源代碼,感興趣的朋友可以看一下,今天使用標準庫配置其實也是希望大家數據各個參數的功能作用。其實,希望大家在熟悉配置之后還是使用“system_stm32f10x.c”里的配置,畢竟這是官方提供的,它這樣配置效率也比較高。
說明
今天提供的軟件工程基于STM32F103大容量芯片,中等及小容量芯片沒有FSMC功能,自然也不能使用,只要修改flash.h文件一個宏(頁大小就可以)。其實只要適當修改工程的部分配置,STM32F1有FSCM功能的芯片都適用。
-
sram
+關注
關注
6文章
767瀏覽量
114689 -
STM32F10
+關注
關注
0文章
45瀏覽量
15629 -
FSMC
+關注
關注
0文章
55瀏覽量
38151
發布評論請先 登錄
相關推薦
評論