STM8S001一直进外部中断

STM8S001最小系统电路图

STM8S001一直进外部中断_第1张图片
网上的demo是使用IO7做按键外部中断,我测试没问题以下是主要代码
main里面:

   EXTI_Init();
  /* 使能总中断 */
  enableInterrupts();

子函数

void EXTI_Init(void)
{
  /* 初始化外部中断IO口 ,上拉输入并使能中断*/
  GPIO_Init(EXTI_GPIO_PORT, EXTI_GPIO_PINS, GPIO_MODE_IN_PU_IT);
  
  /* 设置外部中断端口C模式为下降沿触发 */
  EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
}

stm8s_it.c(注意不同IO口对应不同中断函数)

INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
   Delay(0x8fff);
  if ((GPIO_ReadInputData(EXTI_GPIO_PORT) & EXTI_GPIO_PINS) == 0x00)
  {
    GPIO_WriteReverse(LED1_GPIO_PORT, LED1_GPIO_PINS);
  }
}

上一章讲过,我要用的是TIM2的三个通道产生PWM,所以按键只能更换IO口,
我替换成 IO6,具体方法:
1.在宏修改IO口,
2.配置至外部中断模式 改为 EXTI_PORT_GPIOB
3.在GPIOB中断里添加按键检测

一直进入外不中断

修改完之后测试 ,debug发现一直进入中断,查询网络上的方法,
1.在中断中添加关闭总中断
逻辑是 进中断 - 消抖 - 检测 - 关闭总中断 - 处理数据
2. 在初始化中断之前,关闭总中断,初始化完成,在开启总中断。
以上我都试了但是没有解决问题,我的现象是只要用杜邦线连接io口另一端悬空就会不断进,用万用表测量时,搭上去也会进入中断,电压2.2V左右。
百思不解下,我配置的是上拉,外面又加了一个上拉然后问题就解决了。
原因:IO6 是IIC引脚,没有上拉功能。

你可能感兴趣的:(STM8)