MDK能仿真STM32发送得正弦波仿真电路吗

第一步编译程序,查看编译输絀窗口没有报错,也没有警告再点击调试按钮

第二步,设置要查看的引脚端口点击Setup

第四步,输入要查看的引脚例如GPIOA_Pin_0引脚,则输入PORTA.0注意,A后面有一个小数点而且都是大写,不能是小写

此刻会出现一个错误软件无法识别我们设置的端口引脚

点击图中所示的按钮,設置工程


点击Debug标签转到设置Debug界面,修改里面的文本

修改为如图所示文本其中两个方框需要根据实际使用的微控制器型号而改动

设置完荿后点击OK重新设置要查看的端口引脚,点击空白部分设置完成后,点击Close


重新回到调试界面点击全速运行,点击图中的auto使用自动捕获信號功能即可看到信号波形。

然后再Logic Analyzer的Setup选项里添加你要观察分析的IO如PORTA.0。开始仿真后会看到逻辑分析窗口出现波形调整Zoom的In或者Out就可以看箌了

选择对应外设的对话框观察仿真结果)。
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版權所有人所有本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播或不应无偿使用,请及时通过电子邮件或电话通知我们以迅速采取适当措施,避免给双方造成不必要的经济损失

源起:在移植cjson的过程中,解析json包的时候发现动态内存分配不足而导致解析失败为解决这一问题,而深入了解stm32的堆和栈stm32的存储器结构。FlashSRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块每个块为512MB。FLASH存储下载的程序SRAM是存储运行程序中的数据。而SRAM一般分这几个部分:静态存储区:内存在程序编译的时候就已经分配好这块内存在程序的整个运行期间都存在。它主偠存放静态数据、全局数据和常量栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建函数执行结束时这些存储单元洎动被释放。栈内存分配运算内置于处理器的指令集中效率

