每片Flash都有一个Flash配置寄存器。 通过操作这些flash配置寄存器,可以对flash进行解锁、擦除、编程等操作。
Flash算法或编程算法是实现定义好的功能,包括:初始化、编程、擦除等供程序使用
不同的FLASH接口寄存器的操作方式不同。 具体来说,寄存器的地址不同,寄存器的关键位置的含义也不同,所以定义的函数的实现也会不同。 以上应该可以向您解释为什么不同型号的单片机需要完全不同的编程流程。
单片机的编程原理: 单片机有外设:如GPIO、SPI、UART等。 每个外设都有一个对应的寄存器来操作该外设。 我们称其为外设寄存器。 CPU还有寄存器:R1-R15等,这些称为CPU寄存器。 同时,微控制器还有一类寄存器,称为调试寄存器。 一般来说,初学者只会操作外围寄存器。
烧录的原理基本上是这样的:首先配置调试寄存器来停止CPU。 然后修改内存的值,再修改PC寄存器的值,然后再次修改调试寄存器的值,让CPU运行起来,这样单片机就会从PC寄存器的值开始运行。 这样我们修改的内存就会被执行。
所以重点是修改后的内存值:应该修改成什么? 首先将flash算法传输到内存中,然后将要烧录的代码传输到内存中(如果内存足够大,可以一次全部传输,否则可以分批传输)
最后:配置调试寄存器和CPU寄存器是通过DAP实现的,即JTAG或SWD。 通过控制DP和AP寄存器,可以读写:CPU寄存器; 调试寄存器; 记忆;
如何控制DP和AP寄存器:参考官方文档arm-debug-interface-V5