STM32F103 FSMC同步模式學(xué)習(xí)筆記2
----------------------------------我是無恥的分割線-----------------------------------------------
首先對于NOR異步模式總結(jié)一下:
1.硬件線路一定要對
2.需要知道可以用一根地址線(Ax)或者一些地址線選擇RS或者其他的東西,很有用。
3.我用的是不復(fù)用模式144腳,如果是復(fù)用模式可能地址線會更亂一些。
4.一定要先初始化RCC,GPIO在初始化FSMC。。要不可能會有問題,經(jīng)驗之談。。
5.21IC上有好多FSMC的帖子。。很有用。。
6.要去官網(wǎng)下appliction note和芯片手冊。。最權(quán)威
之后對于一些要重復(fù)記憶的話:
FSMC所有輸出信號都是上升沿有效。
最后給出我用示波器測試出來數(shù)據(jù):
ADDSET = 0
ADDSET = 0
ADDSET = 15 DATASET = 255 實際數(shù)據(jù)傳輸率: 260KHz (接近最慢)
異步模式NE也就是信號有點(diǎn)奇怪,我認(rèn)為他是片選信號,但是為什么會根據(jù)transaction拉低,transaction結(jié)束后又拉高,維持一固定一小段時間??(有待繼續(xù)看手冊)
經(jīng)過異步模式的測量與驗證,按照時序計算,一次transaction(NE從低到高的過程),時間計算和手冊是一樣的:
我用的是擴(kuò)展模式B: Tclc(write) =
其中ADDSET最小為0,而DATASET最小為1.
手冊上沒有的知識,經(jīng)過一下午的測量,得出NE信號的恢復(fù)時間,即transaction結(jié)束后,NE拉高,再拉地的時間大致為6個HCLK。(如果同步模式和你的分頻有關(guān),為6個CLK)
-------------------------------------------------------------------------------------------------
下面是同步模式:
為了保證memory clock(CLK)在NADV低電平的中間上升,F(xiàn)SMC會在一個HCLK周期后操作CLK(在NADV前)。
Data latency:就是在采樣前等待的時間周期,但是不包括NADV為低時的時間,可以從圖1看出。
注意的是:一些NOR FLASH包括NADV為低時的周期,所以有下面的情況
NOR Flash latency = DATLAT + 2
NOR Flash latency = DATLAT + 3
同步模式代碼我貼出來吧:
void LED_FSMCConfigMy(void)
{
}
另外,我用紅色高亮的代碼是我遇到問題后的解決方案,就是不論你怎么設(shè)置分頻和時延,都是預(yù)期的結(jié)果。
http://bbs.21ic.com/viewthread.php?tid=375165&highlight=
原因很簡單:
因為STM32 給的庫,在這個結(jié)構(gòu)體問題上FSMC_NORSRAMTimingInitTypeDef
天知道原來是什么值,加上庫里直接把寄存器用 或 的方式全部賦值,如果結(jié)構(gòu)體本身就有數(shù)值,進(jìn)行 或 了
以后當(dāng)然天知道他變成什么值了?。?br />FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank+1] =
加了一句 清零結(jié)構(gòu)體數(shù)值語句。
memset((unsigned char *)&p, 0, sizeof(FSMC_NORSRAMTimingInitTypeDef
保證他能夠成功寫入寄存器
評論