STM32的FSMC仿真可运行

发布者:HarmonySpirit最新更新时间:2015-10-14 来源: eefocus关键字:STM32  FSMC  仿真 手机看文章 扫描二维码
随时随地手机看文章
调试了几天STM32的FSMC驱动液晶的程序,原先在MDK上编译下载后可以运行的程序,移植到IAR上后就出现了问题,(以下描述的是在从新上电复位后运行的现象,但在jlink调试过程中运行都是正常的)
问题是这样的:程序运行完 *(__IO uint16_t *) (Bank1_LCD_C)= index; 后就不在往下运行了,反复实验了N次,只有一次进入了Hardfault, 而剩下的情况都是mcu不运行了。查了很多资料终于在一片《STM32F103 FSMC 同步模式  学习笔记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、程序可以脱机运行,但是运行得很慢
关键字:STM32  FSMC  仿真 引用地址:STM32的FSMC仿真可运行

上一篇:STM32中断优先级彻底讲解
下一篇:stm32的时钟设定

推荐阅读最新更新时间:2024-03-16 14:35

stm32 Flash读写[库函数]
通过对stm32内部的flash的读写可以实现对stm32的编程操作。 stm32 的内置可编程Flash在许多场合具有十分重要的意义。如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写;支持IAP特性使得开发人员可以在stm32运行程序的时候对其内部程序进行更新操作。对一些对数据安全有要求的场合,可编程FLASH可以结合stm32内部唯一的身份标识实现各种各样的防破解方案。并且stm32的FLASH在一些轻量级的防掉电存储方案中也有立足之地。 stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放
[单片机]
光伏并网逆变器控制与仿真设计
        为了达到提高光伏逆变器的容量和性能目的,采用并联型注入变换技术。根据逆变器结构以及光伏发电阵电流源输出的特点,选用工频隔离型光伏并网逆变器结构,并在仿真软件PSCAD中搭建光伏电池和逆变器模型,最后通过仿真与实验验证了理论的正确性和控制策略的可行性。   近年来,应用于可再生能源的并网变换技术在电力电子技术领域形成研究热点。并网变换器在太阳能光伏、风力发电等可再生能源分布式能源系统中具有广阔发展前景。太阳能、风能发电的重要应用模式是并网发电,并网逆变技术是太阳能光伏并网发电的关键技术。在光伏并网发电系统中所用到的逆变器主要基于以下技术特点:具有宽的直流输入范围;具有最大功率跟踪(MPPT)功能;并网逆变器输
[电源管理]
光伏并网逆变器控制与<font color='red'>仿真</font>设计
stm32 各头文件或C文件功能
stm32f10x_con.h 配置文件:加载哪个外设、使能assert 对参数进行检查,如果使能了assert 需要在main文件中添加 _assert_faild 函数。 使能assert会增大编译出执行文件的大小,调试完后可以将assert 屏蔽。 stm32f10x.h头文件中包含了stm32f10x_conf.h 。 stm32f10x.h 1、对所有的外设的地址进行映射,映射到存储区,即定义某外设结构体变量,因为结构体是连续存储的只要将外设的基地址强制转换为结构体类型的指针,那么该外设的寄存器就可以通过指针进行访问,以GPIO为例: 定义外设的结构体,结构体变量都
[单片机]
基于STM32的开源简易示波器项目
一、前言 该项目是基于正点原子精英板制作的一个简易示波器,可以读取信号的频率和幅值,并可以通过按键改变采样频率和控制屏幕的更新暂停。 二、硬件接线 将PA6与PA4相连,可观察到正弦波。 将PA6与PA5相连,可观察到三角波/噪声(默认三角波)。 KEY_UP控制波形的更新和暂停。 KEY_1降低采样率。 KEY_0提高采样率。 三、信号的采集 信号的采集主要是依靠ADC(通过定时器触发采样,与在定时器中断中开启一次采样的效果类似,以此来控制采样的间隔时间相同),然后通过DMA将所采集的数据从ADC的DR寄存器转移到一个变量中,此时完成一次采样。 由于设定采集一次完整的波形需要1024个点,即需要连续采集1024次才算一次
[单片机]
基于<font color='red'>STM32</font>的开源简易示波器项目
一种简易00-99计数器的设计与仿真
  1 系统描述   本系统利用AT89C51 单片机来制作一个手动计数器,在AT89C51 单片机的P3.2 管脚和P3.3 管脚各接一个轻触开关K1和K2,作为手动计数的按钮,用单片机的P0.0 - P0.7 接一个两位绿色共阴极数码管(7SEG-COM-CAT-GRN),作为00 - 99 计数的个位数和十位数显示。系统正常运行后显示00,按一次K1 键,数字加1,当计数到 99 时,再按一次 K1 键,又从00 开始计数。当计数到 99 时,按一次K2,计数为98,继续按K2,直到计数为00,由此实现正计数和倒计数的功能。本系统可用于竞技比赛中的计分,或者用于重要事件将要到来的倒计时。   2 硬件电路设计   硬件
[单片机]
一种简易00-99计数器的设计与<font color='red'>仿真</font>
stm32接收中文字符,解析中文字符的方法与调试
测试过程: 1、在keil中写出一个字符,例如 袁 ,然后写一个测试程序: u8 *arr = 袁 ; while(*arr!=0) { printf( 0x%2x ,*arr++); } 可以看到打印出来一个结果:0xd4 0xac。 2、解析这种打印的原因: 新建一个txt文件,用ultraedit打开,然后查看其十六机制的格式(CTRL+H),可以看到其结果是一样的,然后再用记事本打开这个文件,另存为,可以看到其编码方式为ANSI。 3、反向编写程序 u8 arr ={0xd4,0xac}; printf( %s\r\n ,arr); 可以看到结果也是 袁 ,也即是说,对于设备的
[单片机]
STM32入门开发: 制作红外线遥控器(智能居家-万能遥控器)
一、环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。 编码发送思路: 延时函数模拟38KHZ + PWM产生38KHZ两种方式 代码风格: 模块化编程,寄存器直接操作方式 完整keil工程源码下载(解压即可编译运行测试): https://download.csdn.net/download/xiaolong1126626497/19863305 二、NEC协议与相关硬件介绍 2.1 NEC协议介绍 NEC协议在上篇 STM32入门开发: NEC红外线协议解码(超低成本无线传输方案)
[单片机]
<font color='red'>STM32</font>入门开发: 制作红外线遥控器(智能居家-万能遥控器)
STM32的标准库编译成lib使用
以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。 于是,我有了将库编译成lib文件的想法。本文就是我将STM32F4的标准库编译成lib文件并在工程中使用的过程。 适用对象: 1. 熟悉库,不想再看库里边代码 2. 有稳定的库,库文件更新不频繁 3. 库文件多,每次编译时间长 下面是我将STM32F4的标准库编译成lib并在工程中使用的过程: 1、建立创建lib的工程 2、将库文件拷贝到工程目录: 将库里边目录STM32F4xx_S
[单片机]
将<font color='red'>STM32</font>的标准库编译成lib使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved