你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有关Cubeide IAP 问题

[复制链接]
Ha~ha~ 提问时间:2025-4-17 17:53 / 未解决
实现IAP功能,使用cubeide生成APP程序的bin文件写入Flash之后,无法跳转到APP程序中。
但是使用KEIL编译生成的bin文件写入FLASH之后,可以正常执行。

在检查栈顶地址是否合法的那一步不通过。APP程序还需要修改哪些地方

Boot Loader部分代码:
/*****************************************************************************************/
<span]{
        <span]        if(((*(volatile uint32_t *)APP_Address) & 0x2FFE0000) == 0x20000000)
        {
<span]                printf("\n APP Yes \n");
                <span]                {
                        iap_load_app();
<span]                }
        }
<span]        else
        {
<span]                printf("\n APP No 01 \n");
        }
<span]}
else
<span]{
        <span]}

<span]跳转:
typedef void (*IAP_Fun)(void);
IAP_Fun JumpApp;


void iap_load_app()
{
        /* 检查栈顶地址是否合法 */
        if(((*(__IO uint32_t *)APP_Address) & 0x2FFE0000) == 0x20000000)
        {
                HAL_Delay(500);
                HAL_RCC_DeInit();
                HAL_DeInit();
                __disable_irq();
                JumpApp = (IAP_Fun)*(__IO uint32_t *)(APP_Address + 4);
                __set_MSP(*(__IO uint32_t *)APP_Address);
                JumpApp();
        }
        else
        {
                printf("\n Address error 01 \n");
        }
        printf("\n Jump App error 01 \n");
}





/*****************************************************************************************/


APP程序:
/*****************************************************************************************/
#define APP_Address         0x08020000
int main(void)
{
  /* USER CODE BEGIN 1 */
        SCB->VTOR = APP_Address;
        __enable_irq();




        uint16_t i = 0;
        uint8_t updata_cmd[7] = {0xF5, 0x00, 0xeb, 0x00, 0x00, 0xe0, 0xfa};
        uint8_t temp_buf[7] = {0};
  /* 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_DMA_Init();
  MX_USB_DEVICE_Init();
  MX_TIM14_Init();
  MX_USART6_UART_Init();
  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
          if(USB_RxIndex > 0)
          {
                  memcpy(temp_buf, USB_RxBuf, 7);
                  /* F5 00 eb 00 00 e0 fa */
                  if(strcmp((char *)updata_cmd, (char *)temp_buf) == 0)
                  {
                          for (i = 0; i < 8; i++)
                          {
                                  NVIC->ICER=0xFFFFFFFF;
                                  NVIC->ICPR=0xFFFFFFFF;
                          }
                          NVIC_SystemReset(); // 复位单片机
                  }


                  printf("\nrx:");
                  for(i = 0; i < USB_RxIndex; i++)
                  {
                          if(temp_buf > 0x0F)
                                  printf("%x ", temp_buf);
                          else
                                  printf("0%x ", temp_buf);
                  }
                  printf("\n");


                  USB_RxIndex = 0;
          }
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}



/*****************************************************************************************/


STM32F407ZGTX_FLASH.ld中修改
/*****************************************************************************************/
/* Memories definition */
MEMORY
{
  CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64K
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
  FLASH    (rx)    : ORIGIN = 0x08020000,   LENGTH = 896K
}




/*****************************************************************************************/
看网上的历程好像也只是添加了
SCB->VTOR = APP_Address;
和修改了STM32F407ZGTX_FLASH.ld中的FLASH。



收藏 评论0 发布时间:2025-4-17 17:53

举报

0个回答

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版