OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5474|回复: 10

外部中断的问题- -

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-3-27
在线时间
0 小时
发表于 2014-6-4 21:07:53 | 显示全部楼层 |阅读模式
5金钱
4个IO口(PB0-3)接入4个外部中断(PC0-3)  4个外部中断在GROUP3 ; 出发方式是上升沿触发  我打算用GPIOB的电平输出变化来制造上升沿;触发外部中断通过串口分别发送“0x31 0x32 0x33  0x34”  
PC0和PC1的先占优先级2 PC0的从是1 PC1是0
PC2和PC3的先占是1  C2从是1 PC3从是0; PC0中断 1S发送一次 PC1  2S发送一次  C2  4S发送  C3 8S发送;
但现在的问题是串口只是一直发送“11111111111” 也就是一直触发外部中断0线。。。求教怎么回事。。。下面是我的外部中断函数和定时器TIM2(用于延时的并且定时器中断内发生电平变化)
void TIM2_IRQHandler(void)
{
   u8 x=0;
    if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
   {
      x++;
      if(x==1||x==3||x==5||x==7)
     {
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
        delay_ms(50);
        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
     }
     if(x==2||x==6)
    {
         GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_0);
         delay_ms(50);
         GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_0);
        TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
    }
     if(x==4)
     {
         GPIO_SetBits(GPIOB,GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0);
         delay_ms(50);
         GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
         TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
     }
     if(x==8)
     {
         x=0;
         GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0);
         delay_ms(50);
         GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4);
         TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
     }

  }
}
//外部中断函数
void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)
    {
       USART_SendData(USART1,0x31);
    }
    EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI1_IRQHandler(void)
{
       if(EXTI_GetITStatus(EXTI_Line1) != RESET)
       {
          USART_SendData(USART1,0x32);
        }
       EXTI_ClearITPendingBit(EXTI_Line1);

}
void EXTI2_IRQHandler(void)
{
      if(EXTI_GetITStatus(EXTI_Line2) != RESET)
     {
         USART_SendData(USART1,0x33);
      }
     EXTI_ClearITPendingBit(EXTI_Line2);

}
void EXTI3_IRQHandler(void)
 {
        if(EXTI_GetITStatus(EXTI_Line3) != RESET)
        {
            USART_SendData(USART1,0x34);
        }
       EXTI_ClearITPendingBit(EXTI_Line3);
}


最佳答案

查看完整内容[请看2#楼]

回复【10楼】正点原子: --------------------------------- 原子哥,问题解决了,是其他地方还有一些小的疏忽,现在都解决了,下次会仔细一点,不这么马虎了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-6-4 21:07:54 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥,问题解决了,是其他地方还有一些小的疏忽,现在都解决了,下次会仔细一点,不这么马虎了
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-6-4 21:30:48 | 显示全部楼层
为什么其他中断进不去了呢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-4 23:08:24 | 显示全部楼层
检查下PC0的波形....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-6-5 11:58:24 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
PC0?  C是外部中断线的接口  我设置的是输入   B是输出 现在PB的输出都有高低变化   但是串口一直输出“11111111111111”  就是他只进中断线0.....这是为什么啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-6 00:38:26 | 显示全部楼层
回复【4楼】mzh2630:
---------------------------------
就是PC0的电平。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-6-6 14:04:18 | 显示全部楼层
原子哥,我的中断也进不去,我也是用PC0口接了一个按键,按键外部接的上拉电阻,按照示例程序进行了:IO口设置、开了IO口复用时钟、中断触发方式是下降沿触发、中断分组,这些都设置了,可就是进不去中断,单步仿真时死在while那里,停下来就停在startup_stm32f10x_hd.s中的“B.”这里,不知道问题究竟出在哪里。
用万用表测PC0的电平也是正常的,按键不按下时是高电平,按下后是低电平。
请原子哥支招!
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-6-6 14:06:00 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,我的中断也进不去,我也是用PC0口接了一个按键,按键外部接的上拉电阻,按照示例程序进行了:IO口设置、开了IO口复用时钟、中断触发方式是下降沿触发、中断分组,这些都设置了,可就是进不去中断,单步仿真时死在while那里,停下来就停在startup_stm32f10x_hd.s中的“B.”这里,不知道问题究竟出在哪里。 
用万用表测PC0的电平也是正常的,按键不按下时是高电平,按下后是低电平。 
请原子哥支招
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-6 23:16:32 | 显示全部楼层
回复【7楼】小崔:
---------------------------------
听在B.这种地方,说明你的中断服务函数,可能有问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-6-7 09:02:02 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
嗯,确实是有问题,函数应该是void EXTI0_IRQHandler(void),可我把handler的r丢掉了没有写,后来改过之后,仿真不会停在B.处,但是会死在while那儿,还是进不去中断处理函数
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-8 00:14:25 | 显示全部楼层
回复【9楼】小崔:
---------------------------------
你在中断里面设置个断点,试试看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 11:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表