打印

求助:有关FSMC进入HardFault_Handler的问题啊

[复制链接]
3142|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanggexiaosa|  楼主 | 2012-9-26 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在此求助:今天一直在调试FSMC驱动液晶。因为没有用到库,只是自己操作寄存器,设置了GPIO口,设置了FSMC但是一但程序运行到写数据时就进入HardFault_Handler。让我头很大啊。我看了下其它的代码,是用的库,下载后一点问题都没有。这是神马情况呢?有哪里没设置??
还有,我要不要学库呢,有必要学库吗?学库对我有什么好处呢?

#define LCD_Write_D         ((u32) 0x60020000)         //同置设置好地址        
#define LCD_Write_C          ((u32) 0x60000000)


#define LCD_Write_Cmd(Cmd)                        ((*(vu16 *)LCD_Write_C)=((u16) Cmd))
#define LCD_Write_Data(dat)                        ((*(vu16 *)LCD_Write_D)=((u16)dat))


//----------------------------------------------------------------------------------------------------------------------------
//配置引脚除PD13配置成了开漏输出,其它的都为复用开漏输出
void GPIO_Initial(void)                              
{

        RCC->APB2ENR|=1<<5;                        //使能D引脚
        RCC->APB2ENR|=1<<6;                        //使能E引脚

        GPIOD->CRL=GPIOD->CRL&0x0f00ff00|0xb0bb00bb; //配置D引脚低8位
        GPIOD->CRH=GPIOD->CRH&0x000f0000|0xbb30bbbb; //配置D引脚高8位
        GPIOE->CRL=GPIOE->CRL&0x0fffff0f|0xb00000b0; //配置E引脚低8位
        GPIOE->CRH=GPIOE->CRH&0x00000000|0xbbbbbbbb; //配置E引脚高8位

        GPIOD->ODR|=0xcfb3;                        //置位PD0,1,4,5,7,8,9,10,11
        GPIOE->ODR|=0xff82;                        //置位PE1,7,8,9,10,11,12,13,14,15,

}

//配置FSMC
void FSMC_Initial(void)
{
        RCC->AHBENR|=1<<8;                        //使能FSMC功能
        FSMC_Bank1->BTCR[0]&=0xfff78080;
        FSMC_Bank1->BTCR[0]=0x0000100c;
        FSMC_Bank1->BTCR[1]&=0xc0000000;
        FSMC_Bank1->BTCR[1]=0x10000502;        
}


然后就进入液晶初始化,但是总是在执行LCD_Write_Data();这进入HardFault_Handler



急死了。要不要学库啊。叹,无语。。
评论
jueyin 2020-4-15 23:22 回复TA
你的寄存器配置有问题 FSMC_Bank1->BTCR[0] = FSMC_BCR1_WREN | FSMC_BCR1_FACCEN | FSMC_BCR1_MWID_0 | FSMC_BCR1_MTYP_1 | FSMC_BCR1_MBKEN; 自己算一下和你的“0x0000100c”相等嘛 还有“FSMC_Bank1->BTCR[0]&=0xfff78080; FSMC_Bank1->BTCR[0]=0x0000100c;” 第一句没用,可以删掉。(或者你第二句想写“|=”?) 
沙发
wufei608| | 2012-9-26 17:51 | 只看该作者
干嘛不用库啊,

使用特权

评论回复
板凳
Miltonliu2010| | 2012-9-29 14:16 | 只看该作者
你这是在做LCD的驱动吗?
建议你检查一下复位电路和BOOT脚。如果没有问题的话到启动文件里修改一下堆区和栈区的大小。
Stack_Size      EQU     0x00001000
Heap_Size       EQU     0x00000200
可以一步步增大。

使用特权

评论回复
地板
angus1121| | 2014-8-19 19:56 | 只看该作者
你好,我现在也是遇到相同的问题,请问你的问题解决了吗,是怎么解决的

使用特权

评论回复
5
icecut| | 2014-8-19 20:33 | 只看该作者
angus1121 发表于 2014-8-19 19:56
你好,我现在也是遇到相同的问题,请问你的问题解决了吗,是怎么解决的

挖坟帖子啊.你问题和他问题能一样吗?

使用特权

评论回复
6
jueyin| | 2020-4-15 23:31 | 只看该作者
我的代码不要直接复制,我的是NOR Flash驱动。问题关键是没有设置 FSMC_BCR1_WREN,这是写使能,不给写权限,一旦写入当然非法访问了。

使用特权

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

本版积分规则

3

主题

21

帖子

1

粉丝