打印

香主:STM32外部中断EXTI调试失败

[复制链接]
4229|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
daniel0504|  楼主 | 2010-10-19 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用万利开发板进行EXTI简单调试:设置PD3,PD4引脚作为中断输入端口,他们分别与板载按键KEY2,KEY3相连。设置好后主程序运行正常,可一旦按下KEY2或KEY3任何一个产生中断信号时,主程序死掉,中断也进不去!!

附EXTI设置源码:
**********************************************
主函数
***************
int main(void)
{
  
#ifdef DEBUG
  debug();
#endif
RCC_Configuration();      /* System Clocks Configuration */
GPIO_Configuration();     /* Configure the GPIO ports */
EXTI_Config();
NVIC_Configuration();     /* NVIC configuration */

while (1)
{..............}
****************************************************
GPIO端口设置
**************
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}
*************************************************
NVIC设置
*************
void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
  
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
***************************************************
EXTI设置
*************
void EXTI_Config(void)
{
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource4);
  EXTI_ClearITPendingBit(EXTI_Line3);
  EXTI_ClearITPendingBit(EXTI_Line4);
  EXTI_InitStructure.EXTI_Line = EXTI_Line3|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);
  EXTI_GenerateSWInterrupt(EXTI_Line3);
  EXTI_GenerateSWInterrupt(EXTI_Line4);

}
*****************************************************
调了两天了就是不行啊!!请香主,各大虾赐教!
沙发
IJK| | 2010-10-19 12:39 | 只看该作者
对应的中断函数程序也要写,并且在中断函数里清除EXTI中断标志位

使用特权

评论回复
板凳
jgphu| | 2010-10-19 13:14 | 只看该作者
按理说,就算你的中断进不去,也不会影响主程序啊。

使用特权

评论回复
地板
daniel0504|  楼主 | 2010-10-19 14:54 | 只看该作者
对应的中断函数程序写了。EXTI中断标志位也作了清除处理!
很郁闷!
按键产生了中断,但有进入不了中断子程序。

使用特权

评论回复
5
IJK| | 2010-10-19 15:46 | 只看该作者
关于EXTI,STM32有例子,建议先用那个例子跑一下。EXTI引脚不同没有关系,可以手动给它接低或者高电平

使用特权

评论回复
6
e_007| | 2010-10-19 17:49 | 只看该作者
本帖最后由 e_007 于 2010-10-19 18:01 编辑

x:) x

使用特权

评论回复
7
daniel0504|  楼主 | 2010-10-20 09:06 | 只看该作者
还是不行啊

使用特权

评论回复
8
vigia| | 2010-10-20 09:30 | 只看该作者
你板子的BOOT引脚连接的对不对?

使用特权

评论回复
9
daniel0504|  楼主 | 2010-10-20 17:32 | 只看该作者
已经解决啊,VECTORTAB区设置错误!

使用特权

评论回复
10
28182900| | 2011-6-22 20:00 | 只看该作者
什么意思?不说仔细点

使用特权

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

本版积分规则

4

主题

19

帖子

0

粉丝