您的位置 首页 开关

STM32的FSMC仿真可运转

调试了几天STM32的FSMC驱动液晶的程序,原先在MDK上编译下载后可以运行的程序,移植到IAR上后就出现了问题,(以下描述的是在从新上电复位后

调试了几天STM32FSMC驱动液晶的程序,原先在MDK上编译下载后能够运转的程序,移植到IAR上后就呈现了问题,(以下描绘的是在重新上电复位后运转的现象,但在jlink调试进程中运转都是正常的)

问题是这样的:程序运转完 *(__IO uint16_t *) (Bank1_LCD_C)= index; 后就不在往下运转了,重复试验了N次,只要一次进入了Hardfault, 而剩余的状况都是mcu不运转了。查了许多材料总算在一片《STM32F103FSMC同步形式学习笔记2》文章中找到了答案,原因是在FSMC初始化进程中呈现的,咱们初学者编程序都有以个缺陷,便是界说请求的变量后都不进行变量初始化操作(特别是界说了一些较为杂乱的结构体之后),而在咱们运用的进程中又忽视一些未运用的变量,这些都会导致一系列咱们不想初相的问题,而编译器有时候也不可能智能到依照咱们默许地主意为咱们做好各种细节的操作。
FSMC_NORSRAMInitTypeDef结构体的界说是这样的:
typedef struct
{
uint32_t FSMC_Bank;
uint32_t FSMC_DataAddressMux;
uint32_t FSMC_MemoryType;
uint32_t FSMC_MemoryDataWidth;
uint32_t FSMC_BurstAccessMode;
uint32_t FSMC_AsynchronousWait;
uint32_t FSMC_WaitSignalPolarity;
uint32_t FSMC_WrapMode;
uint32_t FSMC_WaitSignalActive;
uint32_t FSMC_WriteOperation;
uint32_t FSMC_WaitSignal;
uint32_t FSMC_ExtendedMode;
uint32_t FSMC_WriteBurst;
FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct;
FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;
}FSMC_NORSRAMInitTypeDef;
我的参看的程序在对FSMC_NORSRAMInitTypeDef结构体的初始化进程中是这样的:
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; //Bank1基址0x60000000
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //封闭地址、数据线混合形式
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR; //挑选存储器形式,挑选与液晶控制器相似的形式
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //数据宽度16位
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_DuringWaitState;//FSMC_WaitSignalActive_BeforeWaitState;//接连传输形式中在等候状况前发等候信号
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //使能FSMC写操作
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 = &FSMC_Timing; //用FSMC_Timing结构体设定读写时序
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //以上参数初始化FSMC
这个结构体初始化进程只对结构体里边的13项进行了初始化,而结构体界说了15项,也便是说咱们默许为进行初始化操作的别的两项内存值应该都0x00,而现实并非咱们所想想的那样,问题就出在这儿。处理的办法也很简单,那便是加一句将FSMC_NORSRAMInitTypeDef初始化为0x00的句子接能够了。
FSMC_NORSRAMInitTypeDef 结构体未进行初始化可能会呈现一下几种纠结的状况:
1、像我上面遇到的相同,用jlink调试是能够运转,可是体系重新上电后就会呈现运转完一个FSMC的读写操作后就会呈现Hardfault或则程序直接死在了这儿(应该说单片机进入了某种等候状况,这种状况如果是处在jlink调试形式下,就可能导致仿真不能中止的状况,而只能封闭jlink调试,重新复位开发板,然后重新开端jlink调试运转)
2、程序能够脱机运转,可是运转得很慢

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/258087.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部