硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2715|回复: 1
收起左侧

[技术讨论] STM32F103测试跳转到系统bootloader失败,进入硬件错误

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2021-7-26 14:31:37 | 显示全部楼层 |阅读模式
没有找到F103系列的在哪个版块发帖子,就来这里发了。
最近在弄串口和USB烧写程序,F407的芯片已经成功了,根据V5系列的例程,可以成功进入bootloader,用STM32CubeProgrammer也可以识别并成功的下载程序。
现在在弄F103的串口烧程序,但是总不能正确进入bootloader,仿真的时候看是进入硬件错误的中断了。
程序是参考F407的写的,麻烦帮我看一下。
  1. int main(void)
  2. {
  3.   HAL_Init();

  4.   /* Configure the system clock */
  5.   SystemClock_Config();

  6.   /* Initialize all configured peripherals */
  7.   MX_GPIO_Init();
  8.   MX_USART1_UART_Init();


  9.   /* Infinite loop */
  10.   /* USER CODE BEGIN WHILE */
  11.   while (1)
  12.   {
  13.     /* USER CODE END WHILE */

  14.     /* USER CODE BEGIN 3 */
  15.                 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_3)==GPIO_PIN_RESET)
  16.                 {
  17. //                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
  18.                         JumpToBootloader();
  19.                 }
  20.                 else
  21.                 {
  22.                         JumpToApp();
  23.                 }               
  24.   }
  25.   /* USER CODE END 3 */
  26. }
复制代码
  1. #define DISABLE_INT()        __set_PRIMASK(1)
  2. #define ENABLE_INT()        __set_PRIMASK(0)

  3. static void JumpToBootloader(void)
  4. {
  5.         uint32_t i=0;
  6.         void (*SysMemBootJump)(void);
  7.         __IO uint32_t BootAddr =  0x1FFFF000;//0x1FFF0000;
  8.        

  9.         DISABLE_INT();//CPU_IntDis();  
  10.        

  11.         SysTick->CTRL = 0;
  12.         SysTick->LOAD = 0;
  13.         SysTick->VAL = 0;
  14.        

  15.         HAL_RCC_DeInit();
  16.        

  17.         for (i = 0; i < 8; i++)
  18.         {
  19.                 NVIC->ICER[i]=0xFFFFFFFF;
  20.                 NVIC->ICPR[i]=0xFFFFFFFF;
  21.         }
  22.        

  23.         ENABLE_INT();//CPU_Init();

  24. //        __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();

  25.         SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));

  26.         __set_MSP(*(uint32_t *)BootAddr);

  27.         __set_CONTROL(0);

  28.         SysMemBootJump();
  29.        

  30. }
复制代码
  1. static void JumpToApp(void)
  2. {
  3.         uint32_t i=0;
  4.         void (*SysMemBootJump)(void);
  5.         __IO uint32_t BootAddr = 0x8001000;

  6.         DISABLE_INT();

  7.         SysTick->CTRL = 0;
  8.   SysTick->LOAD = 0;
  9.   SysTick->VAL = 0;

  10.         HAL_RCC_DeInit();

  11.         for (i = 0; i < 8; i++)
  12.         {
  13.                 NVIC->ICER[i]=0xFFFFFFFF;
  14.                 NVIC->ICPR[i]=0xFFFFFFFF;
  15.         }       

  16.         ENABLE_INT();

  17.         SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));

  18.         __set_MSP(*(uint32_t *)BootAddr);

  19. //        __set_CONTROL(0);

  20.         SysMemBootJump();
  21. }
复制代码


主要程序是上面的,不管是跳到bootloader还是跳转到APP都会进入硬件中断。麻烦各位大神指点一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-7-26 17:05:55 | 显示全部楼层
没测试过F1的系统BootLoader,帮顶。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 21:31 , Processed in 0.226335 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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