|
发表于 2022-3-18 10:10:31
|
显示全部楼层
bootloader里面, 开了什么外设,开了什么中断, 在跳转之前统统关掉,
给你看看我的
bootloader -------------------------------------------
extern HCD_HandleTypeDef hUsbHostFS;
extern USBH_HandleTypeDef hUsbHostHS;
extern UART_HandleTypeDef huart1;
extern HCD_HandleTypeDef hhcd_USB_OTG_FS;
extern HCD_HandleTypeDef hhcd_USB_OTG_HS;
extern TIM_HandleTypeDef htim1;
extern SPI_HandleTypeDef hspi1;
//extern SPI_HandleTypeDef hspi3;
typedef void ( *pFunction ) ( void );
uint8_t COMMAND_Jump_to_Application ( void )
{
uint32_t JumpAddress;
static pFunction Jump_To_Application;
uint32_t dwDelay = 0;
/* Check Vector Table: Test if user code is programmed starting from
* address "APPLICATION_ADDRESS" */
if ( ( ( ( * ( __IO uint32_t * ) APP_START_ADDR ) & 0xFF000000 ) == 0x20000000 )
|| ( ( ( * ( __IO uint32_t * ) APP_START_ADDR ) & 0xFF000000 ) == 0x10000000 ) )
{
debug_msg_y ( "jump to application... 0x%08x \r\n", APP_START_ADDR );
// __disable_irq();
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_IISOIXFR);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_PTXFE);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_MMIS);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_DISCINT);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_SOF);
__HAL_HCD_CLEAR_FLAG(&hhcd_USB_OTG_HS, USB_OTG_GINTSTS_HCINT);
HAL_HCD_MspDeInit ( &hhcd_USB_OTG_HS ); // &hUsbHostFS );
HAL_UART_MspDeInit( &huart1 );
HAL_SPI_MspDeInit ( &hspi1 );
//HAL_SPI_MspDeInit ( &hspi3 );
__HAL_TIM_CLEAR_IT( &htim1, TIM_IT_UPDATE);
__HAL_TIM_CLEAR_FLAG ( &htim1, TIM_FLAG_UPDATE);
HAL_SuspendTick();
HAL_Init();
HAL_RCC_DeInit();
HAL_DeInit();
__set_FAULTMASK(1);
dwDelay = 100000;
while ( dwDelay-- )
{
}
/* Jump to user application */
JumpAddress = * ( __IO uint32_t * ) ( APP_START_ADDR + 4 );
Jump_To_Application = ( pFunction ) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP ( * ( __IO uint32_t * ) APP_START_ADDR );
Jump_To_Application();
while ( 1 )
{
}
}
else
{
printf ( "application is not found.\r\n" );
return 0;
}
}
application ------------------------------
int main(void)
{
/* USER CODE BEGIN 1 */
__set_FAULTMASK(0);
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
|
|