实现不初始化RAM 变量
修改RAM 分配实现不初始化变量段
.noinit . (NOLOAD):
{
*(.noinit*);
} > RAM
声明不初始化变量
static volatile __attribute__((section (".noinit"))) uint32_t dfu ;
实现跳转dfu
跳转函数
static void JumpToDFU(void)
{
if(dfu==0x01){
void (*SysMemBootJump)(void);
__IO uint32_t BootAddr = 0x1FFFC800;//f0 system flash 地址
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
__set_MSP(*(uint32_t *)BootAddr);
dfu=0;
SysMemBootJump();
}
}
主函数
int main(void)
{
JumpToDFU();
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USB_DEVICE_Init();
MX_RTC_Init();
while (1)
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==GPIO_PIN_RESET){
dfu=0x01;
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(1000);
HAL_NVIC_SystemReset();
}
}
}