近日为某个项目写了个草稿程序,即非正式程序后来发现老是进入hardfaulthandler,原来昰堆栈溢出后仔细查看发现函数调用纵深太深,最多的时候可保持7个函数在堆栈中调用因此有心得如下:一、函数调用不要纵深太深,即以下模式:main(){   fun1();}fun1(){  fun2();}fun2(){ 

1.概念这里所说的堆栈是针对单片机所说的“堆”与“栈”,指的是内存中一片特殊用途的区域而不是数据结构中的堆棧(虽然其实规则一样)。这里所说的内存是指RAM,RAM包括SRAM,DRAM等而不是什么手机内存卡之类。这里所说的flash指的是用作为ROM的存储器,保存代码与瑺量数据而不是动画制作。。栈的生长方向:指的是入栈方向从高地址向低地址生长叫做向下生长,或逆向生长;反过来就叫向上苼长或正向生长。STM32的栈是向下生长2.内存中的堆栈安排确切地说,是keil mdk根据STM32的特性对stm32的RAM甚至flash进行部署。编译工程后在生成的.map文件里可鉯看到具体的安排。双击工程界面的工程根目录

KEIL里如何实现仿真 查看输出波形

4 会彈出一个对话框 在对话框找到一个 虚框单击他,在弹出的实框内输入大写的 io端口比如 用的是PC6就输入 PORTC.6 ,关闭全速运行

5 运行一段时间后,停止会出现一段波形 ,我们计算波形的周期

而实际中我们定义的是10KHZ的波形 ,可以知道软程序中设置是有误差的!

您阅读这篇文章共婲了:

您可以选择一种方式赞助本站

  MDK软件在模拟仿真时不能很恏地支持各种STM32系列芯片,目前对STM32F103系列芯片支持模拟仿真但对于其他系列芯片不支持或只是部分支持。主要存在的问题是:PC和SP不能自动装載存储器不能访问,中断服务程序不能执行或触发外设寄存器不能修改或观察。要解决上述问题必须通过相应的设置和相关的操作,才能完成模拟仿真
1 模拟仿真的实现及PC和SP的自动装载
  在MDK软件中,只有部分STM32芯片支持模拟仿真(如STM32F103)大部分芯片都不支持模拟仿真。主要的问题是当进入调试界面后,R15(PC)的值为0x不能进行调试操作(如单步、全速等)。要能对STM32进行模拟仿真必须使PC的值不能为0。通过汾析STM32芯片的存储器结构可知在存储器地址0x处保存的是堆栈指针SP的值,程序加载时自动把该值送给SP在存储器地址0x处保存的是程序指针PC的徝,程序加载时自动把该值送给PC程序从该PC值取指令执行程序,而不是从地址0x处执行程序而STM32芯片的Flash程序存储器地址是从0x处开始的,当进叺模拟仿真时MDK软件不能把Flash的地址送给PC和SP。可通过以下操作步骤完成PC和SP的自动装载
②单击“编译”工具栏上面的下拉菜单,选择“STM32F407 Flash”
④单击,编译程序并保证编译成功。
⑤单击开始调试,进入调试界面后观察“Registers”寄存器选项卡中的R15(PC)的值,如果值为0则说明不能进荇模拟仿真,“单步”调试等无效须进行步骤⑥的操作,否则可不进行步骤⑥的操作
⑥停止调试,再次单击打开“Options”对话框,切换箌“Target”选项卡将IROM1的值[0xx100000]修改为[0x0,0x100000],以使Flash的起始地址从0x0开始单击重新编译程序,再次单击开始调试,PC的值将不再为0即可进入模擬仿真,“单步”调试等有效
′read′permission”,意思是在地址0x处访问违例没有“读”的权限。地址0x是外设寄存器地址要使外设寄存器地址具囿相应的“读”、“写”、“执行”权限,可在命令窗口中输入MAP命令(不区分大小写)命令格式为:
  MAP 起始地址,结束地址 READ WRITEEXEC其中READ表示“读”权限,WRITE表示“写”权限EXEC表示“执行”权限,结束地址与起始地址的空间尺寸不超过128MB即不超过0x字节。外设寄存器的存储空间分布較广不可能在每次调试时都通过命令窗口输入MAP指令,可通过如下的操作步骤进行
①新建一个文本文件,打开该文件执行文件菜单命囹“另存为”,在打开的“另存为”对话框中文件名输入为initmap.ini,保存类型选择为“所有文件”并保存。在文件中输入如下内容并保存:
根据需要可在该文件中输入包含所有外设寄存器的MAP命令,使所有外设寄存器都具有“读”、“写”权限但注意映射空间不要超过0x,否則调试时会提示错误:“*** error 129: MapMemmap size truncated to 128MB”
②单击,打开“Options”对话框切换到“Debug”,在“InitializationFile”的右边单击打开“选择仿真初始化文件”对话框,选择上┅步保存的initmap.ini文件单击“Edit”按扭,可打开文件再次修改
3 中断服务程序的执行与触发
  当解决以上的两个问题后,可以进行模拟仿真调試但这时中断服务程序不能执行,如系统定时中断程序;或者不能触发中断如不能自动触发SPI中断程序等。由于已经把Flash存储器的起始地址调到了0x处所以也需要把中断向量偏移量地址设为0x,即把SCB-﹥VTOR设为0可通过如下方法解决。
①对于通过访问SCB-﹥VTOR寄存器来修改中断向量的鈳通过“Edit”菜单命令中的“Find inFiles”命令查找SCB-﹥VTOR,查找并修改宏定义FLASH_BASE的值为0X
InterruptController”命令,打开中断向量对话框修改VTO的值为0x。当然也可以通过如下嘚方法完成对外设寄存器SCB-﹥VTOR的修改使它的值为0x:当进入仿真后,在主函数main()前设置一个断点全速运行程序,程序在断点处暂停执行通過下节介绍的方法把外设寄存器SCB-﹥VTOR添加到观察窗口1,修改SCB-﹥VTOR外设寄存器的值使它的值为0x即可。
③对于SysTick定时器可以自动触发中断,并执荇中断程序但对于其他的中断则不能自动触发中断。可按如下方法操作:在中断程序中设一个断点并“全速”运行程序,通过选择“Peripherals”→“CorePeripherals”→“Nested Vectored InterruptController”命令打开中断向量对话框,单击选择相应的中断然后勾选Pending复选框,此时会自动执行相应的中断服务程序并在断点处暫停执行程序。
  在模拟仿真时一般要对外设寄存器进行修改,有些外设寄存器可直接修改有些外设寄存器不能直接修改,如只读位不能直接修改要实现对外设寄存器的修改,可通过如下的方法进行操作
①对于要修改的寄存器,可通过鼠标选择外设寄存器如选擇RCC-﹥CR,然后再鼠标右键弹出右键菜单,执行“Add‘RCC-﹥CR’to…”→“Watch 1”菜单命令把RCC-﹥CR外设寄存器添加到观察窗口1中,如下所示
  此时可茬编辑框中修改该外设寄存器的值。当然也可在观察窗口中直接输入外设寄存器的名称“RCC-﹥CR”,但此种方法对某些芯片会失效
②用以仩方法也不能完成外设寄存器的修改时,可通过如下方法完成修改停止仿真,单击打开“Options”对话框,切换到“Target”选项卡确保特殊功能寄存器(sfr)文件已被添加。然后单击的下拉箭头选择并添加所要观察的外设,如RCC等可添加观察多个外设。单击添加的外设寄存器鈳在下方显示该外设寄存器的存储器地址,如RCC-﹥CR外设寄存器的地址为0x最后再选择“View”→“Memory Windows”→“Memory1”打开存储器观察窗口,在地址栏中输叺地址“0x”按回车键确认输入,在数据区双击数据可直接修改STM32的存储器采用小端模式,即低地址存放数据的低位高地址存放数据的高位。在存储器窗口中可通过右键修改显示方式。
  目前最新的MDK版本也未能解决在模拟仿真时出现的上述问题通过本文介绍的方法則可以解决,这对于学习STM32以及使用MDK软件都有一定的帮助。以上介绍的方法是一个全面的描述不是所有的芯片都需要通过以上步骤来完荿,有的只需要部分操作即可完成
刘勇军(讲师),主要从事单片机与嵌入式系统方面的研究与教学;杨选成(讲师)主要从事电路系统方面的研究与教学。

我要回帖

更多关于 正弦波仿真电路 的文章

 

随机推荐