全部学习汇总: GreyZhang/g_stm32f103: some hack for stm32f103 (github.com)
最近用了一段时间的串口,感觉在调试方面非常有帮助。我也反复对比Arduino,其实Arduino的流行我觉得开发以及调试环境简单是其中一个很重要的原因。Arduino本身有一个还比较好用的BootLoader,不管怎么说,至少我在使用的时候没有发现过它的问题。我觉得,加强版的STM32F103其实也可以加一个BootLoader,从此逐渐扔掉调试器。
我在网络上找到了STM32Duino,这个后面我也会尝试用一下。同时也找到了一个串口BootLoader,我觉得串口BootLoader应该是一个比较干脆的方案。
我找到的开源项目链接: ferenc-nemeth/stm32-bootloader: UART bootloader for STM32 microcontroller. (github.com)
这个项目的功能开发直接基于STM32的SDK,因此如果使用ST的开发工具做一个迁移的话非常简单。我使用了STM32 CubeIDE来做了这个迁移。整个移植几乎全都是复制替换,再加上几个管脚信息的修改等。
首先,这里的修改是把最初的时钟源切换成晶振。其实,针对BootLoader来说,这个修改改不改都行,尤其是自己hack的情况下。
这里的修改,主要是为了能够支持调试功能。
这里开启了一个串口的功能,这个也是接下来进行BootLoader传输的通信方式。
其他的暂且不看了,只是几个LED灯或者管脚配置,都比较简单。
我使用了一个STM32F103的板子,直接使用这个板子进行调试还是很简单的。几个文件拷贝,拿来主义即可。
上面的6个文件是来自于前面的链接的。
这个是主函数中的初始化以及循环的一部分,我这里暂时没有全抄,目的是想默认进BootLoader,方便我调试。
这里增加的逻辑是为了能够有几秒钟的时间,选择是否进入BootLoader的刷写模式。
这几个配置是我编译成功后又改的,我发现目前的BootLoader的Flash占用还是很大的,后面可能有一个优化项。
编译成功后的提示信息,可以看出来资源占用不少。保险起见,我先给BootLoader分配了12KB的Flash。
这个是连接上串口调试工具的效果。这里需要说明一下,我试了很多个串口工具,花了大量的时间去调试代码。最后发现不同的串口工具行为不同,从链接中找到的这个是符合设计协议的要求的。
这个是烧写的时候的交互界面。
我用调试器查看了存储信息,现在确认BootLoader已经工作了。但是现在遇到了跳转之后APP进入了Hard Fault的问题。接下来还得去做一个进一步的排查,但是这个基础的传输以及烧写流程算是调试过了。