|
发表于 2024-8-21 12:09:38
|
显示全部楼层
你是不是在自己的程序中把jlink/sw的相关引脚用作GPIO或者其它AF功能了?
下载程序的时候keil MDK通过jlink/SW通信才能识别MCU,如果你的程序一直在运行无法复位,jlink/SW引脚被挪用了,下载时不能与MCU通信上,所以不能识别MCU,无法下载。
解决的办法是把MCU内程序清空,也就是擦除flash; 因为jlink/sw无法连上,所以没法用jlink/SW擦除;
要用UART1(PA9,PA10)串口方式擦除,PA9,PA10飞线到USB转串口连接电脑,Boot0引脚拉高,给开发板上电,使开发板进入boot区运行(不运行你的程序);
用stm32cubeProg或者STlinkUtility软件串口连接上开发板,然后选整片擦除;空白的芯片上电后jlink/SW就能连上MCU了。
你的代码L56~61就起一个延时的作用,在运行你的程序之前的这段延时,可以让jlink/SW与MCU通信上,所以能识别MCU,你把这个延时取消,一上电直接就运行你的程序,jlink/SW没时间连接上MCU的。
为了防止这种MCU自己把自己憋死的问题,我通常在调试期间都会在main()的第一句给个2秒左右的延时(而且不能被编译器优化掉):
int main(void)
{
/* USER CODE BEGIN 1 */
for (int i = 0; i < 20000000;i++);
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* Enable the CPU Cache */
/* Enable I-Cache---------------------------------------------------------*/
SCB_EnableICache();
/* Enable D-Cache---------------------------------------------------------*/
SCB_EnableDCache();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
|
|