STM32 的中断函数的学习

来源:互联网 发布:南京行知中学官网 编辑:程序博客网 时间:2024/05/16 11:17

STM32中断函数的学习和理解

GPIO_EXTILineConfig函数的作用:将相应的GPIO引脚连到相应的中断线上。

●  EXTI线16连接到PVD输出 
●  EXTI线17连接到RTC闹钟事件 
●  EXTI线18连接到USB唤醒事件 
●  EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

 

可以通过:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);

 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);

 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource2);

来选择。






void EXTI_Configuration(void); //定义IO中断初始化函数 

EXTI_Configuration();//IO中断初始化函数调用简单应用: 
//中断设置
void EXTI_Configuration(void) 

  EXTI_InitTypeDef EXTI_InitStructure;        //EXTI初始化结构定义 

EXTI_ClearITPendingBit(EXTI_LINE_KEY_BUTTON);//清除中断标志 
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);//管脚选择 
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4); 
     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5); 
     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6); 

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//事件选择 
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发模式 
  EXTI_InitStructure.EXTI_Line = EXTI_Line3 | EXTI_Line4; //线路选择 
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//启动中断 
  EXTI_Init(&EXTI_InitStructure);//初始化 


//RCC初始化函数中开启I/O时钟 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); 

//GPIO初始化函数中定义输入I/O管脚。 
//IO输入,GPIOA的4脚输入 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉输入 
  GPIO_Init(GPIOA, &GPIO_InitStructure);                //初始化 
//在NVIC的初始化函数里面增加以下代码打开相关中断: 
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;        //通道 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//占先级 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                        //响应级 
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //启动 
  NVIC_Init(&NVIC_InitStructure);                        //初始化

/*******************************************************************************
设置GPIO基本参数
*******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5 ;
  //设置的IO为pin4与pin5
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  /*  GPIO_Speed                  描述 
  GPIO_Speed_10MHz      最高输出速率10MHz 
  GPIO_Speed_2MHz        最高输出速率2MHz 
  GPIO_Speed_50MHz      最高输出速率50MHz
  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
/*
GPIO_Speed                    描述 
GPIO_Mode_AIN              模拟输入 
GPIO_Mode_IN_FLOATING 浮空输入 
GPIO_Mode_IPD              下拉输入 
GPIO_Mode_IPU              上拉输入 
GPIO_Mode_Out_OD       开漏输出 
GPIO_Mode_Out_PP        推挽输出 
GPIO_Mode_AF_OD        复用开漏输出 
GPIO_Mode_AF_PP         复用推挽输出通常有5种方式使用某个引脚功能,
它们的配置方式如下:
1)作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,
同时不要使能该引脚对应的所有复用功能模块。
2)作为普通GPIO输出:
根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引
脚对应的所有复用功能模块。
3)作为普通模拟输入:
配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有
复用功能模块。
4)作为内置外设的输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,
同时使能该引脚对应的某个复用功能模块。
5)作为内置外设的输出:
根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能
该引脚对应的所有复用功能模块。1、模拟输入模式下,是用于AD输入时输入模拟量,此时施密特触
发器输入关闭,施密特触发器输出为0.
2、下拉输入:打开内部下拉电阻
3、上拉输入:打开内部上拉电阻
4、浮空输入 :这个输入模式,输入电平必须由外部电路确定,
要根据具体电路,加外部上拉电阻或下拉电阻。
5、推挽输出:可以输出高,低电平,连接数字器件。推挽式输出输出电阻
小,带负载能力强。
6、开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要
上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强
(一般20ma以内).能驱动大电流和大电压。LED就使用这种模式
7、复用是指该引脚打开remap功能。*/
  
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource4);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);
}
/*GPIO常使用的几条函数
GPIO_ReadInputDataBit   读取指定端口管脚的输入
u8 ReadValue; 
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
  使用setbits 与resetbits 是比较简单,其实还是可以使用
  其它函数。例如可以使用GPIO_WriteBit
   GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
  GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);对于好像流水灯呀这些一个整段IO,可以使用
GPIO_Write(GPIOA, 0x1101);GPIO_EXTILineConfig  选择GPIO管脚用作外部中断线路
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);*/



0 0
原创粉丝点击