启动梳理
所谓启动,一般来说就是指我们下好程序(指程序在FLASH主闪存中)后,系统复位后(例如nrst低电平,6.11)(复位分为系统,电源,备份域复位),SYSCLK(8MHz HSI)的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。也就是说以上这些都是电路或者下述之外完成的,BOOT引脚被锁存后电路会根据BOOT引脚的值来进入FLASH,ISP或者SRAM。
一键下载前置了解内容![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/15881a783fa8778b410978f97cfcfcf3.png)
System memory(ISP:In-System Programming)
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。(也就是说Bootloader程序在系统存储器中)一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。
总结:其实ST可以通过串口烧写程序不用ST-link。可以改变启动模式为系统存储器(厂家出厂就固定的)就可以了。烧完后又改变启动模式,从主闪存储器去运行串口烧好的程序就可以了。
为何要在电脑上下载CH340驱动——>驱动实现什么功能?
就像编写UART串口驱动一样,电脑上需要解析USB收到的D+D-差分电平的信息内容,或者讲信息内容转换成D+D-差分电平进行发送。而差分信号内容是由CH340usb转ttl芯片完成的,这就需要安装CH340串口驱动。
.s启动文件
地址重映射
————————————————
程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。也就是被总线连接的部分。我们在编程的时候,也是对这些功能部件进行操作。存储器本身不具有地址信息,它的地址是由芯片厂商(数电rom/ram存储器那一章)或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。
自举(bootstrap)计算机设备使用硬件加载的程序,用于初始化足够的软件来查找并加载功能完整的操作系统。也用来描述加载自举程序的过程。什么是单片机的自举,单片机的自举就是单片机的启动。
而众所周知,单片机在每次上电时都是从 0 地址开始执行,那么这就存在一个问题,我们下载程序时是将代码放在 主Flash ,其地址为 0x0800 0000 ~ 0x0807 FFFF,起始地址并不在 0 地址,那单片机要如何找到代码并执行呢?
在地址划分的区域可以看出,0x0000 0000 ~ 0x0007 FFFF 这块区域的功能是专门进行地址重映射的(应该是cortex-m3总线电路或者是st设计的flash电路具有此功能),而要进行重映射的区域取决于 BOOT 引脚,通过 BOOT1 和 BOOT0 引脚的电平值,可以选择将0x0000 0000 ~ 0x0007 FFFF 映射到不同的存储器上。
这就解释了为什么我们在 keil 中设置好程序的下载地址为 0x8000000,但是单片机上电是确实从 0 开始执行。是因为我们在硬件上设置了 BOOT0=0,BOOT1=X,从而导致了主FLASH 区被映射到了0x0000 0000 ~ 0x0007 FFFF(512KB),故而代码是下载到 0x80000000 往后的存储空间中,却说运行又是从 0x00000000 地址运行的。
————————————————
版权声明:本文为CSDN博主「谢老板不用蟹」的原创文章,遵循CC 4.0 BY-SA版权协议。
原文链接:【STM32】STM32内存映射以及启动过程(超详细过程)_谢老板不用蟹的博客-CSDN博客
下述的博客还未理解完毕
野火stm32f103的mcuisp设置与一键ISP下载原理分析总结_小白菜~的博客-CSDN博客[STM32学习笔记]野火MINI开发板ISP一键下载电路_Yardenia_的博客-CSDN博客BooT模式: Flash、ISP、SRAM_otp区域_学海无涯_come on的博客-CSDN博客