教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

STM32-GPIO及EXTI初始化详解

来源:网络收集 时间:2026-09-02
导读: STM32-GPIO及EXTI初始化详解 void EXTI_Configuration(void); //定义IO中断初始化函数 EXTI_Configuration();//IO中断初始化函数调用简单应用: //中断设置 void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化结构定义 EXT

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与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);*/

电压驱动的如:场效应管,因为它的内阻很大,加电压控制时电流很小,近似为零,所以可以理解成:电压驱动; 电流驱动的如:普通的NPN、PNP型三极管,因为它的内阻较小,加电压控制时电流相对较大(一般小功率的都有100uA以上,大功率的可达20mA以上),所以可以理解成 …… 此处隐藏:2564字,全部文档内容请下载后查看。喜欢就下载吧 ……

STM32-GPIO及EXTI初始化详解.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/977148.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)