野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7934|回复: 0

求助STM32H750无法跳转到外部QSPI FLASH中

[复制链接]

发表于 2021-12-16 12:08:41 | 显示全部楼层 |阅读模式
STM32H750VB
硬件:使用W25Q128JV和W25Q64JV都试过了,     原理图和PCB图如下图所示,PCB做了等长处理
软件:目前烧录算法可以使用,并且开启校验模式。可以查到尝试ID,可以写读数据。
问题:STM32H750VB 内部128K存boot   外部qspi flash存app程序 。
目前无法跳转app,程序参考大佬的的都不行。运行到跳转字段时的时候晶振就不起振了
野火论坛202112161205201884..png 野火论坛202112161205354345..png
boot main函数
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.         MPU_Config();
  5.         CPU_CACHE_Enable();
  6.   /* USER CODE END 1 */
  7.   /* MCU Configuration--------------------------------------------------------*/
  8.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  9.   HAL_Init();
  10.   /* USER CODE BEGIN Init */
  11.   /* USER CODE END Init */
  12.   /* Configure the system clock */
  13.   SystemClock_Config();
  14.   /* USER CODE BEGIN SysInit */
  15.   /* USER CODE END SysInit */
  16.   /* Initialize all configured peripherals */
  17.   MX_GPIO_Init();
  18.         //HAL_GPIO_WritePin(LOCK_GPIO_GPIO_Port,LOCK_GPIO_Pin,GPIO_PIN_SET);
  19.   MX_USART1_UART_Init();
  20. // MX_SPI1_Init();
  21. // MX_SPI2_Init();
  22.   /* USER CODE BEGIN 2 */
  23.         printf("boot ok\r\n");
  24.         
  25.         clock_information();
  26. //        
  27.         MX_QUADSPI_Init();
  28.         W25QXX_Init();
  29.         
  30.         printf("id:%X\r\n",W25QXX_MftrDeviceID());

  31.         QSPI_EnableMemoryMappedMode();

  32.         SCB_DisableICache();
  33.         SCB_DisableDCache();

  34.         

  35.   JumpToApp();  /* 跳转到应用程序 */
  36.   /* Infinite loop */
  37.   /* USER CODE BEGIN WHILE */
  38.   while (1)
  39.   {
  40.     /* USER CODE END WHILE */
  41.     /* USER CODE BEGIN 3 */
  42.   }
  43.   /* USER CODE END 3 */
  44. }
复制代码
boot映射代码:测试映射应该也没问题
  1. uint8_t QSPI_EnableMemoryMappedMode(void)
  2. {
  3.   QSPI_CommandTypeDef cmd;
  4.   QSPI_MemoryMappedTypeDef mem;

  5.   // Configure the command for the read instruction
  6.   cmd.InstructionMode = QSPI_INSTRUCTION_1_LINE;
  7.   cmd.Instruction = W25X_FastRead;

  8.   cmd.AddressMode = QSPI_ADDRESS_4_LINES;
  9.   cmd.AddressSize = QSPI_ADDRESS_24_BITS;

  10.   cmd.DataMode = QSPI_DATA_4_LINES;

  11.   cmd.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;

  12.   cmd.DummyCycles = 8;

  13.   cmd.DdrMode = QSPI_DDR_MODE_DISABLE;
  14.   cmd.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
  15.   cmd.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;

  16.   // Configure the memory mapped mode
  17.   mem.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  18.   mem.TimeOutPeriod = 0;

  19.   if (HAL_QSPI_MemoryMapped(&hqspi, &cmd, &mem) != HAL_OK)
  20.   {
  21.     return 1;
  22.   }

  23.   return 0;
  24. }
复制代码
boot跳转代码
  1. void JumpToApp(void)
  2. {
  3.         uint32_t i=0;
  4.         void (*AppJump)(void);         /* 声明一个函数指针 */
  5.         __IO uint32_t AppAddr = 0x90000000;  /* APP 地址 0x90000000*/
  6.    

  7.     /* 关闭全局中断 */
  8.         DISABLE_INT();
  9.    
  10.     /* 设置所有时钟到默认状态,使用HSI时钟 */
  11.         HAL_RCC_DeInit();
  12.    
  13.         /* 关闭滴答定时器,复位到默认值 */
  14.         SysTick->CTRL = 0;
  15.   SysTick->LOAD = 0;
  16.   SysTick->VAL = 0;

  17.         /* 关闭所有中断,清除所有中断挂起标志 */
  18.         for (i = 0; i < 8; i++)
  19.         {
  20.                 NVIC->ICER[i]=0xFFFFFFFF;
  21.                 NVIC->ICPR[i]=0xFFFFFFFF;
  22.         }        

  23.         /* 使能全局中断 */
  24.         ENABLE_INT();

  25.         /* 跳转到应用程序,首地址是MSP,地址+4是复位中断服务程序地址 */
  26.         AppJump = (void (*)(void)) (*((uint32_t *) (AppAddr + 4)));

  27.         /* 设置主堆栈指针 */
  28.         __set_MSP(*(uint32_t *)AppAddr);
  29.         
  30.         /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
  31.         __set_CONTROL(0);

  32.         /* 跳转到系统BootLoader */
  33.         AppJump();

  34.         /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
  35.         while (1)
  36.         {

  37.         }
  38. }
复制代码
app main函数
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.         SCB->VTOR = QSPI_BASE;
  5. //        __enable_irq();
  6.         SCB_EnableICache();
  7.         SCB_EnableDCache();
  8.         
  9.   /* USER CODE END 1 */
  10.   /* MCU Configuration--------------------------------------------------------*/
  11.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  12.   MPU_Config( );
  13.         HAL_Init();
  14.   /* USER CODE BEGIN Init */
  15.   /* USER CODE END Init */
  16.   /* Configure the system clock */
  17.   SystemClock_Config();
  18. /* USER CODE BEGIN SysInit */
  19. /* USER CODE END SysInit */
  20. /*Initialize all configured peripherals */
  21.   MX_GPIO_Init();
  22.         HAL_GPIO_WritePin(LOCK_GPIO_GPIO_Port,LOCK_GPIO_Pin,GPIO_PIN_RESET);
  23. // MX_QUADSPI_Init();
  24.   MX_USART1_UART_Init();
  25. //  MX_SPI1_Init();
  26. //  MX_SPI2_Init();
  27.   /* USER CODE BEGIN 2 */
  28.         printf("APP ok!\r\n");

  29.   /* USER CODE END 2 */
  30.   /* Infinite loop */
  31.   /* USER CODE BEGIN WHILE */
  32.   while (1)
  33.   {
  34.     /* USER CODE END WHILE */
  35.                 HAL_GPIO_WritePin(LOCK_GPIO_GPIO_Port,LOCK_GPIO_Pin,GPIO_PIN_SET);
  36.                 HAL_Delay(100);
  37.                 HAL_GPIO_WritePin(LOCK_GPIO_GPIO_Port,LOCK_GPIO_Pin,GPIO_PIN_RESET);
  38.                 HAL_Delay(100);
  39.     /* USER CODE BEGIN 3 */
  40.   }
  41.   /* USER CODE END 3 */
  42. }
复制代码

野火论坛202112161207454773..png APP MDK设置





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 09:05 , Processed in 0.039675 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表