前面说到了单片机的ROM、RAM两块存储的位置和大小,以及简单的变量或函数的存储地址,这时候你应该对单片机的内存有了了解。
当你用仿真器下载程序的时候,前面提到的BIN文件的数据(也就是原始的ROM二进制数据,0101那种),会通过下载器0x0800 0000这块内存。之后根据你的下载选项可选自动运行,或者复位再运行。当然也有的同学和我这种穷*一样不舍得买几十块钱甚至更贵的下载器,那么就是使用串口进行下载(也就是ISP),这点和51一样,只不过不需要所谓的冷启动了。对应的引脚是PA9(TXD)、PA10(RXD)。
你知道其中发生了什么吗?先以下载器为例,此时你的单片机和下载器最少只有3根线,首先是GND,也就是负极,你得共地才能确定0电平。然后是CLK(或者TCK)和DAT(或者叫TMS、DIO),也就是PA14和PA13这俩引脚,和IIC类似,数据和时钟,可读可写,那么你的单片机程序就是通过这个串行总线更新的。因此UP设计电路图一般会预留串口和仿真接口用于调试,像这样。
那么你如果用的串口更新呢?首先你要保证boot0引脚拉低了再启动,也就是先拉低boot0再复位,这样启动的时候就是boot0为0了,也就是低电平。或者不复位而是按住boot0为低电平直接断电重新上电。然后你就可以用串口更新软件把hex文件发过来了,之后同样的复位重启,运行新程序。虽然过程有点复杂,但是有自动下载电路,可以用串口的DTR和RTS这俩信号协助你控制RST(复位)和boot0,这样就不用你管了。
有什么区别呢?仿真器快,对吧。还有就是串口只能下载,仿真器可以仿真,就是一步步运行程序,便于查看效果。我们先从下载方面分析,再说仿真方面。
你写过stm32内置flash编程程序,你应该知道,就是那块0x0800 0000的存储器,你除了用来存储你的程序并运行外,你还可以用你的程序去读写它,只要没有碰到你自己的程序那块,不然那就是格式化C盘的效果,你的程序可能就挂了