⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup_stm32f10x.c

📁 Cortex-m3微控制器软件接口标准 不错的资料
💻 C
字号:
/******************************************************************************
 * @file:    startupstm32f10x.c
 * @purpose: CMSIS Cortex-M3 Core Device Startup File
 * @version: V1.0
 * @date:    12. Nov. 2008
 *----------------------------------------------------------------------------
 *
 * Copyright (C) 2008 ARM Limited. All rights reserved.
 *
 * ARM Limited (ARM) is supplying this software for use with Cortex-M3 
 * processor based microcontrollers.  This file can be freely distributed 
 * within development tools that are supporting such ARM based processors. 
 *
 * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 ******************************************************************************/




#define WEAK __attribute__ ((weak))
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
void WEAK Reset_Handler(void);
void WEAK Nmi_Handler(void);
void WEAK HardFault_Handler(void);
void WEAK MemManage_Handler(void);
void WEAK BusFault_Handler(void);
void WEAK UsageFault_Handler(void);
void WEAK MemManage_Handler(void);
void WEAK SVC_Handler(void);
void WEAK DebugMon_Handler(void);
void WEAK PendSV_Handler(void);
void WEAK SysTick_Handler(void);

// External Interrupts
void WEAK WWDG_IRQHandler(void) ;
void WEAK PVD_IRQHandler(void) ;
void WEAK TAMPER_IRQHandler(void) ;
void WEAK RTC_IRQHandler(void) ;
void WEAK FLASH_IRQHandler(void) ;
void WEAK RCC_IRQHandler(void) ;
void WEAK EXTI0_IRQHandler(void) ;
void WEAK EXTI1_IRQHandler(void) ;
void WEAK EXTI2_IRQHandler(void) ;
void WEAK EXTI3_IRQHandler(void) ;
void WEAK EXTI4_IRQHandler(void) ;
void WEAK DMAChannel1_IRQHandler(void) ;
void WEAK DMAChannel2_IRQHandler(void) ;
void WEAK DMAChannel3_IRQHandler(void) ;
void WEAK DMAChannel4_IRQHandler(void) ;
void WEAK DMAChannel5_IRQHandler(void) ;
void WEAK DMAChannel6_IRQHandler(void) ;
void WEAK DMAChannel7_IRQHandler(void) ;
void WEAK ADC_IRQHandler(void) ;
void WEAK USB_HP_CAN_TX_IRQHandler(void) ;
void WEAK USB_LP_CAN_RX0_IRQHandler(void) ;
void WEAK CAN_RX1_IRQHandler(void) ;
void WEAK CAN_SCE_IRQHandler(void) ;
void WEAK EXTI9_5_IRQHandler(void) ;
void WEAK TIM1_BRK_IRQHandler(void) ;
void WEAK TIM1_UP_IRQHandler(void) ;
void WEAK TIM1_TRG_COM_IRQHandler(void) ;
void WEAK TIM1_CC_IRQHandler(void) ;
void WEAK TIM2_IRQHandler(void) ;
void WEAK TIM3_IRQHandler(void) ;
void WEAK TIM4_IRQHandler(void) ;
void WEAK I2C1_EV_IRQHandler(void) ;
void WEAK I2C1_ER_IRQHandler(void) ;
void WEAK I2C2_EV_IRQHandler(void) ;
void WEAK I2C2_ER_IRQHandler(void) ;
void WEAK SPI1_IRQHandler(void) ;
void WEAK SPI2_IRQHandler(void) ;
void WEAK USART1_IRQHandler(void) ;
void WEAK USART2_IRQHandler(void) ;
void WEAK USART3_IRQHandler(void) ;
void WEAK EXTI15_10_IRQHandler(void) ;
void WEAK RTCAlarm_IRQHandler(void) ;
void WEAK USBWakeUp_IRQHandler(void) ;
 


/* Exported types --------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
extern unsigned long _etext;
extern unsigned long _sidata;		/* start address for the initialization values of the .data section. defined in linker script */
extern unsigned long _sdata;		/* start address for the .data section. defined in linker script */
extern unsigned long _edata;		/* end address for the .data section. defined in linker script */

extern unsigned long _sbss;			/* start address for the .bss section. defined in linker script */
extern unsigned long _ebss;			/* end address for the .bss section. defined in linker script */

extern void _estack;		/* init value for the stack pointer. defined in linker script */



