5.Bootloader具体流程 先看看我的主函数,再啰嗦一下具体流程,可能有的同学已经有点厌烦啦,其实感觉有点多余。
5.1 主函数流程先看截图。
从SD卡更新固件">
主函数的流程如下所示:
l 时钟初始化
l LED初始化(无关紧要)
l 调试接口初始化(无关紧要)
l Flash初始化(解锁Flash)
l FAT初始化(挂载文件系统)
l 我们的BootLoader(重点,下面展开继续介绍)
l 主循环(实际不会运行到这里)
然后在具体讲解BootLoader_FromSDCard函数,这就是我们的重点,传说中STM32的BootLoader从SD卡更新固件。
5.2 BootLoader流程老样子,先上截图:
从SD卡更新固件">
具体流程如下所示:
l 打开bin文件,检查文件打开是否正确
l 设置Flash下载起始地址(App程序起始地址)
l 读取bin文件,检查读取是否正确
l 获取栈指针SP和复位向量PC
l 进入循环(这里是第5步),条件为如果读取bin文件字节数不为零
l 将读取到的bin写入Flash,并判写入状态
l 调整Flash地址,根据写入字节调整
l 继续读取bin文件,检查读取是否正确,回到5继续循环
来到这里已经是退出循环了,也就是说我们已经将bin写入Flash完成了,准备跳转到新程序运行