大学网站建设课程课综,《网站平台建设》课程实训,深圳企业做网站,网站建设发文章几点发比较合适最近在做一个项目#xff0c;想使用uSD卡来实现在应用编程#xff0c;首先需要一些知识 我所使用的单片机是STM32F103ZE#xff0c;内部flash#xff0c;超始地址为0x8000000#xff0c;大小为0x80000#xff08;0x80000/1024也就是512kByte#xff09;要实现IAP#x…最近在做一个项目想使用uSD卡来实现在应用编程首先需要一些知识 我所使用的单片机是STM32F103ZE内部flash超始地址为0x8000000大小为0x800000x80000/1024也就是512kByte要实现IAP那么我需要一个bootloader什么是bootloader呢其实可以理解为我们PC的引导程序我们需要在flash中为这个引导程序分配一个空间起始于flash的起始地址0x80000000结束于0x80007F00,这样就分配了32KByte的空间注意这个空间的分配一定要大于等于bootloader所占用的flash空间的大小。可以用stlink Utility来确定实际大小也可以用编译工具编译结束后输出的信息。 除了bootloader还有最终单片机需要跑的用户应用程序。这个程序就可以分配在bootloader之后的空间里从0x80008000开始到0x80080000全部可用。 了解了上面的信息那么可以知道它的实现原理单片机上电运行bootloader检查某一个按钮是否按下如果按下就做一些初始化的工作比如SDIOFATFS完成后读取SD卡中指定的BIN文件并转移到开始地址为0x80008000的FLASH中。如果按钮没有按下bootloader去检查0x80008000为首的FLASH区域是否有应用程序如果有就执行。 else//未检测到按钮{/*检查用户应用程序的起始地址是否有正确的内容*/if (((*(__IO uint32_t*)APPLICATION_ADDRESS) 0x2FFE0000 ) 0x20000000){/* Jump to user application */JumpAddress *(__IO uint32_t*) (APPLICATION_ADDRESS 4);JumpToApplication (pFunction) JumpAddress;/* Initialize user applications Stack Pointer */__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);JumpToApplication();}} PS: BIN文件的生成 在调试好应用程序之后方可生成BIN文件拷贝到SD卡中那么如何生成这个文件呢还是MDK ARM工具 OPTION-USER-Run #1 打勾填入 E:\Keil\ARM\ARMCC\bin\fromelf.exe --bin -o .\STM3210E_EVAL\STM3210E_EVAL.bin .\STM3210E_EVAL\STM3210E_EVAL.axf 以上具体的路径根据自己的实际情况更改只不过生志的BIN文件和AXF文件需要和MDK工程名一致这点要注意。 更改生成文件的超始地址 Option-Target-IROM1 的起始地址是否为0x80008000。 还有最重要的一点用户应用程序在调试好之后生成BIN文件之前需要更改中断向量表的偏移使用STM32 HAL库的情况下找到system_stm32f1xx.c这个文件修改宏定义 #define VECT_TAB_OFFSET 0x0 /*! Vector Table base offset field. This value must be a multiple of 0x200. */ 以上是默认值这里需要更改为你所设置的偏移量在这里就是用户应用程序相对于基址0x80000000的偏移用户应用的基址是0x80008000那么偏移量为0x8000所以这里改成 #define VECT_TAB_OFFSET 0X8000 转载于:https://www.cnblogs.com/jackweibe/p/5623670.html