汇集网友智慧,解决技术难题
hc32f460 FSMC fm ST STM
赞0
评论
2022-01-19
20160609191951431.jpg (91.93 KB )
下载附件
2022-1-19 13:51 上传
20160609192113237.jpg (61.97 KB )
20160609214417879.jpg (60.67 KB )
20160609214408670.jpg (70.2 KB )
20160609192546137.jpg (16.51 KB )
20160609193146467.jpg (17.29 KB )
20160609193850657.jpg (17.06 KB )
20160609194439817.jpg (17.7 KB )
20160609195831290.jpg (17.17 KB )
20160609195948289.jpg (19.99 KB )
20160609200824684.jpg (17.07 KB )
20160609201041429.jpg (17.1 KB )
20160609201424046.jpg (17.69 KB )
20160609201438452.jpg (17.57 KB )
20160609202107924.jpg (114.54 KB )
20160609202442417.jpg (22.72 KB )
20160609202634068.jpg (113.91 KB )
20160609202648724.jpg (113.14 KB )
20160609203153239.jpg (20.59 KB )
20160609203206367.jpg (20.33 KB )
20160609203502586.jpg (20.88 KB )
20160609203618791.jpg (18.05 KB )
20160609204947996.jpg (17.07 KB )
20160609204955231.jpg (17.47 KB )
20160609205003858.jpg (17.29 KB )
20160609205018874.jpg (16.92 KB )
20160609205401002.jpg (149.48 KB )
20160609205448159.jpg (149.37 KB )
20160609205541626.jpg (21.46 KB )
20160609205552032.jpg (24.13 KB )
2022-01-18
点击图片添加到编辑器内容中
点击文件名将附件添加到文章中
提交
tyw
315个答案
天意无罪
284个答案
xch
207个答案
jjjyufan
199个答案
coody
189个答案
LcwSwust
158个答案
chunyang
135个答案
tpgf
111个答案
赞0
评论
2022-01-19
赞0
评论
2022-01-19
赞0
【转】STM32的FSMC详解
我就是从上面的不解中开始研究FSMC的…..
并且开启时钟 (RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); ) 像STM32F103Z(144脚)芯片有独立的地址和数据总线,而STM32F103V(100脚)就没有, 地址和数据总线要像51单片机一样分时复用,而在STM32F103R系列(64脚)就没有FSMC模块.
PD14,//FSMC_DA0
PD15,//FSMC_DA1
PD0 ,//FSMC_DA2
PD1 ,//FSMC_DA3
PE7 ,//FSMC_DA4
PE8 ,//FSMC_DA5
PE9 ,//FSMC_DA6
PE10,//FSMC_DA7
PE11,//FSMC_DA8
PE12,//FSMC_DA9
PE13,//FSMC_DA10
PE14,//FSMC_DA11
PE15,//FSMC_DA12
PD8 ,//FSMC_DA13
PD9 ,//FSMC_DA14
PD10,//FSMC_DA15
PD11,//FSMC_A16
PD12,//FSMC_A17
PD13,//FSMC_A18
PE3 ,//FSMC_A19
PE4 ,//FSMC_A20
PE5 ,//FSMC_A21
PE6 ,//FSMC_A22
PE2 ,//FSMC_A23
PG13,//FSMC_A24//STM32F103Z
PG14,//FSMC_A25//STM32F103Z
[注:总线是16Bit情况下,FSMC通过FSMC_NBL1,FSMC_NBL0,区分高低字节.下面W代表WORD,即16BIT字.]
PF0 ,//FSMC_A0 //2^1=2W =4 Bytes //144PIN STM32F103Z
PF1 ,//FSMC_A1 //2^2=4W =8 Bytes//144PIN STM32F103Z
PF2 ,//FSMC_A2 //2^3=8W= 16 Bytes //144PIN STM32F103Z
PF3 ,//FSMC_A3 //2^4=16W =32 Bytes//144PIN STM32F103Z
PF4 ,//FSMC_A4 //2^5=32W =64 Bytes//144PIN STM32F103Z
PF5 ,//FSMC_A5 //2^6=64W =128 Bytes//144PIN STM32F103Z
PF12,//FSMC_A6 //2^7=128W =256 Bytes //144PIN STM32F103Z
PF13,//FSMC_A7 //2^8=256W =512 Bytes //144PIN STM32F103Z
PF14,//FSMC_A8 //2^9= 512W =1k Bytes//144PIN STM32F103Z
PF15,//FSMC_A9 //2^10=1kW =2k Bytes//144PIN STM32F103Z
PG0 ,//FSMC_A10 //2^11=2kW =4k Bytes//144PIN STM32F103Z
PG1 ,//FSMC_A11 //2^12=4kW =8k Bytes//144PIN STM32F103Z
PG2 ,//FSMC_A12 //2^13=8kW =16k Bytes//144PIN STM32F103Z
PG3 ,//FSMC_A13 //2^14=16kW =32k Bytes//144PIN STM32F103Z
PG4 ,//FSMC_A14 //2^15=32kW =64k Bytes//144PIN STM32F103Z
PG5 ,//FSMC_A15 //2^16=64kW =128k Bytes//144PIN STM32F103Z
PD11,//FSMC_A16 //2^17=128kW =256k Bytes
PD12,//FSMC_A17 //2^18=256kW =512k Bytes
PD13,//FSMC_A18 //2^19=512kW =1M Bytes
PE3 ,//FSMC_A19 //2^20=1MW =2M Bytes
PE4 ,//FSMC_A20 //2^21=2MW =4M Bytes
PE5 ,//FSMC_A21 //2^22=4MW =8M Bytes
PE6 ,//FSMC_A22 //2^23=8MW =16M Bytes
PE2 ,//FSMC_A23 //2^24=16MW =32M Bytes //100PIN STM32F103V MAX
PG13,//FSMC_A24 //2^25=32MW =64M Bytes //144PIN STM32F103Z
PG14,//FSMC_A25 //2^26=64MW =128M Bytes //144PIN STM32F103Z
PD14,//FSMC_D0
PD15,//FSMC_D1
PD0 ,//FSMC_D2
PD1 ,//FSMC_D3
PE7 ,//FSMC_D4
PE8 ,//FSMC_D5
PE9 ,//FSMC_D6
PE10,//FSMC_D7
PE11,//FSMC_D8
PE12,//FSMC_D9
PE13,//FSMC_D10
PE14,//FSMC_D11
PE15,//FSMC_D12
PD8 ,//FSMC_D13
PD9 ,//FSMC_D14
PD10,//FSMC_D15
控制信号
PD4,//FSMC_NOE,/RD
PD5,//FSMC_NWE,/WR
PB7,//FSMC_NADV,/ALE
PE1,//FSMC_NBL1,/UB
PE0,//FSMC_NBL0,/LB
PD7,//FSMC_NE1,/CS1
PG9,//FSMC_NE2,/CS2
PG10,//FSMC_NE3,/CS3
PG12,//FSMC_NE4,/CS4
//PD3,//FSMC_CLK
//PD6,//FSMC_NWAIT
3.时序测量
20160609191951431.jpg (91.93 KB )
下载附件
2022-1-19 13:51 上传
写数据的时序
20160609192113237.jpg (61.97 KB )
下载附件
2022-1-19 13:51 上传
20160609214417879.jpg (60.67 KB )
下载附件
2022-1-19 13:51 上传
读数据的时序
20160609214408670.jpg (70.2 KB )
下载附件
2022-1-19 13:51 上传
1.数据总线设定为16位宽情况下测量FSMC时序,即
20160609192546137.jpg (16.51 KB )
下载附件
2022-1-19 13:51 上传
可以看出NADV下降沿瞬间DATABUS上的数据被锁存器锁存,接着NWE低电平,总线输出0xABCD,数据0xABCD被写入0x1234这个地址.
20160609193146467.jpg (17.29 KB )
下载附件
2022-1-19 13:51 上传
what?向这个地址写出现了两次总线操作.
20160609193850657.jpg (17.06 KB )
下载附件
2022-1-19 13:51 上传
从时序图中我们可以看到, 向0x60000468UL在地址(在范围:0x60000000~0x63FFFFFF内)写入数据,片选引脚PD7(FSMC_NE1)被拉低.而在这之前,数据总线上先产生0x234,于是在NADV下降沿瞬间,数据被锁存在地址锁存器上(A0~A15),与A16~A25(如果有配置的话,会在NE1下降沿同时送出)组合成完整的地址信号.然而有人会问这个0x234是哪来的,你是否注意到它正好等于0x468/2,难道是巧合吗?不是的,在16位数据总线情况下(NORSRAMInitStrc.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_16b;),
像这样
所以如果我们一定要向addrx写入0xABCD则我们要这样写
20160609194439817.jpg (17.7 KB )
下载附件
2022-1-19 13:51 上传
从图中我们可以看到,STM32其实分成了两次字节写的过程,第一次向0x469/2写入0xCD,第二次向0x469/2+1写入0xAB,
有人会问你为什么这样说,NWE为低时总线上不是0xCDAB吗?没错,但是注意NBL1,NBL0的电平组合,NBL1连接到SRAM的nUB,NBL0连接到SRAM的nLB.第一次NEW为低时NBL1为低,NBL0为高,0xCDAB的高位被写入SRAM的0x234,第二次NWE为低时NBL1为高,NBL0为低,0xCDAB的低位被写入SRAM的0x235.
当我们查看反汇编时发现,指令是相同的
20160609195831290.jpg (17.17 KB )
下载附件
2022-1-19 13:51 上传
如图tmp结果为0x8824
再试
20160609195948289.jpg (19.99 KB )
下载附件
2022-1-19 13:51 上传
nUB=nLB=0;按16bit读
从0x234读得0X8824取高字节”88”作tmp低8位
从0x235读得0X6507取低字节”07”作tmp高8位
最终tmp=0x0788
20160609200824684.jpg (17.07 KB )
下载附件
2022-1-19 13:51 上传
由于NBL1=0,NBL0=1,0xCD被写入0x234的高地址,
数据总线上出现的值是0xCDNN, NN是随机数据,不过一般是和高位一样的值
20160609201041429.jpg (17.1 KB )
下载附件
2022-1-19 13:51 上传
由于NBL1=1,NBL0=0,0xCD被写入0x234的低地址,
数据总线上出现的值是0xNNCD,NN是随机数据
首先我们向SRAM的真实地址0x234,0x235分别写入0x8824,0x6507
20160609201424046.jpg (17.69 KB )
下载附件
2022-1-19 13:51 上传
20160609201438452.jpg (17.57 KB )
下载附件
2022-1-19 13:51 上传
20160609202107924.jpg (114.54 KB )
下载附件
2022-1-19 13:51 上传
20160609202442417.jpg (22.72 KB )
下载附件
2022-1-19 13:51 上传
- *([color=rgb(86, 156, 214) !important]volatile uint16_t*)(0x60000000UL |0x234 <<1 )=0x8824;
- *([color=rgb(86, 156, 214) !important]volatile uint16_t*)(0x60000000UL |0x235 <<1 )=0x6507;
- *([color=rgb(86, 156, 214) !important]volatile uint16_t*)(0x60000000UL |0x236 <<1 )=0x6735;
- *([color=rgb(86, 156, 214) !important]volatile uint16_t*)(0x60000000UL |0x237 <<1 )=0x2003;
- *([color=rgb(86, 156, 214) !important]volatile uint16_t*)(0x60000000UL |0x238 <<1 )=0x6219;
tmp=*([color=rgb(86, 156, 214) !important]volatile int64_t*)(0x60000469UL);// tmp=0x192003673565078820160609202634068.jpg (113.91 KB )
下载附件
2022-1-19 13:51 上传
20160609202648724.jpg (113.14 KB )
下载附件
2022-1-19 13:51 上传
FsmcInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
20160609203153239.jpg (20.59 KB )
下载附件
2022-1-19 13:51 上传
20160609203206367.jpg (20.33 KB )
下载附件
2022-1-19 13:51 上传
20160609203502586.jpg (20.88 KB )
下载附件
2022-1-19 13:51 上传
20160609203618791.jpg (18.05 KB )
下载附件
2022-1-19 13:51 上传
20160609204947996.jpg (17.07 KB )
下载附件
2022-1-19 13:51 上传
20160609204955231.jpg (17.47 KB )
下载附件
2022-1-19 13:51 上传
20160609205003858.jpg (17.29 KB )
下载附件
2022-1-19 13:51 上传
20160609205018874.jpg (16.92 KB )
下载附件
2022-1-19 13:51 上传
- tmp=*([color=rgb(86, 156, 214) !important]volatile uint64_t*)(0x60000468UL );
- tmp=[color=rgb(184, 215, 163) !important]0x2003673565ABCD44
tmp=*([color=rgb(86, 156, 214) !important]volatile uint64_t*)(0x60000469UL );//tmp=0x192003673565ABCD20160609205401002.jpg (149.48 KB )
下载附件
2022-1-19 13:51 上传
20160609205448159.jpg (149.37 KB )
下载附件
2022-1-19 13:51 上传
20160609205541626.jpg (21.46 KB )
下载附件
2022-1-19 13:51 上传
20160609205552032.jpg (24.13 KB )
下载附件
2022-1-19 13:51 上传
[color=var(--color-text-secondary)]如果说我的**对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇**由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
评论
2022-01-19
赞0
评论
2022-01-19
赞0
评论
2022-01-18
赞0
评论
2022-01-18
赞0
评论
2022-01-18
您需要登录后才可以回复 登录 | 注册