5135|6

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

FSMC有没有中文使用说明?不使用库的话,初始化过程是什么样 [复制链接]

                                  
此帖出自stm32/stm8论坛

最新回复

                                 但FACCEN位却没有置位,造成FSMC不能使能.另外一个问题,FSMC不的读不能设为波形图上的最快. ADDSET = 0;  DATAST = 0ADDHLD = 0; 模式0  在这种情况下会造成JTAG锁死,只能用其它方式擦完falsh后重新上电方可在连上.我的设置是:  ADDSET = 0;  DATAST = 1  ADDHLD = 0;  模式0   详情 回复 发表于 2008-8-27 08:31
点赞 关注
 

回复
举报

57

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

我一操作外部空间的地址就过硬件失效中断

                                 最有意思的一次是读0x64000000,结果造成JTAG锁死且靠重新上电无法恢复! 相当的活见鬼啊!  不知FSMC设置方面有什么需要注意的,有没有寄存器写的先后要求?是否需要先使能时钟,是否需要先使能FSMC后在设置寄存器,还是先设寄存器后使能.  但不管咱样,咱的会进硬件失效中断啊!真是相当的夸张!
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

FSMC不难操作

  根据经验,FSMC不难操作。下面给出一些代码,代码可用于ST的官方评估板STM3210E-EVAL,仅供参考:

// Note: NOR /CS is CE1 - Bank 1 of 0~3
#define EVAL_NOR_BASE        ((u32)(0x60000000 | 0x04000000))
#define EVAL_NOR             ((EVAL_NOR_TypeDef *) EVAL_NOR_BASE)

//...

//-----------------------------------------------------------------
//   NOR(M29W128, /CS1-of 0~3) initialization
//-----------------------------------------------------------------
void NOR_Test_Init(void)
{
  // NOR IO configuration --------------------------------------//
  // Enable FSMC, GPIOD~G & AFEN(Alternate Function) clock //
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
                         RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
                         RCC_APB2Periph_AFIO, ENABLE);
  // Set PD0,1, 4~5, 8~15 as PP AF - D2,3, OE,WE, D13~15, A16~18, D0~1
//...
  // Set PE3~6, 7~15 as PP AF - A19~22, D4~12
//...
  // Set PF0~5, 12~15 as PP AF - A0~5, A6~9
//...
  // Set PG0~5, 9 as PP AF - A10~15, CE1
//...

  // NOR configuration ------------------------------------------//
  // NOR configured as follow:
  //      - Data/Address MUX = Disable
  //      - Memory Type = NOR
  //      - Data Width = 16bit
  //      - Reset Pin Level = High (needed for Flash memory)
  //      - Wait Signal Polarity = Low
  //      - Write Operation = Enable
  //      - Extended Mode = Disable
  //      - Asynchronous Wait = Disable
  // for test purpose only
//  FSMC_Bank1->BTCR[2] = FSMC_DataAddressMux_Disable | FSMC_MemoryType_SRAM |
//                        FSMC_MemoryDataWidth_16b | FSMC_WaitSignalPolarity_Low |
//                        FSMC_WriteOperation_Enable |
//                        FSMC_ExtendedMode_Disable | FSMC_AsyncWait_Disable;

  FSMC_Bank1->BTCR[2] = FSMC_DataAddressMux_Disable | FSMC_MemoryType_NOR |
                        FSMC_MemoryDataWidth_16b | FSMC_FlashResetPinLevel_High |
                        FSMC_WaitSignalPolarity_Low | FSMC_WriteOperation_Enable |
                        FSMC_ExtendedMode_Disable | FSMC_AsyncWait_Disable;

  // and as follow (NOR cycle time is <= 80ns):
  //      - Address Setup Time = 0x03
  //      - Address Hold Time = 0x00
  //      - Data Setup Time = 0x04
  //      - Bus Turn around Duration = 0x05
  FSMC_Bank1->BTCR[3] = 0x00050403;
  //      - BANK 1 (of NOR/SRAM Bank 0~3) is enabled
  FSMC_Bank1->BTCR[2] |= 0x0001;
}

随后就可以对 NOR 进行读写了:
//-----------------------------------------------------------------
//   NOR(M29W128) test
//   return NOR_TEST_FAIL_xx - Fail
//   return NOR_TEST_PASS - PASS
//-----------------------------------------------------------------
u8 NOR_Test(u32 address)
{
//...
}
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 

LS的是参照库改的吧!我没有用库!正在看它是怎么设置的!

                                 我没有用库,所有都是直接地址操作! ST有关寄存器设置顺序方面的文档基本没有,只能是看它的库是确保顺序了!
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 

关于上面的示例

  关于上面的示例,除了打开FSMC的时钟,其它都是直接操作FSMC的寄存器,当然示例使用了库中的定义(自己没必要重复定义)。有1点需要特别注意(或许跟LZ的问题有关):
  //      - Reset Pin Level = High (needed for Flash memory)

  FSMC_Bank1->BTCR[2] = FSMC_DataAddressMux_Disable | FSMC_MemoryType_NOR |
                        FSMC_MemoryDataWidth_16b | FSMC_FlashResetPinLevel_High |
                        FSMC_WaitSignalPolarity_Low | FSMC_WriteOperation_Enable |
                        FSMC_ExtendedMode_Disable | FSMC_AsyncWait_Disable;
此帖出自stm32/stm8论坛
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

6
 

我唯一和库同的是我先使能的FSMC

FSMC_Bank1->BTCR[2] |= 0x0001;

而后才设置的寄存器!
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 

我的FSMC终于正常了,原来是因为存贮类型选了NOR

但FACCEN位却没有置位,造成FSMC不能使能.

另外一个问题,FSMC不的读不能设为波形图上的最快. ADDSET = 0;  DATAST = 0
ADDHLD = 0; 模式0  在这种情况下会造成JTAG锁死,只能用其它方式擦完falsh后重新上电方可在连上.
我的设置是:  ADDSET = 0;  DATAST = 1  ADDHLD = 0;  模式0
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表