调试FSMC时遇到的fault,求教!

[复制链接]
4010|4
 楼主| 江陵龙少 发表于 2012-5-18 16:31 | 显示全部楼层 |阅读模式
本帖最后由 江陵龙少 于 2012-6-15 20:57 编辑

用stm32f103vc的FSMC来访问ILI9325控制器的LCD,遇到了奇怪的问题:一段冗余代码不能去掉,就是下面列出的这一段。一旦去掉,对LCD的总线访问就会出现问题,单步调试就会跑飞,程序下进去也不能正常运行,我用的工具是:
keil3.80a
J-link:v8

这段冗余代码在压缩包内的lcd.c中,是一个函数,如下:
注:我在main.c中另有一个FSMC的初始化函数,因此,下面这个是冗余的。
/**********************************************************************************
     FSMC init
**********************************************************************************/
void LCD_FSMCInit(void)
{
//FSMC时钟的启动统一放在main()函数中调用clock模块中的时钟初始化函数之后
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
p.FSMC_AddressSetupTime = 0x02;
p.FSMC_AddressHoldTime = 0x00;
p.FSMC_DataSetupTime = 0x05;
p.FSMC_BusTurnAroundDuration = 0x00;
p.FSMC_CLKDivision = 0x00;
p.FSMC_DataLatency = 0x00;
p.FSMC_AccessMode = FSMC_AccessMode_B;
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;   
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

}


我在flash和sram中进行调试都是同样的地方出问题,
用keil4.22a的话,更加不行,加上那段冗余代码,也通不过。

请大家指点!

FSMC_ILI9325调试的奇怪问题.rar

467.46 KB, 下载次数: 23

 楼主| 江陵龙少 发表于 2012-5-18 16:51 | 显示全部楼层
本帖最后由 江陵龙少 于 2012-5-18 22:57 编辑

出现fault时的告警信息:







加上冗余代码后正确 的情况:
 楼主| 江陵龙少 发表于 2012-5-19 08:57 | 显示全部楼层
airwill 发表于 2012-5-19 13:40 | 显示全部楼层
Cound not stop Cortex-M device.
通常是 JTAG 或者连接和干扰引起的, 跟程序关系不大(除非你关闭的 JTAG 接口).
eakliu 发表于 2012-6-18 11:40 | 显示全部楼层
108799

108800
江陵龙少 发表于 2012-5-19 08:57


hi, 楼主, 我看了一下你的代码,

1. 你记得加上变量初始化部分


  1.         FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;

  2.         FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;        

  3.         FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);


这个很重要, 否则你后面设置的参数就有可能出错,导致莫名其妙的错误

2. 初始化顺序,我建议把 rcc, gpio 都初始化完, 在初始化 fsmc

3. 在初始化 fsmc的时候, 控制 lcd处于reset状态, 这样保证fsmc总线脚上电平不被影响,


经过我的初步软件仿真, 发现 没有加我的第一部分,你初始化是错误的, 你可以看fsmc寄存的值,
加上初始化变量部分,看到初始化的是对的,

楼至可以再验证一下, 我相信,加上初始化代码, 应该可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

286

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部