nodense 发表于 2018-4-6 11:51:39

STM32F103外部中断没有响应

本帖最后由 nodense 于 2018-4-6 11:56 编辑

配置了PF5引脚作为外部中断触发源,按键按下的时候监测到管脚为低电平 串口能正常收到主函数发来的数据但是电机始终没有改变转动方向中断函数的串口数据也没有输出到电脑上,说明中断没有进入(即使去掉了EXTI_Line5的判断,串口依然没有收到数据)反复对比了例程   一直找不出原因。。。
void KEY_Init()
{
      GPIO_InitTypeDef GPIO_InitStr;
      EXTI_InitTypeDef EXTI_InitStr;
      NVIC_InitTypeDef NVIC_InitStr;

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
      
      GPIO_InitStr.GPIO_Mode = GPIO_Mode_IPU;
      GPIO_InitStr.GPIO_Pin = GPIO_Pin_5;
      GPIO_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOF,&GPIO_InitStr);
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOF,GPIO_PinSource5);
      
      EXTI_InitStr.EXTI_Line = EXTI_Line5;
      EXTI_InitStr.EXTI_LineCmd = ENABLE;
      EXTI_InitStr.EXTI_Mode = EXTI_Mode_Interrupt;
      EXTI_InitStr.EXTI_Trigger = EXTI_Trigger_Falling;
      EXTI_Init(&EXTI_InitStr);
      
      NVIC_InitStr.NVIC_IRQChannel = EXTI9_5_IRQn;
      NVIC_InitStr.NVIC_IRQChannelCmd=ENABLE;
      NVIC_InitStr.NVIC_IRQChannelPreemptionPriority=2;
      NVIC_InitStr.NVIC_IRQChannelSubPriority = 2;
      NVIC_Init(&NVIC_InitStr);
}

volatile u8 dir=0;

void EXTI9_5_IRQHandler(void)
{
      delay_ms(10);
      if(EXTI_GetITStatus(EXTI_Line5))
      {
                printf("\r\n This is External Interrupt \r\n");
                dir=!dir;
      
      }
      EXTI_ClearITPendingBit(EXTI_Line5);
}

int main(void)
{
      
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      uart_init(115200);
      delay_init();
      KEY_Init();
      MOT_Init();
      while(1)
      {
                if(dir)
                {
                        printf("\r\n Positice DIR \r\n");
                        MOT_Run(1000);
                }
                else
                {
                        printf("\r\n Negative DIR \r\n");
                        MOT_Run(-1000);
                }
      }
}



toofree 发表于 2018-4-6 22:49:02

前两天刚有人遇到此问题,你这也是用的原子的程序吧。
不进中断关键是少了一条指令,EXTI_InitStructure.EXTI_LineCmd = ENABLE;

请参考我的回复 。(下面两个链接不一样,都看看)
https://www.stmcu.org.cn/module/foru ... 3184&fromuid=307297

https://www.stmcu.org.cn/module/foru ... 3334&fromuid=307297

nodense 发表于 2018-4-6 23:08:14

toofree 发表于 2018-4-6 22:49
前两天刚有人遇到此问题,你这也是用的原子的程序吧。
不进中断关键是少了一条指令,EXTI_InitStructure.EX ...

实际上。。我贴的代码写了。。可以回去看一看。另外,我今天把这段代码换成了别的IO口,发现可以用。
但是PF5上面也可以测出电平变化,可就是没进入中断。 我用的是RCT6,数据手册也看了,没有发现什么明显的线索,让我觉得很奇怪
就是想知道是不是PF5被什么占用了(我只在这里写了关于PF5的代码,其他地方都没有)

toofree 发表于 2018-4-6 23:17:45

本帖最后由 toofree 于 2018-4-6 23:19 编辑

nodense 发表于 2018-4-6 23:08
实际上。。我贴的代码写了。。可以回去看一看。另外,我今天把这段代码换成了别的IO口,发现可以用。
但 ...
那你就单测PF5中断功能吧。
上面链接中有我的测试程序,把管脚改一下。
总之一句话,不要太相信非官方的程序,去试试官方的标准函数库和HAL库下的样例程序,基本你的问题大多都能解决。

nodense 发表于 2018-4-7 21:31:39

toofree 发表于 2018-4-6 23:17
那你就单测PF5中断功能吧。
上面链接中有我的测试程序,把管脚改一下。
总之一句话,不要太相信非官方的程 ...

好的谢谢

feixiang20 发表于 2018-4-8 02:47:29

论坛里有很多类似的帖子可以参考啊,看看系统固件库,BitAction,时钟设置等,找找原因。
比如https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=605972&fromuid=2091055

xmshao 发表于 2018-4-8 14:57:04

1, 检查下是否有其它地方跟该脚有重复定义的地方;
2、确认下你的启动文件是否用对了,尤其是从别的型号移植过来时,不然容易发生矢量表位置对应的函数张冠李戴;

dataozi 发表于 2018-4-9 09:21:25

不要设置上拉输入模式,换成浮动输入模式,GPIO

select326 发表于 2018-4-9 09:42:29

我看原子的程序中,都是先初始化delay_init();,再执行 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

这个会不会有什么影响呀?      
页: [1]
查看完整版本: STM32F103外部中断没有响应