stm32cubeMX生成工程遇到的无法反复烧写以及MDK工程卡在起始位置 一、问题回顾最近我使用stm32cubeMX软件配置各个引脚功能生成MDK和IAR两种格式的同一个项目文件遇到了2个问题我是将单片机引脚都配置完成后生成工程文件后才进行下载测试的这是我的一个失误另外就是我最初的工程没有配置SWD接口。1、使用keil MDK工程能够反复将目标文件xxx.hex文件烧写到单片机中但是程序无法运行一直卡在startup_stm32f107xc.s汇编文件的起始位置如下图所示但是在keil MDK下是能够读到单片机并且能够反复多次下载到单片机中去的。于是我找为什么程序无法跑到main()函数中去呢我想用IAR工程测试一下配置好IAR的下载模式JLinkSWD接口。刚开始编译成功没有错误后第一次可以下载到单片机中运行。但是第二次就提示无法找到单片机了这样单片机变成板砖了既无法烧写程序又无法程序正常运行。而且我尝试了一个新的单片机也是一样的问题都变成板砖了二、问题解决解决单片机变板砖问题。遇到这个问题后我想到这个单片机的SWD下载口的RESET引脚是没有接到J-link的RESET上去的。于是我根据以前我经常使用的SWD接口设置将NRST引脚网络使用了一颗10K上拉电阻到3.3V并使用一根飞线接到了J-link的RESET引脚上。这样焊接好后再次打开keil MDK工程在Debug界面发现能够找到单片机了并且可以多次下载固件程序到单片机中运行了同样的IAR环境下也是下载固件程序到单片机中运行正常了。三、问题解决解决程序无法正常运行问题。无法烧写问题解决之后剩下的需要解决程序卡在startup_stm32f10xc.s的首行代码无法正常运行。首先我发现在keil MDK中是开在startup_stm32f10xc.s的首行代码但是IAR工程中是可以直接进入main()函数于是我赶紧在while(1)死循环中写了灯闪的一小段代码。发现keil MDK还是被卡住了但是IAR项目中是可以正常运行的。于是我在网上搜索“LDR R0, SystemInit卡死”问题原因。看了几篇文章都说是需要选中MicroLibstm32在进行调试时进入 LDR R0, SystemInit卡死-CSDN博客于是我将keil MDK中的MicroLib给选中了。重新编译生成后keil MDK环境下下载运行都正常了并且在IAR环境中测试无论是下载还是调试都正常了。我搜索在stm32cubeMX中有没有选择MicroLIB的选项发现没有。我想到以前学习硬石科技的例程中里面有printf重定向里面提到MicroLIB的使用找到对应工程在MDK和IAR工程文件夹中有对应图片说明。最后我搜素IAR工程中哪里配置微库MicroLIB找到这里。找这里两个问题都已经解决了。四、结尾我将第一步中焊接的上拉10K电阻以及飞线都去掉了在MDK或者IAR环境中测试都是没有问题的了。五、总结导致上述两个问题的原因一是stm32cubeMX中没有配置SWD接口二是在keil MDK环境中没有选中“MicroLIB”。两方面原因导致两个工程烧写后单片机变板砖以及keil MDK环境下卡在startup_stm32f10xc.s的起始行代码。我分析之所以要用微库是因为我使用了第三方插件LWIP、USB_Device将USB接口模拟成一个虚拟串口里面有使用stdio.h、stdlib.h、string.h等头文件的情况。