Stm32 一个坏的引导加载程序能成为微控制器吗?

Stm32 一个坏的引导加载程序能成为微控制器吗?,stm32,bootloader,cortex-m,Stm32,Bootloader,Cortex M,我的问题是,如果我设法开发某种引导加载程序并对其进行闪存(当你将引导加载程序放在MCU上时,它会被称为闪存吗?) 我问的原因是我的任务是为STM32F407开发一个引导加载程序。问题是,我对引导加载程序或诸如此类的东西一无所知,这意味着我还有很多东西要学。 谢谢你的回答 总的来说,绝对是这样,我有一个积木般的微控制器集合,偶尔我会偷懒,然后又会有另一个 这是非常具体的微控制器和家庭。例如,如果微控制器在电路中(甚至在编程夹具中)依赖于某些管脚,并且这些管脚可以由软件重新调整用途,那么管脚计数非常

我的问题是,如果我设法开发某种引导加载程序并对其进行闪存(当你将引导加载程序放在MCU上时,它会被称为闪存吗?)

我问的原因是我的任务是为STM32F407开发一个引导加载程序。问题是,我对引导加载程序或诸如此类的东西一无所知,这意味着我还有很多东西要学。
谢谢你的回答

总的来说,绝对是这样,我有一个积木般的微控制器集合,偶尔我会偷懒,然后又会有另一个

这是非常具体的微控制器和家庭。例如,如果微控制器在电路中(甚至在编程夹具中)依赖于某些管脚,并且这些管脚可以由软件重新调整用途,那么管脚计数非常重要,可以为您带来尽可能多的成本。例如,jtag引脚也可以是gpio引脚。由于某种原因,您的代码将它们用作gpio引脚,而芯片的设计是这样的,当芯片复位时,它们无法使用jtag接口,那么您就可以被阻塞了

另一个非常简单的是pll或时钟。如果/当您开发初始化时钟系统的代码时(假设您选择这样做,即使您使用芯片供应商提供的代码),并且您有一个错误,该错误会将芯片切换到您未正确初始化或不存在的时钟,则可能会发生故障

现在,一些芯片设计,许多,以各种方式帮助你。AVR系列通常有一种编程模式,当芯片处于复位状态或与复位相关时,闪存中的任何代码都不会影响其功能,当然,您的电路板设计可能不好,但您的代码无法阻止其工作。另一种方法是“捆绑”一个(或多个)专用于引导功能的管脚,设置一个正常引导方式,将其捆绑到另一个引导加载程序中。这是您在stm32 boot0和有时boot1上的配置,具体取决于。这是该芯片家族的免出狱卡,如果你将芯片(pll/时钟或将SWD引脚用作gpio弄乱),你“只需”更改boot0,它就会引导到一个已知工作的内部引导加载程序中(看来你不能弄乱)。从该引导加载程序中,您可以使用SWD(现在没有封装芯片)或引导加载程序本身(始终是串行的,有时支持usb或其他)。NXP也有类似的交易。Atmel ARMs过去有(确实有)SAM-BA,现在他们真的只支持SWD,你可以得到一些samba代码并尝试将其锁定到flash中,但解锁和/或丢弃该flash太容易了,所以这是他们的失败

作为系统设计的一部分,如果您没有这些内置功能(如STM32上的boot0),那么我建议您添加一个。非常早期的代码初始化一个专用的gpio引脚作为软件的一条带子,如果该gpio引脚以一种方式拉入,则执行正常引导,如果以另一种方式拉入,则在无限循环中旋转或跳转到另一种保证不会出现错误的代码。这并不能完全保证您不会构建错误的项目并丢弃此代码,但它至少允许您开发引导加载程序/项目,而不是在您使用可以构建它的外围设备时构建一个装满部件/板的托盘

注意:让烟从零件中冒出来也是砖块的另一种方式,这也可能/确实不时发生


关于如何引导STM32的大量示例,以及可以用作起点的来自ST的各种代码。(所有这些都有不同的质量,你付多少钱就能得到多少)。他们的文档很好,比竞争对手的一些文档要好,引导和配置外围设备一点也不困难,有时比使用罐装库更容易。YMMV,您应该尝试各种解决方案。但是如果你是新来的,很可能是砖块,幸运的是你有一个芯片,你不能砖块,只要你的电路板设计打破了boot0引脚。对于STM32的原型板,我更喜欢有一个boot0按钮和一个reset按钮,只要reset重置芯片并运行,按住boot0并按下reset,它就会进入引导加载程序。两者都必须正确连接,并根据任务需要使用正确的上拉或下拉。或者一件套衫可以将靴子直接系在高或低的位置,然后弹出复位,这会花费你更多的时间,但效果会更好

总的来说,绝对是这样,我有一个积木般的微控制器集合,偶尔我会偷懒,然后又会有另一个

这是非常具体的微控制器和家庭。例如,如果微控制器在电路中(甚至在编程夹具中)依赖于某些管脚,并且这些管脚可以由软件重新调整用途,那么管脚计数非常重要,可以为您带来尽可能多的成本。例如,jtag引脚也可以是gpio引脚。由于某种原因,您的代码将它们用作gpio引脚,而芯片的设计是这样的,当芯片复位时,它们无法使用jtag接口,那么您就可以被阻塞了

另一个非常简单的是pll或时钟。如果/当您开发初始化时钟系统的代码时(假设您选择这样做,即使您使用芯片供应商提供的代码),并且您有一个错误,该错误会将芯片切换到您未正确初始化或不存在的时钟,则可能会发生故障

现在,一些芯片设计,许多,以各种方式帮助你。AVR系列通常有一种编程模式,当芯片处于复位状态或与复位相关时,闪存中的任何代码都不会影响其功能,当然,您的电路板设计可能不好,但您的代码无法阻止其工作。另一种方法是“捆绑”一个(或多个)专用于引导功能的管脚,设置一个正常引导方式,将其捆绑到另一个引导加载程序中。这是您在stm32 boot0和有时boot1上拥有的功能,具体取决于