在此求助:今天一直在调试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
急死了。要不要学库啊。叹,无语。。 |
你的寄存器配置有问题 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;” 第一句没用,可以删掉。(或者你第二句想写“|=”?)