我想增加STM32USBBoot的一个功能,通过BKP寄存器来传递是否需要进入Bootloader模式的参数,代码如下: void Sys_Init(void) { /* Check Bootloader Condition */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
BKP_TamperPinCmd(DISABLE);
/* Configure Tamper as input pulldown */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStructure);
if((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == SET) && (BKP_ReadBackupRegister(0) != FWU_KEY)) { // Realease resources and jump to Application GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,DISABLE);
__MSR_MSP(*(vu32 *)BL_APP_START); APP_ADDR(); }
/* Configure the system clocks */ RCC_Configuration();
/* Configure the GPIO ports */ GPIO_Configuration();
USB_Init(); } 其中,会检测一个按键(目前使用GPIOC_13),还会检测BKP第0号寄存器,如果等于FWU_KEY的话,则运行Bootloader 在应用程序中: BKP_WriteBackupRegister(0, FWU_KEY); USB_Reset(); NVIC_GenerateSystemReset(); 调用后,系统和USB接口都复位,但复位后没有进入Bootloader,如果复位时,GPIOC_13拉低的话,确实是可以进入Bootloader的。 是否是因为调用了NVIC_GenerateSystemReset后,BKP寄存器的内容也Reset了? |