前言
在 STM32G0B1 的 FLASH_ACR 寄存器中有个 DBG_SWEN 位,当这个位的值为 0时,设备就禁用调试能力,无法通过调试器连接到设备,反之则启用调试能力。
问题描述
客户使用的是 STM32G0B1 的 I2C bootloader,bootloader 版本是 0x92,在执行完"Go"命令后使用 STM32CubeProgrammer 在"hot plug"模式下连接设备,但是连接失败,提示无法找到设备。
问题复现与分析
使用 NUCLEO-G0B1RE 板进行测试,bootloader 版本与客户的一致都是 0x92,通过配置选项字节将设备配置为从 system memoery 自举(也就是复位后进入片内bootloader 中执行)。
验证
在下载到设备的应用程序中添加打印 FLASH_ACR 寄存器的 DBG_SWEN 位的操作,用来查看执行完 I2C bootloader 的"Go"命令后的 DBG_SWEN 的状态。
小结
在 STM32G0B1x 的 0x92 版本的 bootloader 中,通过 I2C 接口执行完"Go"命令跳转到应用程序时,会将设备的 DBG_SWEN 位配置为 0,也就是禁用设备的调试能力。如果我们想要恢复调试能力的话,可以在应用程序中添加设置 DBG_SWEN 位为 1 的操作。但是其它型号或者其它版本的 bootloader 执行"Go"命令后,不一定会有这种设置,我们应该具体应用具体分析,详细可以参考 AN2606,AN2606 是 STM32 bootloader 的说明文档。