前言:有时候会用到不复位调试功能,在这里记录一下,省得每次都要谷歌翻资料。使用的程序功能是USB虚拟串口上传数据。
正文:
1、USB功能依赖较为复杂,这里直接使用CubeMX生成初始化代码。使用48M内部RC时钟。
配置外设。
使用CubeMX生成的USB库,并选择虚拟串口。
还有些配置烧录口文件路径等操作都大同小异,这里就不写了。
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破坏现场
4、进入Debug,我们可以看到代码行不允许打断点也不知道运行到哪行。
使用下面指令加载编译生成的.axf 文件到 MDK 中,该文件包含 bin 代码和调试相关的各种符号信息,以定位 C 源码,输入完滚动下鼠标刷新页面。
LOAD %L INCREMENTAL
现在和正常的Debug一样了点击Run然后Stop,可以看到程序停在了While(1)中且虚拟串口无输出,和预期现象一致,通过这个方法可以实现MCU不复位调试。
5、如果需要重新烧录要恢复Keil和烧录器的配置。
结束语:喵
END