STM32的GPIO端口复用为外部中断信号输入端

发布时间:2013-01-23 19:57:53   来源:文档文库   
字号:

GPIO端口复用为外部中断信号输入端,控制PA1端口电平变化,使用MDK

E_inter.c 代码如下,其它使用keil自带的文件

#include "stm32f10x_lib.h"

void RCC_cfg() //时钟设置

{ //打开PA端口时钟,由于GPIO用作中断输入,属于端口复用,故也需要打开复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

}

void NVIC_cfg() //设置中断

{

NVIC_InitTypeDef NVIC_InitStructure; //定义结构体变量

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//选择中断分组23个中断源,需2bit进行优先级设置

//高两位用于设置抢占式 优先级;

//低两位用于设置响应式 优先级

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQChannel; //选择中断通道2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //选择中断通道3

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //选择中断通道5

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

NVIC_Init(&NVIC_InitStructure);

}

void IO_cfg() //GPIO初始化

{

GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //选择使用的引脚 PA1led指示

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置端口翻转速度

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置端口工作模式 推挽输出

GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA.1引脚

GPIO_ResetBits(GPIOA,GPIO_Pin_1); //PA.1引脚设置为低电平输出,LED灯灭

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5; //选择引脚2 3 5 作为中断信号输入端

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //选择输入模式为浮空输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz

GPIO_Init(GPIOA,&GPIO_InitStructure); //设置PA.2 /PA.3 /PA.5

}

//由于GPIO并不是专用的中断引脚,因此在用GPIO来触发外部中断的时候需要设置将GPIO相应的引脚和中断线连接起来

void EXTI_cfg() //将相应的IO口与中断线路进行连接

{

EXTI_InitTypeDef EXTI_InitStructure; //定义结构体变量

EXTI_ClearITPendingBit(EXTI_Line2); //清空中断标志 PA.2 中断口

EXTI_ClearITPendingBit(EXTI_Line3); // PA.3 中断口

EXTI_ClearITPendingBit(EXTI_Line5); // PA.5 中断口

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2); //选择中断管脚PA.2 PA.3 PA.5

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);

EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line5; //选择中断线路2 3 5

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //设置中断触发方式为上下降沿触发

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中断使能

EXTI_Init(&EXTI_InitStructure);

}

int main()

{

RCC_cfg(); //设置时钟

IO_cfg(); //GPIO设置

NVIC_cfg(); //中断管理设置

EXTI_cfg(); //GPIO与中断线路的连接

while(1);

}

//文件说明:

////库函数的默认路径为: ...\keil\arm\rv31\lib\st\stm32f10x

//1:时钟设置,使用库文件stm32f10x_rcc.c

//2:中断管理,使用库文件stm32f10x_nvic.c

// cortexm3_macro.s 为中断管理库文件所需 ,为内核中特殊的指令操作

//3GPIO设置,使用库文件stm32f10x_gpio.c

//4GPIO与中断线路的连接,使用库文件stm32f10x_exti.c

//5:中断函数,位于 stm32f10x_it.c 中,具体的中断操作代码如下:(找到具体的函数位置,将如下函数体写入中断函数内)

/*

void EXTI2_IRQHandler(void) //PA.2中断信号的响应函数 抢占优先级:0/响应优先级:0

{

GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA.1端口置位,点亮LED

EXTI_ClearITPendingBit(EXTI_Line2); //清空中断标志位,防止持续进入中断

}

void EXTI3_IRQHandler(void) //PA.3中断信号的响应函数 抢占优先级:0/响应优先级:0

{

GPIO_ResetBits(GPIOA,GPIO_Pin_1); //PA.1端口清零,熄灭LED

EXTI_ClearITPendingBit(EXTI_Line3);

}

void EXTI9_5_IRQHandler(void) //PA.5中断信号的响应函数 抢占优先级:0/响应优先级:0

{

u8 ReadValue; //定义 存储端口状态 的变量

ReadValue = GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1); //读取PA1端口的当前状态

if(ReadValue == 0) //若该端口当前为低电平

{

GPIO_SetBits(GPIOA,GPIO_Pin_1); //将其改为高电平输出

}

else //若该端口当前为高电平,

{

GPIO_ResetBits(GPIOA,GPIO_Pin_1); //将其改为低电平输出;

}

EXTI_ClearITPendingBit(EXTI_Line5);

}

本文来源:https://www.2haoxitong.net/k/doc/a2924727453610661ed9f4bf.html

《STM32的GPIO端口复用为外部中断信号输入端.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式