stm32_FSMC注意事项

本文介绍了FSMC总线的基本结构及其在STM32平台上的配置步骤。FSMC总线包含多个控制器,如NOR Flash和PSRAM控制器等,可管理1GB的地址空间,并分为4个Bank。文章详细讲解了如何选择映射地址空间、确定片选线及配置存储器的基本特性和时序参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于FSMC总线的介绍前面已经略有介绍,在此不作赘述。只是简单说一下其配置过程既需要注意的几点问题:
一、 FSMC内部结构和映射地址空间
FSMC包含AHB接口、NOR Flash和PSRAM控制器、NANDflash和PC卡控制器、外部设备接口4个主要模块。在ST吗内部,FSMC的一端通过内部高速总线AHB连接内核,另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器规约的信号,送到外部存储器响应的管脚,视线内河鱼 数据交换。FSMC起到了桥梁的作用,既能够进行信号类型的转换,有能够进行信号宽度和时序的调整,屏蔽掉不同存储器之间的差异。
FSMC内部包含NOR Flash和NAND /PC Card两个控制器,可以分别支持两种截然不同的存储器访问方式,本实验选用的是前者。
FSMC管理1GB的映射地址空间。该空间氛围4个大小256k d的bank ,每个bank又分为4个大小为64K的子bank 。这个问题牵扯到缩扩展的外部存储器的地址问题,务必要注意仔细选择。各bank相互独立,均拥有独立的片选线和控制器。
二、FSMC总线配置步骤
(1)确定映射地址空间:本例程选用的是bank1 的第四个子bank ,前面也提到过,选择的BANK不同则外设对应的地址不同:我们选择的是BANK1,NE4对应的两个地址为:LCD_REG寄存器地址:0x6C00 0000 ;LCD_Data数据地址:0x6C00 0000 | (1《《(n+1))。
将AFIO的A0接至LCD的C/D(Command/data)脚 就自动切换了命令和数据。如果RS接到地址线的A0上,当RS为0时对应寄存器地址0x6C00 0000;当RS为1时,对应数据地址0x6C00 0002;若选择的的是bank1的NE1,则寄存器地址0x6000 0000;数据地址:0x6000 0002.
(2)确定扩展使用的映射地址空间后进而:
1、确定硬件电路中用于选中该存储器的片选线FSMC_NEx,
2、FSMC配置中用于配置该外部存储器的特殊功能寄存器号,
(3) 配置存储器基本特征
根据选用的存储器芯片确定需要配置的存储器特征:
1确定存储器类型(SRAM)
2确定存储器芯片的数据和地址引脚是否复用,
3确定存储器芯片的数据线宽度,
4对于NOR Flash,确定是否采用同步突发访问方式,
5对于NOR Flash,NWIT信号的特性说明,
6对于该存储器芯片的读写操作,确定是否采用相同的时许参数来确定时序关系。
(4) 配置存储器时序参数
FSMC通过使用可编程的存储器时序参数寄存器,拓展了可选用的外部存储器的速度范围,fsmc 的NOR Flash控制器支持同步和异步突发两种访问方式,本例选用的后者,主要设置3个时间参数:地址建立时间;数据建立时间;地址保持时间。具体参数见选扩展的存储器芯片手册。
FWLIB\src\stm32f4xx_fsmc.c(130): error: #20: identifier "FSMC_Bank1" is undefined FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB; FWLIB\src\stm32f4xx_fsmc.c(135): error: #20: identifier "FSMC_Bank1" is undefined FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2; FWLIB\src\stm32f4xx_fsmc.c(137): error: #20: identifier "FSMC_Bank1" is undefined FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF; FWLIB\src\stm32f4xx_fsmc.c(138): error: #20: identifier "FSMC_Bank1E" is undefined FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF; FWLIB\src\stm32f4xx_fsmc.c(176): error: #20: identifier "FSMC_Bank1" is undefined tmpbcr = FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank]; FWLIB\src\stm32f4xx_fsmc.c(180): error: #20: identifier "FSMC_BCR1_MBKEN" is undefined tmpbcr &= ((uint32_t)~(FSMC_BCR1_MBKEN | FSMC_BCR1_MUXEN | FSMC_BCR1_MTYP | \ FWLIB\src\stm32f4xx_fsmc.c(180): error: #20: identifier "FSMC_BCR1_MUXEN" is undefined tmpbcr &= ((uint32_t)~(FSMC_BCR1_MBKEN | FSMC_BCR1_MUXEN | FSMC_BCR1_MTYP | \ FWLIB\src\stm32f4xx_fsmc.c(180): error: #20: identifier "FSMC_BCR1_MTYP" is undefined tmpbcr &= ((uint32_t)~(FSMC_BCR1_MBKEN | FSMC_BCR1_MUXEN | FSMC_BCR1_MTYP | \ FWLIB\src\stm32f4xx_fsmc.c(181): error: #20: identifier "FSMC_BCR1_MWID" is undefined FSMC_BCR1_MWID | FSMC_BCR1_FACCEN | FSMC_BCR1_BURSTEN | \ FWLIB\src\stm32f4xx_fsmc.c(181): error: #20: identifier "FSMC_BCR1_FACCEN" is undefined FSMC_BCR1_MWID | FSMC_BCR1_FACCEN | FSMC_BCR1_BURSTEN | \ FWLIB\src\stm32f4xx_fsmc.c(181): error: #20: identifier "FSMC_BCR1_BURSTEN" is undefined FSMC_BCR1_MWID | FSMC_BCR1_FACCEN | FSMC_BCR1_BURSTEN | \ FWLIB\src\stm32f4xx_fsmc.c(182): error: #20: identifier "FSMC_BCR1_WAITPOL" is undefined FSMC_BCR1_WAITPOL | FSMC_BCR1_WRAPMOD | FSMC_BCR1_WAITCFG | \ FWLIB\src\stm32f4xx_fsmc.c(182): error: #20: identifier "FSMC_BCR1_WRAPMOD" is undefined FSMC_BCR1_WAITPOL | FSMC_BCR1_WRAPMOD | FSMC_BCR1_WAITCFG | \ FWLIB\src\stm32f4xx_fsmc.c(182): error: #20: identifier "FSMC_BCR1_WAITCFG" is undefined FSMC_BCR1_WAITPOL | FSMC_BCR1_WRAPMOD | FSMC_BCR1_WAITCFG | \ FWLIB\src\stm32f4xx_fsmc.c(183): error: #20: identifier "FSMC_BCR1_WREN" is undefined FSMC_BCR1_WREN | FSMC_BCR1_WAITEN | FSMC_BCR1_EXTMOD | \ FWLIB\src\stm32f4xx_fsmc.c(183): error: #20: identifier "FSMC_BCR1_WAITEN" is undefined FSMC_BCR1_WREN | FSMC_BCR1_WAITEN | FSMC_BCR1_EXTMOD | \ FWLIB\src\stm32f4xx_fsmc.c(183): error: #20: identifier "FSMC_BCR1_EXTMOD" is undefined FSMC_BCR1_WREN | FSMC_BCR1_WAITEN | FSMC_BCR1_EXTMOD | \ FWLIB\src\stm32f4xx_fsmc.c(184): error: #20: identifier "FSMC_BCR1_ASYNCWAIT" is undefined FSMC_BCR1_ASYNCWAIT | FSMC_BCR1_CBURSTRW)); FWLIB\src\stm32f4xx_fsmc.c(184): error: #20: identifier "FSMC_BCR1_CBURSTRW" is undefined FSMC_BCR1_ASYNCWAIT | FSMC_BCR1_CBURSTRW)); FWLIB\src\stm32f4xx_fsmc.c(211): error: #20: identifier "FSMC_BTR1_ADDSET" is undefined tmpbtr &= ((uint32_t)~(FSMC_BTR1_ADDSET | FSMC_BTR1_ADDHLD | FSMC_BTR1_DATAST | \ FWLIB\src\stm32f4xx_fsmc.c(211): error: #20: identifier "FSMC_BTR1_ADDHLD" is undefined tmpbtr &= ((uint32_t)~(FSMC_BTR1_ADDSET | FSMC_BTR1_ADDHLD | FSMC_BTR1_DATAST | \ FWLIB\src\stm32f4xx_fsmc.c(211): error: #20: identifier "FSMC_BTR1_DATAST" is undefined tmpbtr &= ((uint32_t)~(FSMC_BTR1_ADDSET | FSMC_BTR1_ADDHLD | FSMC_BTR1_DATAST | \ FWLIB\src\stm32f4xx_fsmc.c(212): error: #20: identifier "FSMC_BTR1_BUSTURN" is undefined FSMC_BTR1_BUSTURN | FSMC_BTR1_CLKDIV | FSMC_BTR1_DATLAT | \ FWLIB\src\stm32f4xx_fsmc.c(212): error: #20: identifier "FSMC_BTR1_CLKDIV" is undefined FSMC_BTR1_BUSTURN | FSMC_BTR1_CLKDIV | FSMC_BTR1_DATLAT | \ FWLIB\src\stm32f4xx_fsmc.c(212): error: #20: identifier "FSMC_BTR1_DATLAT" is undefined FSMC_BTR1_BUSTURN | FSMC_BTR1_CLKDIV | FSMC_BTR1_DATLAT | \ FWLIB\src\stm32f4xx_fsmc.c(213): error: #20: identifier "FSMC_BTR1_ACCMOD" is undefined FSMC_BTR1_ACCMOD)); FWLIB\src\stm32f4xx_fsmc.c(236): error: #20: identifier "FSMC_Bank1E" is undefined tmpbwr = FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank]; FWLIB\src\stm32f4xx_fsmc.c(239): error: #20: identifier "FSMC_BWTR1_ADDSET" is undefined tmpbwr &= ((uint32_t)~(FSMC_BWTR1_ADDSET | FSMC_BWTR1_ADDHLD | FSMC_BWTR1_DATAST | \ FWLIB\src\stm32f4xx_fsmc.c(239): error: #20: identifier "FSMC_BWTR1_ADDHLD" is undefined tmpbwr &= ((uint32_t)~(FSMC_BWTR1_ADDSET | FSMC_BWTR1_ADDHLD | FSMC_BWTR1_DATAST | \ FWLIB\src\stm32f4xx_fsmc.c(239): error: #20: identifier "FSMC_BWTR1_DATAST" is undefined tmpbwr &= ((uint32_t)~(FSMC_BWTR1_ADDSET | FSMC_BWTR1_ADDHLD | FSMC_BWTR1_DATAST | \
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值