欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    STM32 keil MDK仿真测试.docx

    • 资源ID:24640776       资源大小:85.14KB        全文页数:11页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32 keil MDK仿真测试.docx

    1、STM32 keil MDK仿真测试信号函数当Vision3模拟执行目标程序时,信号函数可以在后台实现信号输入、脉冲输入等重复操作。信号函数可用于模拟和测试串行I/O、模拟I/O、端口通讯和其他一些重复发生的外部事件。因为当Vision3模拟目标程序时,信号函数是在后台执行。因此,信号函数必须在某些地方调用twatch函数来进展延迟,以便让Vision3能运行目标程序。假设信号函数从不调用twatch,如此Vision3会报告错误。Vision3提供了一局部能在信号函数中使用的系统变量。详情请参考 系统变量 。系统变量系统变量可在程序中任何位置的变量和其他表达式中使用,用于获取一些特殊功能值。

    2、下表列出了允许使用的系统变量,以与数据类型和使用方法。变量 类型 描述 $ unsigned long 表示当前程序计数器值。可以使用$表达和修改程序计数器。例如,$ = 0x4000可将当前程序计数器值设置为0x4000。 _break_ unsigned int 令目标程序中止运行。如果将 _break_ 设置为一个非零值,Vision将挂起目标程序的执行。在用户和信号函数中使用该变量可挂起目标程序的执行。 _traps_ unsigned int 假设将_traps_ 设置为一个非零值,Vision将现实166个硬件陷阱:未定义的操作码,被保护指令错,非法字操作访问,非法指令访问,堆栈上

    3、溢,堆栈下溢等。 states unsigned long CPU指令状态计数器的当前值;当目标程序开始执行时,该计数器从0开始每执行一条就加1。注意states 是一个只读变量。 itrace unsigned int 表示目标程序执行时是否记录跟踪过程。假设 itrace 为 0,如此不记录跟踪过程;假设itrace 是一个非0值,如此记录跟踪过程。更多相关信息可参考 Trace Recording 。 radix unsigned int 设置显示数据的进制,radix 可为 10 或16,默认值为16 用于HEX输出.信号函数的定义由关键字SIGNAL开始,格式如下:SIGNAL vo

    4、id fname (parameter_list) statementsfname i函数名 parameter_list i传递给函数的参数表,每个参数必须包括一个类型声明和一个名字。如果没有参数,如此用void代替参数表。多个参数之间用逗号间隔。 statements 函数体 函数起始标识。只有函数起始标识和函数完毕标识(“)保持平衡,函数才是完整的。 例如下面的例子表示一个信号函数每隔1,000,000个CPU周期将字符A传送至串行输入缓冲区一次。SIGNAL void StuffS0in (void) while (1) S1IN = A; twatch (1000000); 调用这个

    5、函数时,在控制窗口输入如下命令:StuffS0in()调用时StuffS0in信号函数会将字符A的ASCII值传送至串行输入缓冲区并延迟1,000,000 个CPU周期,不断重复。信号函数受到如下约束:函数的返回值类型必须为void。 函数最多只能有8个参数。 信号函数可以调用其他重定义函数和用户函数。信号函数之间不能相互调用。 信号函数可以被用户函数调用。 信号函数必须调用twatch至少一次。如果信号函数从不调用twatch,如此目标程序将得不到时间执行。而且由于不能使用Ctrl+C中断信号函数,在这种情况下Vision3将进入死循环。 信号函数的管理一个信号函数要么处于空闲态,要么处于运

    6、行态。Vision3通过队列来保存被激活的信号函数。处于空闲态的信号函数将被延迟,直到延迟完指定的CPU周期等待之后调用 twatch来唤醒她。运行态的信号函数如此执行函数的语句。当一个信号函数被调用时,Vision3将此函数参加队列中并将其状态标明为运行。一个信号函数只能被激活一次,如果要被激活的函数已经在队列中,如此会发出警告。通过SIGNAL STATE命令可以查看信号函数的状态,SIGNAL KILL命令可以将信号函数从队列中消除掉。当信号函数调用twatch函数时,经过数个CPU周期处理完twatch函数之后信号函数将进入空闲态,直到用户程序执行指定数目个CPU周期后信号函数才从tw

    7、atch函数之后的语句开始继续执行。当信号函数退出时,返回语句自动将该函数从队列中去除。下面的例子表示一个信号函数在C167上改变模拟输入的值。函数从0伏特开始以0.5伏为单位增加或减少输入电压,并且增加上限被设置。该信号函数不定期的重复,每次电压改变将延迟200,000个CPU周期。signal void analog0 (float limit) float volts;printf (Analog0 (%f) entered.n, limit); while (1) /* forever */ volts = 0; while (volts = 0.0) ain0 = volts; tw

    8、atch (200000); /* 200000 states Time-Break */ volts -= 0.1; /* decrease voltage */ 信号函数analog0能以如下方式被调用:ANALOG0 (5.0) /* Start of ANALOG() */ANALOG0 (5.000000) ENTEREDSIGNAL STATE命令显示analog0函数的当前状态:SIGNAL STATE 1 idle Signal = ANALOG0 (line 8)该命令列举出部函数的编号,信号函数的状态:空闲态还是运行态,函数名和执行语句行号。因为信号函数的处于空闲态,可以推

    9、测出analog0正在执行twatch函数(在analog0的第8行)并等待指定的CPU周期时间。200,000个CPU周期之后,analog0继续执行直到在程序的第8行或14行 twatch 函数再一次被调用。以下命令将analog0函数从激活信号函数队列中去除。SIGNAL KILL ANALOG0建立函数Vision3 中有一个建的函数编辑器,通过Debug Function Editor来打开。打开函数编辑器时需要输入一个文件名或者打开一个由Options for Target Debug Initialization File指定的文件。该编辑器的用法与Vision3编辑器一样,允许

    10、用户输入和编译调试函数。参考函数编辑 对话框帮助可获取更多对话项目信息。当建立一个调试函数文件后,可用INCLUDE 命令可以读取和处理该文本文件的容。例如,如果在命令窗口输入如下命令,Vision3将完成对MYFUNCS.INI文件容的读取和解释功能。MYFUNCS.INI 可能包含调试命令和函数定义,通过Options for Target Debug - Initialization File可以进入该文件。每次打开Vision3调试器时,MYFUNCS.INI文件的容将被执行。INCLUDE 命令用于指定一个命令文件,命令被从此文件中一行一行地被读取并被传递给Vision3 来执行。在

    11、Vision3中可以利用INCLUDE 文件执行重复操作。例如,定义INCLUDE 文件用于载入目标程序,运行程序到主C函数,初始化工具箱按钮与生成几个用户函数。INCLUDE 文件可以嵌套4层,要使用INCLUDE 命令时,必须先停止目标程序的执行。例子不需要的函数可以通过 KILL 来删除。Debug - Function Editor关于创建函数文件的详细信息请参考创建函数。Open 打开浏览对话框,选择一个要编辑的文件。 New. 创建一个新的文件以参加函数。 Save 保存文件的编辑容。 Save As. 在不同的文件中保存当前的编辑容。 pile 编译当前文件,相应的结果在Outp

    12、ut Window的Build页中显示。 pile Errors 显示编译错误。选择一个错误可以在编辑窗口定位相应的出错行KILL 命令可用于删除已定义的工具箱按钮和Vision3函数。KILL BUTTON 命令用于移除前面已定义的一个工具箱按钮。当使用这个命令时,必须要指定要移除工具箱按钮的编号。这个编号在工具箱窗口中每个按钮的前面。KILL FUNC * 命令用于移除前面已定义的所有用户函数和信号函数。Vision3 部定义函数不能被删除。KILL FUNC function_name 命令用于删除指定的用户函数或信号函数。例子KILL FUNC ANALOG /* Delete use

    13、r function analog */KILL FUNC myregs /* Delete user function myregs */KILL FUNC * /* Delete all user functions */KILL BUTTON 3 /* Kill Toolbox Button number 3 */KILL BUTTON 1 /* Kill Toolbox Button number 1 */外围设备变量根据工程所选择的CPU,Vision3会自动地定义一些符号。这些符号分为两类:外围存放器或SFRs和虚拟仿真存放器VTREGs。在Simulation Script Te

    14、mplates下,调试函数Debug Functions可利用这些外围设备变量自动向外设输入信号。外围存放器 (SFRs)Vision3为外围存放器定义了符号。外围存放器符号的定义依赖于选择的微控制器。外围存放器符号都具有相关的地址,可被用于表达式中。虚拟仿真存放器(VTREGs)虚拟仿真存放器的存在,使得模拟CPU的引脚进展输入和输出成为可能。VTREGs不是公有符号,也不能常驻CPU的存。它们可以用于表达式中,但其值与用法是依赖于CPU的。 VTREGs提供了一种输入来自被仿真硬件上的信号到CPU引脚的方法。可以使用DIR VTREG 命令列出这些符号。下表描述了VTREG符号。VTREG

    15、符号的可用性依赖于所选的CPU。VTREG描述ADx片上的一个模拟输入引脚,它的典型代表是 A/D转换器输入。目标程序可以读取写入到ADx VTREGs中的值。DAx片上的一个模拟输出引脚。这个值反响了D/A转换器的输出。xxVREF相关引脚的电压输入。PORTx片上端口的一组I/O引脚。例如,PORTA 代表了PORTA的所有引脚,这些存放器可以仿真端口I/0.SxIN串行接口x的输入缓冲。可以向SxIN写入一个8位或9位的值,它们可以被目标程序读取。 读取SxIN以 取决于什么时候输入缓冲准备好以接收另外的字符。值 0xFFFF意味着前面的值已被处理完,新的值可以写入了。SxOUT串行接口

    16、x的输出缓冲。 Vision3 拷贝8位或9位的值到SxOUT VTREG中。SxTIME定义串行端口x的波特率时序。当SxTIME为1时, Vision3 使用编程的波特率来仿真串口的时序。当SxTIME为0时 (默认值),编程的波特率时序被忽略,串行传输时间是即时的。CLOCK仿真的CPU的真实频率。XTAL仿真的CPU的晶振频率,在Options Target dialog下定义。可以使用VTREGs来仿真外部输入和输出,包括与部外设的接口,如中断和时钟。例如,假设选中PORT3在8051设备上的位2,如此CPU驱动仿真外部中断0。I/O 口Vision3为每个I/O口定义了一个 VTR

    17、EG: 例如PORTA。 不要把每个端口(如PIOA_OSR)的外围存放器与这些VTREGs混淆了。外围存放器可以在CPU存储空间被访问,VTREGs 如此代表了引脚上的信号。使用Vision3可以很容易模拟来自外部硬件上的输入,假设外部有一串脉冲到达端口引脚,如此可以使用信号函数来模拟这些信号。如下面的信号函数以1000Hz的频率在端口PORTA的引脚0处输入一个方波。signal void one_thou_hz (void) while (1) /* repeat forever */ PORTA |= 1; /* set PORTA bit 0 */ swatch (0.0005);

    18、/* delay for .0005 secs */ PORTA &= 1; /* clear PORTA bit 0 */ swatch (0.0005); /* delay for .0005 secs */ /* repeat */下面的命令启动了这个函数:one_thou_hz ()有关用户与信号函数的更多信息请参阅Vision3 调试函数Debug Functions)。仿真一个与输出端口引脚对应的外部硬件稍少一些困难。需要两步,第一步,写一个Vision3的用户或信号函数来执行希望的操作;第二步,创建一个断点以调用该用户函数。假设使用了输出引脚(PORTA的位0)来点亮或熄灭LED

    19、,下面的信号函数使用PORT2 VTREG来检查CPU的输出,并在命令窗口显示信息。signal void check_pA0 (void) if (PORTA & 1) /* Test PORTA bit 0 */ printf (LED is ONn); /* 1? LED is ON */ else /* 0? LED is OFF */ printf (LED is OFFn): 现在,必须为端口1的写操作添加一个断点。下面的命令行将为所有向PORT2的写操作添加一个断点。BS WRITE PORT2, 1, check_p20 ()现在,不论目标程序何时向端口PORT2写入,chec

    20、k_P20 函数都会打印出LED的当前状态。串行端口片上的串行端口由S0TIME、S0IN和S0OUT控制。S0IN和S0OUT 代表了CPU上的串行输入和串行输出流。S0TIME用于指定串行端口的时序是即时的(STIME = 0)还是与指定的波特率有关(SxTIME = 1)。当S0TIME为1时,串行窗口中显示的串行数据以指定的波特率被输出。当S0TIME为0时,,串行窗口中显示的串行数据将被很快地输出。模拟串行输入就像模拟数字输入一样容易。假设有一个外部串行设备周期性(间隔1s)地输入指定的数据,可以建一个信号函数来向CPU的串口中输入数据。signal void serial_inpu

    21、t (void) while (1) /* repeat forever */ twatch (CLOCK); /* Delay for 1 second */ S0IN = A; /* Send first character */ twatch (CLOCK / 900); /* Delay for 1 character time */ /* 900 is good for 9600 baud */ S0IN = B; /* Send next character */ twatch (CLOCK / 900); S0IN = C; /* Send final character */ /* repeat */当信号函数运行时,它延时1s,输入A,B和C到串行输入行且重复下去。串行输出被仿真的方式与使用用户或信号函数与一个如上所述的写访问断点很相似


    注意事项

    本文(STM32 keil MDK仿真测试.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开