STM32
直播中

蔡鼎瑾

9年用户 1115经验值
私信 关注
[问答]

stm32l071cbtx IAP跳转到app后无法feed iwdg的原因?

项目通过STM32cubeide创建,boot looder部分目前为了测试,进入main函数后直接跳转到app(此时未初始化任何中断、外设):


  • /* USER CODE BEGIN 1 */
  •         uint16_t boot_flag;

  • //boot_flag = readBootFlag();
  •         //for debug
  •         boot_flag = BOOT_FLAG_RUNAPP;
  •         if (boot_flag == BOOT_FLAG_RUNAPP)
  •         {
  •     JumpToApp();
  •         }
  •   /* USER CODE END 1 */


bootloader的JumpToApp函数实现:

  • void JumpToApp(void)
  • {
  •     if (((*(__IO uint32_t *)APP_BASE_ADDR) 0x2ffe0000) == 0x20000000)
  •     {
  •         JumpToApplication = (pFunction)(*(__IO uint32_t *)(APP_BASE_ADDR+4));
  •         __disable_irq();
  •         __set_MSP(*(__IO uint32_t *)APP_BASE_ADDR);
  •         JumpToApplication();
  •     }
  • }

app部分修改system_stm32l0xx.c里面VECT_TAB_OFFSET宏为app部分在flash中的位置,主函数主要如下:

  • /* 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 */
  •   __enable_irq();
  •   /* USER CODE END SysInit */

  •   /* Initialize all configured peripherals */
  •   MX_GPIO_Init();
  •   MX_DMA_Init();
  •   MX_IWDG_Init();               //注释掉就没问题,加上后程序跑到main loop后循环几次后就会reset
  •   MX_LPUART1_UART_Init();
  •   MX_USART2_UART_Init();
  •   /* USER CODE BEGIN 2 */

  •   /* USER CODE END 2 */



  •   /* Infinite loop */
  •   /* USER CODE BEGIN WHILE */
  •   printf("app enter main loop...n");
  •   while (1)
  •   {
  •     delay_us(100000);
  •     /* USER CODE END WHILE */

  •     /* USER CODE BEGIN 3 */
  •     printf("%lun", HAL_GetTick());
  •     HAL_IWDG_Refresh( hiwdg);
  •   }
  •   /* USER CODE END 3 */

boot启动后跳转到app没问题,发现app部分,只要初始化了IWDG,主循环里面的打印打印了几次后,程序就会reset,主循环里面有喂狗的代码但是感觉不起作用;要是app里面不初始化IWDG,就运行正常。

回帖(1)

韩禹

2024-4-11 14:30:15
bootloader里面可以初始化独立看门狗,但要在跳转APP后面的顺序(就是说如果无法跳转到APP被迫留在bootloader中运行才开启独立看门狗),如果目的是APP运行阶段防止死机,对策是到了APP才初始化独立看门狗
原因是我在bootloader中 开启独立看门狗的用途是串口OTA(在线升级)过程中如果出现死机能够恢复到APP中运行,而不是说是APP运行阶段防止死机
举报

更多回帖

发帖
×
20
完善资料,
赚取积分