Kau*_*tre 1 microcontroller stm32 bootloader
我是这个引导加载程序的新手。我使用 SWD 对 stm3205 进行编程。所以当我对 stm32f05 微控制器进行编程时,我的程序在哪个位置。我可以制作自己的引导加载程序并将其替换为 st 的默认引导加载程序吗?
我不同意困难这个词。引导加载程序是一个相当简单的程序编写,比大多数微控制器应用程序简单得多。
该逻辑使用 boot0 和另一个带子来确定是引导内部 st 引导加载程序还是引导应用程序。这也记录在参考手册中。我搜索了 boot0 并在第二章中直接找到了它。如果您的芯片没有 boot1 引脚,请不要感到惊讶。从引导模式表中,基本上 boot0 决定从 rom/flash 中的 st 引导加载程序或闪存中的应用程序启动。
我不会为你重新阅读整个文档。但是内存映射显示 0x08000000 处的闪存,这是您的程序将启动的地方。作为 cortex-m(请参阅 arm 架构参考资料,其中可能有版本或绝对是 arm 用品,还有技术参考手册)。cortex-m 使用地址向量表,因此如果/当您正确构建程序时,它将以堆栈指针的预加载开始,然后是重置向量的地址(lsbit 设置为指示拇指模式,但如果您执行所有操作工具链将处理这一点),理想情况下将位于 0x08000000+offset 区域。随着 boot0 接地(零),它从主闪存启动,基本上 0x08000000 被映射到核心处理器的地址零。但是你的向量表基本上让它跳转到主闪存执行。
关于引导模式的同一部分显示了 boot0 为 1(高电平)的系统内存,并且 st 引导加载程序在系统内存中以及用于串行加载的 usart 引脚。其他一些 st 文档描述了串行加载器,它是一个相当简单的程序,可以在主机上编写以与此加载器接口以擦除和/或下载程序到主闪存中。毫无疑问,有无数已经编写好的程序。但是根据您设计引导加载程序的方式,您可能需要一个主机程序来实现协议的那一侧。无论哪种方式,它都是一个下午的项目来连接 st 引导加载程序,并且是一种很好的技能,可以放在你的后兜里来完成这种类型的工作。
您当然必须弄清楚如何启用 uart 和 gpio 等外围设备。从闪烁 LED 开始,然后使用它学习如何使用计时器来确定当您的程序处于控制状态时真正使用了哪些时钟,这样您就可以正确设置 uart 并使其运行,这是一个好主意。最好首先允许将程序下载到 ram,然后分支到它们并覆盖引导加载程序任务的那一半,然后处理将某些内容写入闪存任务。最好至少使用 uart 作为您的第一个引导加载程序用户界面。股票哑终端程序可以说 xmodem 并且可以/应该也可以转储原始文件。所以用我的引导加载程序,我曾经做过 xmodem,它是一个快速而肮脏的状态机,有几十行代码。但我现在要么使用英特尔十六进制或更好的摩托罗拉记录,我喜欢每行完整的 32 位地址的记录,这是迄今为止最简单的。与 xmodem 一样,只需要几十行代码来处理传入的文本流(intel hex 或 srecord,如果您选择其中之一)解析它并在正确的地址写入进入 ram 的内容。然后,您可以让哑终端为您传输文件,而您不必编写任何主机代码。
接下来学习对闪存进行编程,理想情况下不要擦除您正在运行的空间。擦除其他块之一,用一些东西写它,然后读回来看看你写了它。我曾经做过 printfs 并处理一个图书馆来完成这项工作,坏主意。我有一个非常小的 10 行,也许 15 行可以将十六进制数字打印出 uart,十多年来足以调试和“查看”这些类型的东西。请注意,我做裸机和引导加载程序,以及工作和家庭娱乐所需的任何东西。从这个设备上的程序处理闪存并不困难,闪存章节涵盖了高级流程,再次不难。如果您搞砸了,您总是可以使用 boot0 引脚和 st 引导加载程序(当然,除非您让芯片冒烟)。
现在你必须决定你想让你的引导加载程序做什么,它是否总是在那里,等等。你想像 st 人一样使用带销吗?在与此不同的芯片上,您肯定要使用自己的表带,然后再像学习如何对时钟/pll 编程那样弄乱会使芯片变砖的东西。我已经把许多电路板变砖了,因为太自信了,忘记了我没有像引导加载程序那样的后备,并且游戏芯片变砖了,买一个新的。无论如何,常见的事情是等待几秒钟的按键,否则启动应用程序。或者,如果设置为一种方式启动应用程序,则使用表带,将另一种方式设置为进入引导加载程序并等待命令。后者启动应用程序的速度要快得多,前者不需要移动任何跳线或按住按钮等。
接下来您要将引导加载程序保存在何处?您必须将向量表放在正确的位置以便处理器启动,但这并不意味着您的引导加载程序必须立即启动。该器件系列具有高达 256 KB 的闪存。例如,您可以让引导加载程序靠近 0x08000000 附近的下端,如果您的设计要包含应用程序并将引导加载程序保留在芯片上,那么您需要将应用程序设计为位于闪存深处的不同地址。可能是基于闪存的引导加载程序的最佳解决方案。如果您在树莓派上说,从我们的角度来看,我们的程序已为我们加载到 ram 中。你可能想要一个分支到内存深处的引导加载程序,为被测应用程序留下较低的地址空间,因此,当您确定被测应用程序已准备就绪时,您无需在将链接描述文件提交到 SD 卡时更改链接描述文件。但是这个芯片不是那样的,如果您选择同时在闪存上安装引导加载程序和应用程序,您希望引导加载程序优先,应用程序更深入闪存。
像这样的部分带有一个易于连接的捆绑式引导加载程序,即使您可以将其擦除,作为初学者,您也不想,您希望该引导加载程序作为您在搞砸时的后备。我不认为你可以擦除它,至少 ST 声明它是为他们保留的,无论这意味着什么:
系统内存:用于在系统内存启动模式下启动设备。该区域保留供 STMicroelectronics 使用,包含引导加载程序,用于通过选定的通信接口重新编程闪存。它在器件制造时由 ST 编程,并防止虚假写/擦除操作。更多详细信息,请参考 AN2606。
如果您不想了解事情是如何工作的,您绝对可以使用 ST 库之一。我建议两者都尝试,我发现使用库并不容易,但有些人发现库更容易,这由您决定。归根结底,您必须拥有自己的程序并对其进行维护,因此您要么拥有自己的代码,要么拥有自己的代码与所有代码的组合,这是您的责任。一旦您对每个组件获得几分钟/小时的体验,这些芯片就很容易编程(同样,有时库需要很长时间,有时不需要很长时间)。基本上尝试两种路径,或者使用 st 可能有多个库路径。当然,这个 cmsis 的东西是试图让生活更轻松(通过让生活整体变得更难或更慢或其他什么)。即使你选择了一条路,每隔一段时间,尝试另一个,看看体验是否发生了变化。供应商基本上必须不断更改库,每隔一段时间就会彻底完成,所以不要指望长期支持您学到的一组 api,这不是 windows 也不是 linux 也不是 mac。他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?供应商基本上必须不断更改库,每隔一段时间就会彻底完成,所以不要指望长期支持您学到的一组 api,这不是 windows 也不是 linux 也不是 mac。他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?供应商基本上必须不断更改库,每隔一段时间就会彻底完成,所以不要指望长期支持您学到的一组 api,这不是 windows 也不是 linux 也不是 mac。他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?所以不要指望对你学到的一组 api 提供长期支持,这不是 windows 也不是 linux 也不是 mac。他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?所以不要指望对你学到的一组 api 提供长期支持,这不是 windows 也不是 linux 也不是 mac。他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?他们这样做的原因有很多,因此您应该尝试新方法,并直接与外围设备交谈。请记住,当代码失败或生产必须停止或召回发生时,老板不会关心谁编写了您负责的代码。您拥有该代码并对其负责,即使您没有编写它,因此请检查您借用的任何代码并决定您希望对其中的多少负责。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?所以检查你借用的任何代码,并决定你要负责多少。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?所以检查你借用的任何代码,并决定你要负责多少。它可能会为您节省一天、一周或一个月的开发时间,但一年后会让您失去工作,是否值得不深入研究它?
| 归档时间: |
|
| 查看次数: |
5475 次 |
| 最近记录: |