初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2013-1-19
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-1-25 13:18:00
|
显示全部楼层
回复【2楼】51921866:
---------------------------------
#include "stm32f10x.h"
#include "SysTickDelay.h"
#include "stm32f10x_exti.h"
void LED_Init(void);
void EXIT_Init(void);
int main(void)
{
SysTick_Initaize();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
LED_Init();
EXIT_Init();
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PD.2=1
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PA.8=0
while(1)
{
}
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//LED
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//NLE
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void EXIT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
//GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位
EXTI_ClearITPendingBit(EXTI_Line1);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource13); // 选择按键所在的GPIO管脚用作外部中断线路
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15); // 选择按键所在的GPIO管脚用作外部中断线路
//EXTI 外部中断初始化
EXTI_InitStructure.EXTI_Line= EXTI_Line13 | EXTI_Line15; // 外部中断引脚
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; // 下降沿
EXTI_InitStructure.EXTI_LineCmd=ENABLE; // 打开中断
EXTI_Init(&EXTI_InitStructure);
//NVIC 设置中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //中断号, 外部中断服务编号
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 1号子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 打开中断
NVIC_Init(&NVIC_InitStructure);
}
// 设置PA8、EXTI8
void EXTI15_10_IRQHandler(void) // 因为外部中断5-9共用同一个中断服务函数,所以使用if区别
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET) // 判断中断标志位是否为13
{
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2=1
GPIO_ResetBits(GPIOA,GPIO_Pin_8); //PA.8=0
//printf("\r\n EXTI_Line8");
EXTI_ClearITPendingBit(EXTI_Line13); // 清除中断标志位
}
if(EXTI_GetITStatus(EXTI_Line15) != RESET) // 判断中断标志位是否为15
{
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PD.2=1
GPIO_ResetBits(GPIOD,GPIO_Pin_2); //PA.8=0
//printf("\r\n EXTI_Line8");
EXTI_ClearITPendingBit(EXTI_Line15); // 清除中断标志位
}
}
这是我外部中断的程序 |
|