keil中 debug调试问题

文章介绍了在使用MDK5进行调试时遇到的两个主要问题:逻辑分析窗口的信号识别错误和仿真无法连续运行至主函数。通过调整Debug选项中的设置,如使用DCM.DLL和-pCM3参数,以及检查芯片类型,可以解决部分问题。对于不支持的芯片型号,需要采用硬件仿真或虚拟串口软件仿真。在没有开发板的情况下,使用虚拟串口软件如串口调试助手,通过MODE命令和ASSIGN命令设置串口参数和绑定,实现虚拟串口通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚学debug时,出现了许多错误。选择将这些问题总结一下

1.调试方法

 2.仿真中必须进行的操作,也是各种问题的原因

(1)在MDK5中的逻辑分析窗口输入GPIO口时,出现Unknown signal的问题

(2)仿真无法连续运行,并且也运行不到主函数

选中Debug选项,Dialog DLL及其Parameter选项设置不正确,这里设置为DCM.DLL-pCM3

 到Device选项查看芯片类型,复制过去就行

如果要用硬件仿真的话,改成下面这栏配置

 

到这一步点击ok,重新仿真就可以了。 

随后再次点击仿真按钮,输入PORTX.i,成功识别到信号。

【一定要注意MDK5目前的版本,不支持F4、F7芯片。同样也不支持纯软件的串口空闲帧中断测试】

试了一晚上结果告诉我不可以,心态直接爆炸

3.没有开发板时,用虚拟串口进行虚拟串口软件仿真

用到了虚拟串口软件,网上很容易找到。

 第一步,打开串口调试助手

 第二步,开始debug,开始软件仿真。

在命令窗口的输入行中分别输入下面两条命令,按回车键完成输入

将虚拟串口com7与虚拟开发板进行绑定。

MODE COM7 115200,0,8,1
ASSIGN COM7 <S1IN> S1OUT

 然后输入内容,发送到虚拟开发版,串口窗口就能打印接受到的内容。

指令说明:
1、MODE COM2 9600,0,8,1
设置串口1。波特率为9 600,无校验位,8位数据,1位停止位。
MODE命令的作用是设置被绑定计算机串口的参数。
基本使用方式为:MODE COMx baudrate, parity, databits, stopbits
其中:
COMx(x = 1,2,…)代表计算机的串口号;
baudrate代表串口的波特率;parity代表校验方式;
databits代表数据位长度;
stopbits代表停止位长度。

2、ASSIGN COM2 < S1IN > S1OUT
命令2是将计算机的串口2绑定到单片机的串口1
COMx代表计算机的串口,可以是COM1、COM2、COM3或其他;
inreg和outreg代表单片机的串口。对于只有一个串口的普通单片机,即SIN和SOUT;对于有两个或者多个串口的单片机,即SnIN和SnOUT(n=0,1,…即单片机的串口号)。
例如:ASSIGN COM2 < SIN > SOUT
将计算机的串口2绑定到单片机的串口(针对只有一个串口的单片机)。
ASSIGN COM2 < S1IN > S1OUT
将计算机的串口2绑定到单片机的串口1(针对有多个串口的单片机,注意串口号的位置)。
需要注意的是,参数的括号是不能省略的,而outreg则是没有括号的。

 

### Keil DEBUG 错误解决方案 #### ST-LINK USB 通信错误 当遇到ST-LINK USB通信错误时,这通常意味着调试工具与目标板之间的连接存在问题。可能的原因包括驱动未正确安装、物理连接不良或是软件配置不当。 为了修复此问题,建议按照以下指南操作: - **检查驱动程序**:确认已安装最新的ST-LINK驱动程序版本[^1]。 - **验证硬件连接**:确保SWD或JTAG接口上的所有针脚都牢固地插入到开发板上,并且电缆无损坏迹象。 - **更新固件**:如果适用的话,尝试升级ST-LINK/V2设备本身的固件至最新版。 ```c // 示例代码用于展示如何通过编程方式检测并处理潜在的连接异常 if (HAL_STLINK_Error() != HAL_OK) { // 处理错误逻辑... } ``` #### 浏览信息(Browse Information) 关于“Browse Information”的选项,在Keil中主要用于支持IDE内的导航特性,比如跳转到函数定义等功能。虽然取消勾选不影响最终二进制文件生成及其执行效率,但这确实会影响到开发者体验,特别是在大型项目里寻找特定符号位置变得困难起来[^2]。 因此,推荐保持启用状态以便于日常编码工作流中的便捷性和生产力提升;当然也可以根据个人需求灵活调整这一设置项。 #### 调试模式下正常而实际运行失败的情况 对于STM32系列微控制器而言,有时会在仿真环境下表现良好但在脱离主机独立运作时不按预期行事。这种情况往往涉及到启动加载过程以及某些初始化参数的选择。 具体来说,“Use MicroLIB”复选框决定了是否采用优化过的C库实现来替代标准GNU C Library的部分组件。如果不打勾,则可能导致部分依赖这些特性的应用程序在裸机环境中出现问题[^3]。 另外还需注意的是,BOOT0引脚的状态也会影响系统的引导行为——它控制着是从内部闪存还是外部存储介质开始执行第一条指令。所以务必依据设计意图合理设定该管脚电平值以确保正确的启动路径被激活。 #### 串行接口缺失警告 初次接触嵌入式开发的新手可能会忽略掉一些必要的前期准备工作,例如忘记指定具体的UART通道作为监视窗口的数据源。这种疏忽会导致试图发起远程会话时遭遇拒绝访问提示:“所选的串行接口没有安装”。 要克服这个问题很简单,只需前往Project->Options->Debug页面内挑选合适的COM端口号即可解决问题[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值