打印

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

[复制链接]
3238|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 江陵龙少 于 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

沙发
江陵龙少|  楼主 | 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 接口).

使用特权

评论回复
5
eakliu| | 2012-6-18 11:40 | 只看该作者
108799

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


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

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

        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;

        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;        

        FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);


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

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

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


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

楼至可以再验证一下, 我相信,加上初始化代码, 应该可以了

使用特权

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

本版积分规则

85

主题

279

帖子

2

粉丝