STM32的FSMC总线驱动ili9341,掉电重启无法正常显示的问题
2014-10-30 21:28
357 查看
问题描述
通过STM32的FSMC总线驱动ili9341,程序调试和刚下载的时候,显示完全正常。可是就在我掉电关机,重新启动的时候就完全跑飞了。这令我非常疑惑。以下是我的FSMC总线配置程序,
解决的方法
在使用FSMC_NORSRAMInit函数通过传入参数FSMC_NORSRAMInitStructure初始化FSMC总线之前,需要先将这个传入变量FSMC_NORSRAMInitStructure通过函数FSMC_NORSRAMStructInit函数初始化这个变量。
原因分析
为什么这么做呢?因为传入的变量是一个自动变量,进入我们的FSMC设置函数时,它的值是不确定的。假设我们没有对其初始化成默认值,直接利用这个变量。如果我们队这个变量的每一个参数都设置成我们确定的值,那么FSMC就可以按照我们设置的工作。倘若我们没有做到,只将这个变量的一部分参数进行设置,显然还有一些参数是不可预测的。导致的结果就是,我们调用库函数FSMC_NORSRAMInit初始化的时候,这些不可测的参数使我们的设置出乎我们的预料。
总结
由此,我也得出一个教训,在我们调用库函数的时候,要先将传入库函数的自动变量进行初始化。然后再来使用,这样最严谨,最可靠。
通过STM32的FSMC总线驱动ili9341,程序调试和刚下载的时候,显示完全正常。可是就在我掉电关机,重新启动的时候就完全跑飞了。这令我非常疑惑。以下是我的FSMC总线配置程序,
static void LCD_FSMC_Config(void) { 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_SRAM; 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); }
解决的方法
在使用FSMC_NORSRAMInit函数通过传入参数FSMC_NORSRAMInitStructure初始化FSMC总线之前,需要先将这个传入变量FSMC_NORSRAMInitStructure通过函数FSMC_NORSRAMStructInit函数初始化这个变量。
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);
原因分析
为什么这么做呢?因为传入的变量是一个自动变量,进入我们的FSMC设置函数时,它的值是不确定的。假设我们没有对其初始化成默认值,直接利用这个变量。如果我们队这个变量的每一个参数都设置成我们确定的值,那么FSMC就可以按照我们设置的工作。倘若我们没有做到,只将这个变量的一部分参数进行设置,显然还有一些参数是不可预测的。导致的结果就是,我们调用库函数FSMC_NORSRAMInit初始化的时候,这些不可测的参数使我们的设置出乎我们的预料。
总结
由此,我也得出一个教训,在我们调用库函数的时候,要先将传入库函数的自动变量进行初始化。然后再来使用,这样最严谨,最可靠。
相关文章推荐
- 在没有安装vs.net或vs6.0的IE上无法正常显示OWC图表问题的解决方案
- Asp.net2.0部署时TreeView控件无法正常显示没有图片的问题
- 关于开机显示GRUB 无法正常进入系统的问题
- [问题说明]文章中的Javascript造成首页无法正常显示
- 文档库创建的子文件夹的URL显示为 http://[机器名]/.... 导致无法正常访问的问题解决办法
- ubuntu 11.10下配置adb命令&设备无法正常显示问题
- 关于window2008计划任务前台显示和批处理无法正常执行问题的解决办法
- freetype使用日记 -- 解决宋体,楷体中文在某些字号下无法正常显示的问题
- ubuntu 11.04 gnome3 下的gedit无法正常显示中文,出现乱码问题解决
- 解决vista系统部分CHM打不开,“无法正常显示”的问题
- vista 64无法正常安装驱动的问题--SetupCopyOEMInf
- vista 64无法正常安装驱动的问题--
- 某些.chm格式文件无法正常显示的问题
- IE无法正常显示的问题
- treeview上传后无法正常显示图片问题
- CHM文件常见问题之一:右边内容无法正常显示
- MySQL的驱动引起Hibernate无法正常运行的问题
- Extjs中Kindeditor无法正常显示、无法渲染问题解决
- 关于从GridView表中导出数据到Excel表中,身份证或者长度过长的数据在Excel中无法正常显示的问题
- 2010-04-28系统问题IE无法正常显示网页