stm32 在线升级程序 bost IAP程序 + app程序

stm32 在线升级程序 bost IAP程序 + app程序

stm32程序在线升级

机器内 bootloader程序 启动默认程序 默认程序有 串口判断 是否收到 升级命令 收到升级命令后 接受串口发送过来的 更新程序 接受完成后 跳转到新程序位置开始执行

如何实现stm32运行sd卡里的程序?

https://www.zhihu.com/people/lian-zhu-50

首先arm单片机控制程序运行是通过PC指针完成的,PC指到哪里,程序就运行到哪里,当然,这里的“哪里”要求是在内存映射(详见STM32数据手册,内存映射部分)中的,不幸的是,SD的存储区域不在内存映射中。

所以你想从SD中读取程序,并运行,只能先把SD卡中的数据读到内存映射中包含的存储器中,比如ram,flash,fsmc控制的外部存储器等,然后再把PC指针指到程序对应的内存地址中。

具体选择哪种存储器,需要根据你的实际需求决定。可能你也需要使用一个文件系统来整理你的程序文件,这样即使你改变了SD卡中的文件,
你也能让你的单片机程序正确的找到SD卡中的程序文件,而没有文件系统的话,你的程序文件的绝对地址可能会发生改变,这样你的单片机程序就读不到程序文件了。

到此,你可能还不满足,如果你在SD卡中添加一个新的程序文件,可能你的单片机程序并不知道要不要运行这个文件(想想,要在windows中运行一个文件,你要双击它),
所以你需要告诉你的单片机,要运行哪个文件,这需要你有一个输入设备,最简单的就是串口,把你要运行的文件的文件名通过串口发送给单片机,

然后单片机从SD卡中找这个文件,如果找到了,就把它读到内部存储器中,然后运行它,当然,如果找不到,那就是你的问题了。

就是每次更改程序,不用jlink烧写进去,而是使用SD卡存放。

首先呢,SD里面的程序不能直接运行;所以需要STM32里面有一个加载程序,一般称之为loader;

loader检测到SD里面有程序或者程序更新了,就需要把SD里面的程序复制到STM32内部的,RAM或者flash里面;

RAM的话,每次上电都需要复制,flash的话,只有更新了STM32里面的程序才需要复制;复制完成后,从loader跳转到你的主程序(即你SD里面复制过来的程序);

这里面,还有很多细节问题需要注意,主要是链接地址和分配,跳转前后的准备和检查

简单方式:写个bootload上电读取sd卡放到ram或flash中,跳转执行。

复杂方式:自己做个任务调度系统,访问sd卡中任务文件,进行任务执行。

复杂方式包括单片机系统,编译器。用这个学习,我觉得是个好想法。

实际做项目有点不实用,因为单片机项目主要是每个项目的硬件不同,而不是只要修改软件应用就行的。

你可能感兴趣的:(物联网,嵌入式开发,单片机,嵌入式硬件)