
IAP程序参考ST官方例程,只是做了开发板的视频,app程序是一个非常简单的程序,只配置了uart作为调试信息输出。app main函数如下: int main(void) { __disable_irq(); HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); printf("!!!!!!!!!inintt ok\r\n"); MX_TIM14_Init(); HAL_Delay(5); printf("!!!!!!!!!ddd\r\n"); while(1) { } } IAP跳转部分代码为: if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); //printf("JumpAddress:0x%x,msp:0x%x\r\n",JumpAddress,*(__IO uint32_t*) APPLICATION_ADDRESS); JumpToApplication = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ HAL_RCC_DeInit(); app_nvic_deinit(); __disable_irq(); __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); JumpToApplication(); } 现在跳转后出现的现象是:HAL_Delay前的打印信息能够正常输出,HAL_Delay后的则异常,从ST例程的readme.txt中有如下描述: @note Care must be taken when using HAL_Delay(), this function provides accurate delay (in milliseconds) based on variable incremented in SysTick ISR. This implies that if HAL_Delay() is called from a peripheral ISR process, then the SysTick interrupt must have higher priority (numerically lower) than the peripheral interrupt. Otherwise the caller ISR process will be blocked. To change the SysTick interrupt priority you have to use HAL_NVIC_SetPriority() function. 然后修改了中断优先级,以前优先级都为0,现在把systick以外的中断优先级修改为4,systick为0,修改后的优先级为: HAL_NVIC_SetPriority(MemoryManagement_IRQn, 4, 0); HAL_NVIC_SetPriority(BusFault_IRQn, 4, 0); HAL_NVIC_SetPriority(UsageFault_IRQn, 4, 0); HAL_NVIC_SetPriority(SVCall_IRQn, 4, 0); HAL_NVIC_SetPriority(DebugMonitor_IRQn, 4, 0); HAL_NVIC_SetPriority(PendSV_IRQn, 4, 0); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 用修改后的app程序测试,跳转后现象是一样的,都是HAL_Delay前的正常,HAL_Delay后没有执行。 问了ST FAE,回复是应用程序问题,但是应用没有其他代码了。只有注释掉HAL_Delay就正常。还请坛子里各位高手指点。 |
stm32F723ZET6使用ADC捕获正弦波,adc采样频率过高导致主函数无法运行,要怎么优化?
STM32F723ZET6使用ADC捕获标准正弦波并通过USB主动上报,正弦波重新拟合后存在凹陷峰?
STM32F769是否可以部署边缘AI
STM32F723ZET6配置内部USB PHY的高速模式,初始化的时候usb init无法通过,要怎么修改配置呢?
训练好的ai模型导入cubemx不成功咋办,试了好几个模型压缩了也不行,ram占用过大,有无解决方案?
【STM32F769I-DISC1】LVGL在使用SPI_DMA数据发送时出现错误。
STM32F769I-DISC1的内存地址映印射如果查找
TouchGFX4.25.0 生成工程代码时报TouchGFX CMake projects only support ARM GCC toolchain.
求助
STM32F767+DP83848 LWIP+UDP 大量数据分片发送问题???
#define ApplicationAddress 0x08040000 // STM32_INFLASH_SECTOR_6_ADDRESS
typedef void (*pFunction)(void);
uint32_t JumpAddress;
pFunction Jump_To_Application;
pFunction Jump_To_Bootloader;
void EXE_ISP_Jump_ApplicationCode(void)
{
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
F207的跳转,可以参考下
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
”HAL_Delay需要在中断里执行“是什么意思?应用函数在启动的时候会初始化ethernet等设备,驱动会调用HAL_DELAY
HAL_Delay tick是来演于TIM14,没有用systick作为源
谢谢,我尝试过你的办法,能够跳转。但现在主要问题跳转后调用HAL_Delay卡住
从现象分析,就是因为TIM14并未正常开启。
评分
查看全部评分