好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

STM32 GPIO及EXTI初始化详解.doc

4页
  • 卖家[上传人]:豆浆
  • 文档编号:874862
  • 上传时间:2017-05-20
  • 文档格式:DOC
  • 文档大小:28.50KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • STM32-GPIO及EXTI初始化详解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与pin5GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/* GPIO_Speed 描述GPIO_Speed_10MHz 最高输出速率10MHzGPIO_Speed_2MHz 最高输出速率2MHzGPIO_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_WriteBitGPIO_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);*/电压驱动的如:场效应管,因为 它的内阻很大,加 电压控制 时电流很小,近似为零,所以可以理解成:电压驱动; 电流驱动的如:普通的NPN、PNP 型三极管,因 为它的内阻较小,加电压控制时电流相对较大(一般小功率的都有100uA以上,大功率的可达20mA以上),所以可以理解成:电压驱动;  从控制原理来说:电压驱动的如:场效应管,它是通 过加到 G、S端的电压(微观的就是电场)来控制D、S内部通道的 宽窄(即通道可变)来控制D、 S两端电流; 电流驱动的如:普通的NPN、PNP 型三极管,是通 过加到B、E端的电流(微观的就是电子的流动)来控制C、 E内部的电流流动(即通道不变)。

      数字器件,输入输出为高、低电平的两种状态模拟器件的信号是连续的,不是只有高、低电平两种状态。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.