STM32嵌入式:几种烧录方式

目录

ISP

  1. 这种和下一种烧录方式就是我们常说的BootLoader,通过一段引导代码来将我们要烧录的程序通过串口烧写进入单片机的Flash。但是与IAP烧录方式不同的是,这段引导代码是ST公司在芯片出厂前就固化在内部的,我们是需要按照给出的文档说明操作就行了。

  2. ISP支持的下载接口有:

方式协议说明软件链接备注
USARTAN3155据说官方的软件很不好用,不如用Flymcu
CANAN3154没用过
I2CAN4221不是很常用,反正我是没用过
USBAN3156官方链接这种方式又称为DFU,仅F4极其以上和互联网型的F1支持;其它若想支持,1.有USB接口2.需要自己写引导程序利用下面所说的IAP方式

具体哪些型号的微控制器支持哪种方式,在各个芯片的referfence mannul中提到,同时AN2606也提到了。
3. 每次下载都需要进入自举模式,就是把boot0置1,boot1置0,然后再上电。
4. 随着微处理器性能逐渐提升和成本下降,USB的DFU模式肯定使用越来越广泛,最重要的是,下载速度快。

IAP

  1. 这一种下载方式就是和上一段差不多;不同的地方在于:需要自己写引导代码,虽然这样比较麻烦,但是可以自定义下载方式和协议,并且可以通过代码控制,进行自动处理,不需要手动上电。
  2. 本人就做过的东西简要说几点注意事项:
    1. Flash中可以放置一段IAP程序+多段APP程序,要注意IAP程序起点是在0x08000000处;其它的APP程序要分段放在整个Flash中,并且每段APP程序的起始地址最好是是sector的倍数;
    2. 每次从IAP跳转之前,要关闭所有中断,中断向量表会变化。
    3. 每次跳转到APP,首先需要更改中断向量表地址。
      pass:我自己再IAP或者APP中实现RTOS时。总是出现莫名其妙的错误和程序跑飞。希望知道的大佬能够告知。。。

SW/JTAG

  1. 这一种需要专门的编程器/调试器,如ST-LINK v2,J-LINK,等系列,一般这种设备都具有下载功能和调试功能,并且都支持SW模式和JTAG模式
  2. 这种方式还可以和IDE结合,实现一键下载和调试
  3. 这种方式还能够在不断电的情况下进行操作,不需要更改boot0和boot1的电平。因为这种接口是通过引脚直连ARM内核的,拥有较高的权限。

参考文章
STM32程序的烧录方式

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 3)SRAM = 芯片内置的RAM区,就是内存啦。            在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。 BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。         在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。         在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。        因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。         根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载) ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 ————————————————
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值