打印

请教一个FSMC的使用问题

[复制链接]
3527|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bmwlover02|  楼主 | 2008-8-8 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用STM32F103VET6的时候,操作FSMC总线,用到Bank1的PSRAM2模式(操作液晶)。在设置FSMC Register的时候对0xA0000008地址访问没有任何反应(从memory窗口读出),编译环境为Keil。已经看到汇编指令里边有STR  r1,[r3,r2,LSL #2]指令,其中R3为0xA000000,r1为0x00001000,r2为0x00000002,但执行完此条指令后地址0xA0000008中的数据依然为零。仿真的时候0xA0000008数据有变化,如果将FSMC_R_BASE的地址设置为0x20000000(Ram的地址),实时调试的时候Ram的空间也有变化,但一旦换回0xA0000000就没有反应,定义一个变量读这个地址得到的数据都是零。
沙发
香水城| | 2008-8-8 18:13 | 只看该作者

如何配置FSMC的?

使用特权

评论回复
板凳
bmwlover02|  楼主 | 2008-8-9 12:04 | 只看该作者

回复主题:请教一个FSMC的使用问题

详细流程如下
首先stm32f10x_map.h里边定义了
#define FSMC_R_BASE           ((u32)0xA0000000)
#define FSMC_Bank1_R_BASE     (FSMC_R_BASE + 0x0000)

#define FSMC_Bank1          ((FSMC_Bank1_TypeDef *) FSMC_Bank1_R_BASE)
然后再程序里边定义了
/* FSMC NOR/SRAM Init structure definition */
typedef struct
{
  u32 FSMC_Bank;
  u32 FSMC_DataAddressMux;
  u32 FSMC_MemoryType;
  u32 FSMC_MemoryDataWidth;
  u32 FSMC_BurstAccessMode;
  u32 FSMC_WaitSignalPolarity;
  u32 FSMC_WrapMode;
  u32 FSMC_WaitSignalActive;
  u32 FSMC_WriteOperation;
  u32 FSMC_WaitSignal;
  u32 FSMC_ExtendedMode;
  u32 FSMC_AsyncWait;
  u32 FSMC_WriteBurst;
  /* Timing Parameters for write and read access if the  ExtendedMode is not used*/
  FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct;
  /* Timing Parameters for write access if the  ExtendedMode is used*/
  FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;
}FSMC_NORSRAMInitTypeDef;

对此结构体初始化后使用
  /* Bank1 NOR/SRAM control register configuration */ 
  FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 
            (u32)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux |
            FSMC_NORSRAMInitStruct->FSMC_MemoryType |
            FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth |
            FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity |
            FSMC_NORSRAMInitStruct->FSMC_WrapMode |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive |
            FSMC_NORSRAMInitStruct->FSMC_WriteOperation |
            FSMC_NORSRAMInitStruct->FSMC_WaitSignal |
            FSMC_NORSRAMInitStruct->FSMC_ExtendedMode |
            FSMC_NORSRAMInitStruct->FSMC_AsyncWait |
            FSMC_NORSRAMInitStruct->FSMC_WriteBurst;
语句付值,由于FSMC_Bank1地址为0xA000 0000,所以应该从从memory窗口看到这个地方值的变化,但是JTAG仿真的时候这个地方的值没有任何变化.软仿的时候有变化.如果设定一个变量,
如tempsee=  FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank];
在软仿的时候读出来的值是对的,但是JTAG仿真的时候读出来的是0,而且似乎这个地方Datasheet上说Reset value: 0x0000 30XX,不知道为什么,两块板子都一样,芯片是103VE,下载线是ulink

使用特权

评论回复
地板
ijk| | 2008-8-9 13:59 | 只看该作者

可能硬件上有问题?

使用特权

评论回复
5
bmwlover02|  楼主 | 2008-8-9 17:01 | 只看该作者

回复主题:请教一个FSMC的使用问题

这个和硬件没有什么关系吧...都没有什么外部操作..都是内部寄存器阿,而且我换了两颗芯片都是一样的,除非是芯片的问题

使用特权

评论回复
6
bmwlover02|  楼主 | 2008-8-9 23:05 | 只看该作者

回复主题:请教一个FSMC的使用问题

有人知道这个问题么,郁闷了N久。。继续郁闷中

使用特权

评论回复
7
香水城| | 2008-8-9 23:24 | 只看该作者

是否使能FSMC的时钟?

使用特权

评论回复
8
bmwlover02|  楼主 | 2008-8-9 23:27 | 只看该作者

回复主题:请教一个FSMC的使用问题

恩,谢谢香版主,确实如此。。忘记加时钟了。。。哎,现在越来越粗心了。。郁闷了一天,十分感谢十分感谢

使用特权

评论回复
9
bmwlover02|  楼主 | 2008-8-9 23:30 | 只看该作者

回复主题:请教一个FSMC的使用问题

因为使用了configuration Wizard的一个统一初始化文件,就把例程中配置端口状态的的LCD_CtrlLinesConfig给屏蔽了,结果忘记了里边不止配置了IO端口,还配置了时钟,加入RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
还有  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |, ENABLE);就完全OK了

使用特权

评论回复
10
贞观之治| | 2013-1-22 11:22 | 只看该作者
有没有能简单说明的呀?期待中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

25

帖子

1

粉丝