|

楼主 |
发表于 2022-2-18 10:10:53
|
显示全部楼层
嗯嗯,我看了下我的工程和官方的例程,确实有点区别,官方例程在跳转前什么只初始化了按键。不过我改成和官方的一样,好像还是跳转失败了- int main(void)
- {
- /* USER CODE BEGIN 1 */
- uint32_t i = 0;
- BSP_PB_Init();
- if (!key_scan())
- { /* Key push-button not pressed: jump to user application */
- /* Check if valid stack address (RAM address) then jump to user application */
- if (1)
- {
- /* Jump to user application */
- // printf("jump to app\r\n");
- __set_PRIMASK(1); /* 关闭全局中断 */
- SysTick->CTRL = 0; /* 关闭滴答定时器,复位到默认值 */
- SysTick->LOAD = 0;
- SysTick->VAL = 0;
- HAL_RCC_DeInit(); /* 设置所有时钟到默认状态,使用HSI时钟 */
- for (i = 0; i < 8; i++) /* 关闭所有中断,清除所有中断挂起标志 */
- {
- NVIC->ICER[i]=0xFFFFFFFF;
- NVIC->ICPR[i]=0xFFFFFFFF;
- }
- JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);
- Jump_To_Application = (pFunction) JumpAddress;
- /* Initialize user application's Stack Pointer */
- __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);
- HAL_TIM_Base_MspDeInit(&htim7); //要在启动app之前反初始化tim外设,否则app会运行卡死
- HAL_UART_MspDeInit(&huart5);
- HAL_UART_MspDeInit(&huart4);
- Jump_To_Application();
- /* do nothing */
- while(1);
- }
- else
- { /* Otherwise, do nothing */
- /* LED3 (RED) ON to indicate bad software (when not valid stack address) */
- // printf("unvalid address\r\n");
- HAL_GPIO_TogglePin(GPIOE, LED_Pin);
- /* do nothing */
- while(1);
- }
- }
- /* Enter in IAP mode */
- else
- {
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_UART4_Init();
- MX_UART5_Init();
- MX_TIM7_Init();
- MX_LWIP_Init();
- /* USER CODE BEGIN 2 */
- /* Initialize the webserver module */
- printf("bootloader\r\n");
- IAP_httpd_init();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- MX_LWIP_Process();
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- }
- /* USER CODE END 3 */
- }
复制代码 |
|