keil调试串口的软件仿真方法
由于我是直接使用(打开现有的软件工程),如果跟着需要下载上面演示参考的软件工程才行。工程默认是使用硬件在线调试,接下来按照每一点来讲述。
如果keil软件仿真时,程序不能正常运行解决方法
在用keil软件调试程序时,有时候手头没有硬件电路板,就需要用到软件仿真功能。但是使用软件仿真时经常出现一个问题,就是开始仿真后,程序就会卡在系统初始化函数中。
程序停在时钟设置这里就不动了,不能进入主函数。
引起这个的原因是debug选项没设置好,先看看debug默认设置
在debug选项中除了要设置使用软件仿真外,还要设置底下的 Dialog DLL 选项。
将Dialog 设置为DARMSTM.DLL,将Parameter 设置为 -pSTM32F103C8 。后面这个为使用的单片机型号,根据单片机型号填写。这个工程使用的是STM32F103C8T6单片机,所以这块设置为 -pSTM32F103C8。
-pSTM32F103RE
这个设置好之后,在重新仿真,程序就能正常运行了。
1.编译+调试
打开软件工程 -> 编译 -> 调试
这里的编译建议使用Build Target(第2个按钮)编译工程(如下图动画),也就是使用快捷键F7。Translate(第1个按钮)是编译当前活动文件。Rebuild all Target files(第3个按钮)是重新编译所有目标文件。
在线调试分类:软件在线调试和硬件在线调试;由于现在硬件成本比较便宜,一般我们都使用硬件在线调试,也就是软件直接下载到芯片,我们查看运行状态。
2.复位+全速运行
复位 -> 全速运行
复位,使程序复位到初始;
全速运行F5,我们可以在很多地方打断点,让程序运行到断点位置,此时程序就停止下来了。
3.单步调试
【单步调试】也就是每点一次按钮,程序运行一步。遇到函数会进入函数。
点击图标按钮,或者按快捷键F11。
(这里取消上面的断点)
4.逐步调试
【逐步调试】即逐行调试,也就是每点一次按钮,程序运行一行。遇到函数不会进入函数。
点击图标按钮,或者按快捷键F10。
5.跳出调试
【跳出调试】即挑出函数调试,也就是每点一次按钮,程序跳出一个函数,直到跳出最外面的函数(main函数)。
点击图标按钮,或者按快捷键Ctrl + F11。
6.运行到光标处
【运行到光标处】即将光标放在某一处,点击该按钮(或Ctrl + F11),程序执行到光标的位置就会停止下来(前提是程序能执行到光标的位置)。
7.跳转到暂停行
这个功能在程序停止运行时有效,主要的作用就是我们打开了很多文件,不知道将程序翻到哪里去了,点击改按钮即可知道我们的程序暂停在那个位置。
8.调试窗口
【调试窗口】是在调试的时候可以查看的窗口,这里有别于平时编辑状态下的窗口。平时编辑时View菜单下面的选项很小,但是进入调试模式,这里就多了很多选项,这些选项就是调试时查看的窗口(见下图)。
下面着重讲述一下常用的一个调试窗口吧
A.内存窗口,也就是我们查看变量的窗口
B.系统外设窗口,也就是外设寄存器数值查看的窗口
下面讲解一下最常用的串口调试
随便一个虚拟串口软件就行 这里采用比较常用的VSPD
从网上找的链接
http://www.pc0359.cn/downinfo/43905.html
1.
利用VSPD将PC上的两个虚拟串口连接起来。如图我将COM4 和COM5连接起来。点击Addr
pair。
2.
2.可以看到Virtual ports上将两个虚拟串口连接到了一起了。
3.虚拟串口准备就绪了。先将直接输入命令的方式来调试。我们打开KEIL MDK的,设置成仿真的模式。点DEBUG.在COMMAND串口输入:MODE COM1 115200,0, 8, 1
说明:
MODE命令的作用是设置被绑定计算机串口的参数。基本使用方式为:
MODE COMx baudrate, parity, databits, stopbits
其中:
COMx(x = 1,2,…)代表计算机的串口号;
baudrate代表串口的波特率;parity代表校验方式;
databits代表数据位长度;
stopbits代表停止位长度。
例如:MODE COM1 115200, 0, 8, 1
设置串口1。波特率为115200,无校验位,8位数据,1位停止位。
MODE COM2 19200, 1, 8, 1
设置串口2。波特率为19200,奇校验,8位数据,1位停止位。
4、点回车后,再输入 ASSIGN COM4 <S1IN> S1OUT
说明:
COMx代表计算机的串口,可以是COM1、COM2、COM3或其他;
inreg和outreg代表单片机的串口。对于只有一个串口的普通单片机,即SIN和SOUT;对于有两个或者多个串口的单片机,即SnIN和SnOUT(n=1,2,…即单片机的串口号)。
例如:ASSIGN COM1 < SIN > SOUT
将计算机的串口1绑定到单片机的串口(针对只有一个串口的单片机)。
ASSIGN COM2 < SIN > SOUT
将计算机的串口2绑定到单片机的串口0(针对有多个串口的单片机,注意串口号的位置)。
需要注意的是,参数的括号是不能省略的,而outreg则是没有括号的。
5、然后调试程序。可以看到串口COM5打印出了串口1的数据了。
这样就能够将计算机的串口模拟成单片机的串口了。在进行软件仿真时,所有发送到被绑定的计算机串口上的数据都会转发到Keil模拟的单片机串口上,用户程序可以通过中断处理程序或查询方式接收到这些数据;同样,单片机程序中发送到单片机串口上的数据也会通过被绑定的计算机串口发送出来,可以被其他软件所接收。利用这个特点,就可以方便地仿真、调试单片机的串口部分程序。要注意的是,这两个命令需要一起使用。
1.Keil 里面先对串口编程,以下假设你已经设定串口的参数为 9600,n,8,1
2.下载一个虚拟串口软件 vspd,安装后config一下,增加一对串口,比如下图的 COM2<-->COM3
3. Keil 里面给两条指令 (调试状态下)
MODE COM2 115200,0,8,1
ASSIGN COM2 < S1IN > S1OUT
要注意 要手打
下面会提示输入命令的详细格式
(如果嫌麻烦,可以先保存为一个 ini文件,并在调试选项里面选中)
4. 然后打开一个串口调试助手,选用另外一个对接的虚拟串口
就可以看到单片机串口输出的内容了