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

📄 stm32f10x_it.c

📁 STM32的GPIO口模拟串口通信
💻 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 + -