秋名山最速传说
除了该搞的啥都搞 邮箱:li_yi_liang@qq.com
文号944574
610
0
收藏

Keil5不复位调试+USB虚拟串口随笔

前言:有时候会用到不复位调试功能,在这里记录一下,省得每次都要谷歌翻资料。使用的程序功能是USB虚拟串口上传数据。


正文:

1、USB功能依赖较为复杂,这里直接使用CubeMX生成初始化代码。使用48M内部RC时钟。

image.png

配置外设。

image.png

使用CubeMX生成的USB库,并选择虚拟串口。

image.png

还有些配置烧录口文件路径等操作都大同小异,这里就不写了。


2、生成代码&编写关键业务代码&编译烧录

......
#include "usbd_cdc_if.h"
......
uint8_t text[100];
int i=0;
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		sprintf((char *)text,"%d\r\n",i++);
		CDC_Transmit_FS(text,sizeof(text));
		HAL_Delay(1);
		if(i==10000) 
                  while(1);//计数到10000就锁死
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


3、更改烧录器配置,防止Debug破坏现场

image.png

image.png

image.png


4、进入Debug,我们可以看到代码行不允许打断点也不知道运行到哪行。

image.png

使用下面指令加载编译生成的.axf 文件到 MDK 中,该文件包含 bin 代码和调试相关的各种符号信息,以定位 C 源码,输入完滚动下鼠标刷新页面。

LOAD %L INCREMENTAL

image.png

现在和正常的Debug一样了点击Run然后Stop,可以看到程序停在了While(1)中且虚拟串口无输出,和预期现象一致,通过这个方法可以实现MCU不复位调试。

image.png


5、如果需要重新烧录要恢复Keil和烧录器的配置。


结束语:喵


END



[修改于 14 天前 - 2025/06/03 11:56:39]

0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
空空如也
主体信息
主体类型:个人
所属领域:无
认证方式:身份证号
IP归属地:广东
 内容统计
2025年06月
1 篇
2025年05月
1 篇
2025年04月
1 篇
2025年01月
1 篇
2024年
20 篇
ID: {{user.uid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
回复
设为精选取消精选
评学术分
鼓励
编辑
查看历史
通过审核
移动文章
加入收藏取消收藏
退修或删除
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
回复
加入收藏取消收藏