📄 stm32f10x_it.c
字号:
/*
*********************************************************************************************************
*
* 模块名称 : 中断模块
* 文件名称 : 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版本。
*
* Copyright (C), 2010-2011, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#include "stm32f10x_it.h"
#define TXD_high() GPIO_SetBits(GPIOA, GPIO_Pin_9)
#define TXD_low() GPIO_ResetBits(GPIOA, GPIO_Pin_9)
extern uint32_t TimingDelay;
extern uint8_t dataReceived[100];
extern uint8_t receivedFlag, SendingFlag;
extern uint8_t receivedNum, tmpreceivedNum;
uint8_t cnt = 0;
/*
*********************************************************************************************************
* Cortex-M3 内核异常中断服务程序
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 函 数 名: NMI_Handler
* 功能说明: 不可屏蔽中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void NMI_Handler(void)
{
}
/*
*********************************************************************************************************
* 函 数 名: HardFault_Handler
* 功能说明: 硬件失效中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void HardFault_Handler(void)
{
/* 当硬件失效异常发生时进入死循环 */
while (1)
{
}
}
/*
*********************************************************************************************************
* 函 数 名: 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)
{
}
/*
*********************************************************************************************************
* 函 数 名: SysTick_Handler
* 功能说明: 系统嘀嗒定时器中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void SysTick_Handler(void)
{
}
/*
*********************************************************************************************************
* 函 数 名: EXTI15_10_IRQHandler
* 功能说明: 外部中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetFlagStatus(EXTI_Line10) != RESET)
{
/* Disable the Selected IRQ Channels -------------------------------------*/
NVIC->ICER[EXTI15_10_IRQn >> 0x05] =
(uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);
receivedFlag = 0;
TIM_SetCounter(TIM1, 0);
TIM_Cmd(TIM1,ENABLE); //开启TIM1
TIM_Cmd(TIM2,DISABLE); //关闭TIM2
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2,ENABLE); //开启TIM2
EXTI_ClearITPendingBit(EXTI_Line10);
cnt++; //调试用
}
}
/*
*********************************************************************************************************
* 函 数 名: TIM1_UP_IRQHandler
* 功能说明:
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void TIM1_UP_IRQHandler(void)
{
uint8_t tmp;
static uint8_t i;
if(TIM_GetFlagStatus(TIM1, TIM_FLAG_Update) != RESET)
{
tmp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10);
if(tmp == 1)
dataReceived[receivedNum] |= (1 << i);
i++;
if(i >= 8)
{
i = 0;
receivedNum++;
/* Enable the Selected IRQ Channels --------------------------------------*/
EXTI_ClearITPendingBit(EXTI_Line10);
NVIC->ISER[EXTI15_10_IRQn >> 0x05] =
(uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);
TIM_Cmd(TIM1,DISABLE); //关闭TIM1
TIM_Cmd(TIM2,DISABLE); //关闭TIM2
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2,ENABLE); //开启TIM2
}
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
}
}
/*
*********************************************************************************************************
* 函 数 名: TIM2_IRQHandler
* 功能说明: 外部中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void TIM2_IRQHandler(void)
{
if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) != RESET)
{
if(receivedNum != 0)
{
tmpreceivedNum = receivedNum;
receivedNum = 0;
receivedFlag = 1;
}
TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
}
}
/*
*********************************************************************************************************
* STM32F10x内部外设中断服务程序
* 用户在此添加用到外设中断服务函数。有效的中断服务函数名请参考启动文件(startup_stm32f10x_xx.s)
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 函 数 名: PPP_IRQHandler
* 功能说明: 外设中断服务程序。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
/*
因为中断服务程序往往和具体的应用有关,会用到用户功能模块的变量、函数。如果在本文件展开,会增加大量的
外部变量声明或者include语句。
因此,我们推荐这个地方只写一个调用语句,中断服务函数的本体放到对应的用户功能模块中。
增加一层调用会降低代码的执行效率,不过我们宁愿损失这个效率,从而增强程序的模块化特性。
增加extern关键字,直接引用用到的外部函数,避免在文件头include其他模块的头文件
extern void ppp_ISR(void);
void PPP_IRQHandler(void)
{
ppp_ISR();
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -