//*********************************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件。 //*********************************************************************************** #include "config.h" //写入数据 INT8U FLASH_Write(INT32U Addr, INT8U *ptr, INT16U Len) { ATOMIC_Start(); FLASH_UnlockAll(); //解锁flash编写擦除控制器 FLASH_SectorErase(Addr); //擦除一页地址 while(Len--) { FLASH_ProgramByte(Addr++, *ptr++); //FLASH_ProgramHalfWord(Addr, *ptr++); //Addr+=2; } FLASH_LockAll(); //锁定flash编写擦除控制器 ATOMIC_Stop(); return(1); } //读取数据 INT8U FLASH_Read(INT32U Addr, INT8U *ptr, INT16U Len) { //ATOMIC_Start(); while (Len--) { ptr[Len] = ((INT8U *)Addr)[Len]; } //ATOMIC_Stop(); return(1); } #if (__VTOR_PRESENT == 1) //cortex M0无VTOR寄存器,中断向量占用RAM的前48字节 #if (defined STM32F030) __IO INT32U VectorTable[48] __attribute__((at(0x20000000))); void FLASH_BootVector(void) { INT8U i; __set_PRIMASK(1); for (i = 0; i < 48; i++) { VectorTable[i] = * (__IO uint32_t *)(FLASH_APP_ADDR + (i << 2)); } RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM); __set_PRIMASK(0); } #else void FLASH_BootVector(void) { SCB->VTOR = (FLASH_APP_ADDR); } #endif #else void FLASH_BootVector(void) { } #endif