/* Private typedef -----------------------------------------------------------*/
/* function prototypes ------------------------------------------------------*/
void Reset_Handler(void) __attribute__((__interrupt__));
extern int main(void);


/******************************************************************************
*
* The minimal vector table for a Cortex M3.  Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
******************************************************************************/


__attribute__ ((section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
  &_estack,            // The initial stack pointer
  Reset_Handler, // Reset Handler
		Nmi_Handler, // NMI Handler
		HardFault_Handler, // Hard Fault Handler
		MemManage_Handler, // MPU Fault Handler
		BusFault_Handler, // Bus Fault Handler
		UsageFault_Handler, // Usage Fault Handler
		0, // Reserved
		0, // Reserved
		0, // Reserved
		0, // Reserved
		SVC_Handler, // SVCall Handler
		DebugMon_Handler, // Debug Monitor Handler
		0, // Reserved
		PendSV_Handler, // PendSV Handler
		SysTick_Handler, // SysTick Handler

		// External Interrupts
		WWDG_IRQHandler, // Window Watchdog
		PVD_IRQHandler, // PVD through EXTI Line detect
		TAMPER_IRQHandler, // Tamper
		RTC_IRQHandler, // RTC
		FLASH_IRQHandler, // Flash
		RCC_IRQHandler, // RCC
		EXTI0_IRQHandler, // EXTI Line 0
		EXTI1_IRQHandler, // EXTI Line 1
		EXTI2_IRQHandler, // EXTI Line 2
		EXTI3_IRQHandler, // EXTI Line 3
		EXTI4_IRQHandler, // EXTI Line 4
		DMAChannel1_IRQHandler, // DMA Channel 1
		DMAChannel2_IRQHandler, // DMA Channel 2
		DMAChannel3_IRQHandler, // DMA Channel 3
		DMAChannel4_IRQHandler, // DMA Channel 4
		DMAChannel5_IRQHandler, // DMA Channel 5
		DMAChannel6_IRQHandler, // DMA Channel 6
		DMAChannel7_IRQHandler, // DMA Channel 7
		ADC_IRQHandler, // ADC
		USB_HP_CAN_TX_IRQHandler, // USB High Priority or CAN TX
		USB_LP_CAN_RX0_IRQHandler, // USB Low  Priority or CAN RX0
		CAN_RX1_IRQHandler, // CAN RX1
		CAN_SCE_IRQHandler, // CAN SCE
		EXTI9_5_IRQHandler, // EXTI Line 9..5
		TIM1_BRK_IRQHandler, // TIM1 Break
		TIM1_UP_IRQHandler, // TIM1 Update
		TIM1_TRG_COM_IRQHandler, // TIM1 Trigger and Commutation
		TIM1_CC_IRQHandler, // TIM1 Capture Compare
		TIM2_IRQHandler, // TIM2
		TIM3_IRQHandler, // TIM3
		TIM4_IRQHandler, // TIM4
		I2C1_EV_IRQHandler, // I2C1 Event
		I2C1_ER_IRQHandler, // I2C1 Error
		I2C2_EV_IRQHandler, // I2C2 Event
		I2C2_ER_IRQHandler, // I2C2 Error
		SPI1_IRQHandler, // SPI1
		SPI2_IRQHandler, // SPI2
		USART1_IRQHandler, // USART1
		USART2_IRQHandler, // USART2
		USART3_IRQHandler, // USART3
		EXTI15_10_IRQHandler, // EXTI Line 15..10
		RTCAlarm_IRQHandler, // RTC Alarm through EXTI Line
		USBWakeUp_IRQHandler, // USB Wakeup from suspend
  0,0,0,0,0,0,0,
  (void *)0xF108F85F //@0x108 //this is for boot in RAM mode for medium density devices.
  ,0, //@0x10C
  0,0,0,0, //@0x110
  0,0,0,0,0,0,0,0, //@0x120
  0,0,0,0,0,0,0,0, //@0x140
  0,0,0,0,0,0,0,0, //@0x160
  0,0,0,0,0,0,0,0, //@0x180
  0,0,0,0,0,0,0,0, //@0x1A0
  0,0,0,0,0,0,0,0, //@0x1C0
  (void *)0xF1E0F85F //@0x1E0 //this is for boot in RAM mode for high density devices.
};

/*******************************************************************************
* Function Name  : Reset_Handler
* Description    : This is the code that gets called when the processor first starts execution
*		       following a reset event.  Only the absolutely necessary set is performed,
*		       after which the application supplied main() routine is called. 
* Input          :
* Output         :
* Return         :
*******************************************************************************/
void Reset_Handler(void)
{
    unsigned long *pulSrc, *pulDest;

    //
    // Copy the data segment initializers from flash to SRAM.
    //
    pulSrc = &_sidata;
    for(pulDest = &_sdata; pulDest < &_edata; )
    {
        *(pulDest++) = *(pulSrc++);
    }

    //
    // Zero fill the bss segment.
    //
    for(pulDest = &_sbss; pulDest < &_ebss; )
    {
        *(pulDest++) = 0;
    }

    //
    // Call the application's entry point.
    //
    main();
}

//*****************************************************************************
//
// Provide weak aliases for each Exception handler to the Default_Handler. 
// As they are weak aliases, any function with the same name will override 
// this definition.
//
//*****************************************************************************

#pragma weak MemManage_Handler = Default_Handler
#pragma weak BusFault_Handler = Default_Handler
#pragma weak UsageFault_Handler = Default_Handler
#pragma weak SVC_Handler = Default_Handler
#pragma weak DebugMon_Handler = Default_Handler
#pragma weak PendSV_Handler = Default_Handler
#pragma weak SysTick_Handler = Default_Handler
#pragma weak WWDG_IRQHandler = Default_Handler
#pragma weak PVD_IRQHandler = Default_Handler
#pragma weak TAMPER_IRQHandler = Default_Handler
#pragma weak RTC_IRQHandler = Default_Handler
#pragma weak FLASH_IRQHandler = Default_Handler
#pragma weak RCC_IRQHandler = Default_Handler
#pragma weak EXTI0_IRQHandler = Default_Handler
#pragma weak EXTI1_IRQHandler = Default_Handler
#pragma weak EXTI2_IRQHandler = Default_Handler
#pragma weak EXTI3_IRQHandler = Default_Handler
#pragma weak EXTI4_IRQHandler = Default_Handler
#pragma weak DMAChannel1_IRQHandler = Default_Handler
#pragma weak DMAChannel2_IRQHandler = Default_Handler
#pragma weak DMAChannel3_IRQHandler = Default_Handler
#pragma weak DMAChannel4_IRQHandler = Default_Handler
#pragma weak DMAChannel5_IRQHandler = Default_Handler
#pragma weak DMAChannel6_IRQHandler = Default_Handler
#pragma weak DMAChannel7_IRQHandler = Default_Handler
#pragma weak ADC_IRQHandler = Default_Handler
#pragma weak USB_HP_CAN_TX_IRQHandler = Default_Handler
#pragma weak USB_LP_CAN_RX0_IRQHandler = Default_Handler
#pragma weak CAN_RX1_IRQHandler = Default_Handler
#pragma weak CAN_SCE_IRQHandler = Default_Handler
#pragma weak EXTI9_5_IRQHandler = Default_Handler
#pragma weak TIM1_BRK_IRQHandler = Default_Handler
#pragma weak TIM1_UP_IRQHandler = Default_Handler
#pragma weak TIM1_TRG_COM_IRQHandler = Default_Handler
#pragma weak TIM1_CC_IRQHandler = Default_Handler
#pragma weak TIM2_IRQHandler = Default_Handler
#pragma weak TIM3_IRQHandler = Default_Handler
#pragma weak TIM4_IRQHandler = Default_Handler
#pragma weak I2C1_EV_IRQHandler = Default_Handler
#pragma weak I2C1_ER_IRQHandler = Default_Handler
#pragma weak I2C2_EV_IRQHandler = Default_Handler
#pragma weak I2C2_ER_IRQHandler = Default_Handler
#pragma weak SPI1_IRQHandler = Default_Handler
#pragma weak SPI2_IRQHandler = Default_Handler
#pragma weak USART1_IRQHandler = Default_Handler
#pragma weak USART2_IRQHandler = Default_Handler
#pragma weak USART3_IRQHandler = Default_Handler
#pragma weak EXTI15_10_IRQHandler = Default_Handler
#pragma weak RTCAlarm_IRQHandler = Default_Handler
#pragma weak USBWakeUp_IRQHandler = Default_Handler

//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt.  This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
void Default_Handler(void) {
	// Go into an infinite loop.
	//
	while (1) {
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -