新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2021-10-28
- 在线时间
- 10 小时
|
2金钱
我用stm32F103zet6做的iap 基于ymodem协议的升级。内存够大,我算过,没有超出。采用的systick,状态机轮询,下载app
但是常常下载app,卡在了JumpToApp();失败的多,成功跳转的少。
但是奇怪的是:
1、有时候成功跳转,运行正常,但是我再擦除,下载,又失败了,卡在跳转函数处JumpToApp()
2、有时候跳转只执行了app工程的初始化-打印logo信息,没有进入main中while循环;
3、有时候卡住,没有进入main第一行;
但是,再调试模式下又都正常!
我使用的外设和中断都在跳转之前都关闭、复位了了,我看网上说的也是这些,但还是上述情况!
- HAL_UART_MspDeInit(&huart2);
- HAL_NVIC_DisableIRQ(USART2_IRQn); //恢复NVIC为复位状态.使中断不再发生
- HAL_NVIC_ClearPendingIRQ(USART2_IRQn);
- HAL_UART_DeInit(&huart2);
-
- HAL_NVIC_DisableIRQ(DMA1_Channel6_IRQn);
- HAL_NVIC_DisableIRQ(DMA1_Channel7_IRQn);
-
- // 设置所有时钟到默认状态,使用HSI时钟
- HAL_RCC_DeInit();
- //__HAL_RCC_USART2_CLK_DISABLE();
- // 关闭所有中断,清除所有中断挂起标志
- for (int i = 0; i < 8; i++)
- {
- NVIC->ICER[i]=0xFFFFFFFF;
- NVIC->ICPR[i]=0xFFFFFFFF;
- }
- HAL_RCC_DeInit();
-
- // 关闭滴答定时器,复位到默认值
- SysTick->CTRL = 0;
- SysTick->LOAD = 0;
- SysTick->VAL = 0;
-
- HAL_DeInit();
- HAL_NVIC_DisableIRQ(SysTick_IRQn); //
- HAL_NVIC_ClearPendingIRQ(SysTick_IRQn); //清除外部中断的挂起位。
- //关闭全局中断
- //__set_PRIMASK(1);
- __disable_irq();
复制代码 我在app工程,打开中断,还是一样的效果...
而且我下载app的bin文件之后,调试读取app区的flash,是有值的,
有时能跳转成功、回跳等,说明中断向量地址是对的;下载app的bin文件,我读取flash也有值,擦除、读、写都没问题;
实在找不到问题了,脑袋晕...
求哪位大佬指点一下!!
|
|