STM8S001一直进外部中断

本文介绍了在STM8S001微控制器上遇到的外部中断一直触发的问题。作者首先展示了STM8S001最小系统电路图,并分享了尝试使用IO6作为外部中断输入时,发现系统不断进入中断的困境。尝试了修改中断宏、配置EXTI_PORT_GPIOB、在中断中关闭总中断等方法均未成功。最后发现IO6是IIC引脚,无内置上拉电阻,通过外加一个上拉电阻解决了问题。

STM8S001最小系统电路图

在这里插入图片描述
网上的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引脚,没有上拉功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值