返回> 网站首页
STM32F070的IAP - bootloader
yoours2021-09-11 08:39:55
简介一边听听音乐,一边写写文章。
一、bootloader计时中断
计时采用systick,默认使用STM32Mx创建的ll库程序没有产生systick中断,则需要修改:
__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks) { SysTick->LOAD = (uint32_t)((HCLKFrequency / Ticks) - 1UL); SysTick->VAL = 0UL; SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk| /*增加此项*/ SysTick_CTRL_ENABLE_Msk; } |
二、bootloader跳转到应用
typedef void (*pFunction)(void); if(TmCnt>2000) { SysTick->CTRL=0x00;//关闭计数器 SysTick->VAL =0x00;//清空计数器 NVIC_DisableIRQ(USART1_IRQn); NVIC_DisableIRQ(DMA1_Channel2_3_IRQn); LL_DMA_DeInit(DMA1, LL_DMA_CHANNEL_3); LL_USART_DeInit(USART1); __disable_irq(); if(((*(__IO uint32_t*)APPLICATION_ADDRESS)&0x2FFE0000)==0x20000000) { pFunction jumpapp = (pFunction)*(__IO uint32_t*)(APPLICATION_ADDRESS+4); __set_MSP(*(__IO uint32_t*)APPLICATION_ADDRESS); jumpapp(); } } |
三、应用程序的中断向量表处理
memcpy((void*)0x20000000,(void*)APPLICATION_ADDRESS, 0xC0); __HAL_RCC_SYSCFG_CLK_ENABLE(); __HAL_SYSCFG_REMAPMEMORY_SRAM(); __HAL_RCC_PWR_CLK_ENABLE(); __enable_irq(); |
STM32F0的中断向量表处理与STM32F1等不一样,F0必须使用SRAM手动将中断向量表拷贝到0x20000000地址。
四、Keil设置
修改RAM地址,防止变量地址使用中断向量表空间。
文章评论
2640人参与,0条评论