当前位置: 代码迷 >> 单片机 >> STM32 怎么看硬异常是什么原因
  详细解决方案

STM32 怎么看硬异常是什么原因

热度:112   发布时间:2016-04-28 15:53:35.0
STM32 如何看硬错误是什么原因

初学 RTT、
现在把网络调好了、正在调显示部分、
显示用的是 ILI9325 的 LCD、

程序在 FSMC_NORSRAMStructInit 这里产生硬错误、
具体在这一句、
FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime = 0xF;
搞不懂这句怎么就会产生硬错误了、

还想问下怎么看硬错误由什么产生的、听说可以看寄存器、但不知看哪个寄存器、

如果不修改 rt_hw_lcd_init 这个函数的引脚配置就没有硬错误、但它默认是 PF.10、100 脚的封装没这个引脚、
所以就修改了、
但不管修改成 PC.0 也好、PE.3 也好、都会产生硬错误、这就不懂了..........
哪位 DX 解释下、、

附上 rt_hw_lcd_init 的代码、
C/C++ code
void rt_hw_lcd_init(void){    /* LCD RESET */    /* PF10 : LCD RESET */    {        GPIO_InitTypeDef GPIO_InitStructure;        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;        GPIO_Init(GPIOE,&GPIO_InitStructure);        GPIO_ResetBits(GPIOE,GPIO_Pin_3);        GPIO_SetBits(GPIOE,GPIO_Pin_3);        /* wait for lcd reset */        rt_thread_delay(1);    }    /* register lcd device */    _lcd_device.type  = RT_Device_Class_Graphic;    _lcd_device.init  = lcd_init;    _lcd_device.open  = lcd_open;    _lcd_device.close = lcd_close;    _lcd_device.control = lcd_control;    _lcd_device.read  = RT_NULL;    _lcd_device.write = RT_NULL;    _lcd_device.user_data = &lcd_ili_ops;    lcd_Initializtion();    /* register graphic device driver */    rt_device_register(&_lcd_device, "lcd",                       RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE);}


------解决方案--------------------
没看到你代码里到底哪里使用了FSMC_NORSRAMInitStruct啊?
一般硬错误最大可能是访问了非法地址。请检查一下执行这个赋值语句时这个结构体指针FSMC_NORSRAMInitStruct和下一级指针是否已经赋了正确的值?强烈怀疑这是野指针(未赋初值就引用)吧?