/* ********************************************************************************************************* * * 模块名称 : 中断模块 * 文件名称 : stm32f10x_it.c * 版 本 : V2.0 * 说 明 : 本文件存放所有的中断服务函数。为了便于他人了解程序用到的中断,我们不建议将中断函数移到其他 * 的文件。 * * 我们只需要添加需要的中断函数即可。一般中断函数名是固定的,除非您修改了启动文件: * Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s * * 启动文件是汇编语言文件,定了每个中断的服务函数,这些函数使用了WEAK 关键字,表示弱定义,因此如 * 果我们在c文件中重定义了该服务函数(必须和它同名),那么启动文件的中断函数将自动无效。这也就 * 函数重定义的概念,这和C++中的函数重载的意义类似。 * * 修改记录 : * 版本号 日期 作者 说明 * v0.1 2009-12-27 armfly 创建该文件,ST固件库版本为V3.1.2 * v1.0 2011-01-11 armfly ST固件库升级到V3.4.0版本。 * v2.0 2011-10-16 armfly ST固件库升级到V3.5.0版本。 * V2.1 2015-08-07 armfly 在异常中断那服务器程序中驱动蜂鸣器发声,提示有问题了 * * Copyright (C), 2010-2011, 安富莱电子 www.armfly.com * ********************************************************************************************************* */ #include "stm32f10x_it.h" #define ERR_INFO "\r\nEnter HardFault_Handler, System Halt.\r\n" /* ********************************************************************************************************* * Cortex-M3 内核异常中断服务程序 ********************************************************************************************************* */ /* ********************************************************************************************************* * 函 数 名: NMI_Handler * 功能说明: 不可屏蔽中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void NMI_Handler(void) { } /* ********************************************************************************************************* * 函 数 名: HardFault_Handler * 功能说明: 硬件失效中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void HardFault_Handler(void) { #if 0 const char *pError = ERR_INFO; uint8_t i; for (i = 0; i < sizeof(ERR_INFO); i++) { USART1->DR = pError[i]; /* 等待发送结束 */ while ((USART1->SR & USART_FLAG_TC) == (uint16_t)RESET); } #endif #if 0 /* 出现异常时,驱动蜂鸣器发声 */ while(1) { uint16_t m; GPIOA->ODR ^= GPIO_Pin_8; for (m = 0; m < 10000; m++); } #else /* 当硬件失效异常发生时进入死循环 */ while (1) { } #endif } /* ********************************************************************************************************* * 函 数 名: MemManage_Handler * 功能说明: 内存管理异常中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void MemManage_Handler(void) { /* 当内存管理异常发生时进入死循环 */ while (1) { } } /* ********************************************************************************************************* * 函 数 名: BusFault_Handler * 功能说明: 总线访问异常中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void BusFault_Handler(void) { /* 当总线异常时进入死循环 */ while (1) { } } /* ********************************************************************************************************* * 函 数 名: UsageFault_Handler * 功能说明: 未定义的指令或非法状态中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void UsageFault_Handler(void) { /* 当用法异常时进入死循环 */ while (1) { } } /* ********************************************************************************************************* * 函 数 名: SVC_Handler * 功能说明: 通过SWI指令的系统服务调用中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void SVC_Handler(void) { } /* ********************************************************************************************************* * 函 数 名: DebugMon_Handler * 功能说明: 调试监视器中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void DebugMon_Handler(void) { } /* ********************************************************************************************************* * 函 数 名: PendSV_Handler * 功能说明: 可挂起的系统服务调用中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void PendSV_Handler(void) { } /* ********************************************************************************************************* * STM32F10x内部外设中断服务程序 * 用户在此添加用到外设中断服务函数。有效的中断服务函数名请参考启动文件(startup_stm32f10x_xx.s) ********************************************************************************************************* */ /* ********************************************************************************************************* * 函 数 名: PPP_IRQHandler * 功能说明: 外设中断服务程序。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ /* 因为中断服务程序往往和具体的应用有关,会用到用户功能模块的变量、函数。如果在本文件展开,会增加大量的 外部变量声明或者include语句。 因此,我们推荐这个地方只写一个调用语句,中断服务函数的本体放到对应的用户功能模块中。 增加一层调用会降低代码的执行效率,不过我们宁愿损失这个效率,从而增强程序的模块化特性。 增加extern关键字,直接引用用到的外部函数,避免在文件头include其他模块的头文件 extern void ppp_ISR(void); void PPP_IRQHandler(void) { ppp_ISR(); } */ extern void can_ISR(void); extern void USB_Istr(void); void USB_LP_CAN1_RX0_IRQHandler(void) { /* 判断CAN1的时钟是否打开 */ if (RCC->APB1ENR & RCC_APB1Periph_CAN1) { } else { } } /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/