打印

外部中断服务函数进不去

[复制链接]
1461|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include "stm32f10x.h"

void gpio_init()//PA0为外部中断触发脚,PA2控制led
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_ResetBits(GPIOA , GPIO_Pin_2);
}

void EXTI_init()//PA0与EXTI_Line0连通
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // 管脚选择
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;// EXTI_Trigger_Rising
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = EXTI_Line0; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

int main(void)
{
gpio_init();
EXTI_init();
NVIC_Config();
while(1);
}
为什么外部中断服务函数进不去呢?


沙发
jjjkkk00| | 2014-1-2 15:52 | 只看该作者
NVIC_InitStructure.NVIC_IRQChannel = EXTI_Line0; //通道
这是什么?

这里应该写的是中断函数名,类似TIM1_IRQn;之类的。

使用特权

评论回复
板凳
杨爱林林| | 2014-1-2 15:59 | 只看该作者
stm32f10x.h里面有很明显的宏
你换成这个EXTI0_IRQn

1.jpg (181.92 KB )

1.jpg

使用特权

评论回复
地板
yang4469| | 2014-1-2 16:07 | 只看该作者
jjjkkk00 发表于 2014-1-2 15:52
这是什么?

这里应该写的是中断函数名,类似TIM1_IRQn;之类的。

楼主的线0的的地址也许是那样定义的,我的是这样
EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                */
不过没有看到楼主贴出中断程序的处理,EXTI0_IRQHandler,就是这个函数的处理

使用特权

评论回复
5
拿起书本| | 2014-1-3 15:05 | 只看该作者
看似正确。
仿真看下,没看到你的中断服务函

使用特权

评论回复
6
huangfeng33|  楼主 | 2014-1-4 20:29 | 只看该作者
void EXTI0_IRQHandler(void)
{
if( EXTI_GetITStatus(EXTI_Line0) != RESET )
{
EXTI_ClearITPendingBit(EXTI_Line0);

GPIO_SetBits(GPIOA , GPIO_Pin_2);
}  
}
这是中断服务函数,我硬件仿真过,进不来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