STM32
直播中

YYXIAO

9年用户 1238经验值
擅长:接口/总线/驱动
私信 关注
[问答]

求助,关于STM8S103外部中断问题求解

下面程序当用外部触发按键触发外部中断工作正常,但是当接一个霍尔传感器输出去触发时,只要接上霍尔传感器(在示波器上看没有任何电平变化),不管是否有触发都一直在中断。而且这时全局中断都还没有开启。请教大家是否也遇到同样的问题?
void SensorIn_conf(void)

{
   PB_DDR_DDR4  = 0;          /* 设置数据方向寄存器 1为输出,0为输入--查看STM8寄存器.pdf P87 */         
   PB_CR1_C14 = 0;            /* 设置0 悬浮输入  1 上拉输入--查看STM8寄存器.pdf P88 */        
   //PB_CR2_C24 = 1;            /* 设置PB4中断输入 STM8寄存器.pdf P89 */  
   PB_CR2_C24 = 0;            /* 设置PB4悬浮输入 STM8寄存器.pdf P89 */  
   
   PB_DDR_DDR5  = 0;          /* 设置数据方向寄存器 1为输出,0为输入--查看STM8寄存器.pdf P87 */         
   PB_CR1_C15 = 0;            /* 设置0 悬浮输入  1 上拉输入--查看STM8寄存器.pdf P88 */           
   PB_CR2_C25 = 1;            /* PB4中断输入 STM8寄存器.pdf P89 */      
   //PB_CR2_C25 = 0;            /* PB4悬浮输入 STM8寄存器.pdf P89 */      
  
   EXti_CR1  = (uint8_t)(~MASK_EXTI_CR1_PBIS);     //#define MASK_EXTI_CR1_PBIS       0x0C
   //EXTI_CR1 |= (uint8_t)((uint8_t)(0x03) << 4);   /*设置为上升沿和下降沿触发触发中断*/
   EXTI_CR1 |= (uint8_t)((uint8_t)(0x01) << 4);   /*设置为上升沿和下降沿触发触发中断*/
   //EXTI_CR1 = 0x0c;
}
/*
00:下降沿和低电平触发
01:仅上升沿触发
10:仅下降沿触发
11:上升沿和下降沿触发
*/
#pragma vector=6
__interrupt void EXTI_PORTB_IRQHandler(void)
{
   //PD_ODR_ODR2 = ~PD_ODR_ODR2;  
  PD_ODR_ODR2 = 1;  
}


int main(void)
{
   disableInterrupts();        //关中断
    SensorIn_conf();        //
   driver_ini();            //在这设置断点,只要打开了外部中断(SensorIn_conf();)程序就一直执行(EXTI_PORTB_IRQHandler),跑不到这里
   sys_ini();
   enableInterrupts();      //开中断

回帖(1)

张健

2024-5-16 18:05:36
为了解决您遇到的问题,我们需要逐步检查以下几个方面:

1. 确保霍尔传感器的连接正确:请检查霍尔传感器的VCC、GND和输出引脚是否正确连接到STM8S103的相应引脚上。

2. 检查霍尔传感器的输出电平:使用示波器或逻辑分析仪检查霍尔传感器的输出电平,确保其在触发时能够产生清晰的高低电平变化。

3. 配置外部中断:要使用外部中断,您需要配置相应的外部中断引脚(例如PB4)以及中断优先级。以下是配置外部中断的示例代码:

```c
void ExtInt_conf(void) {
    PB_DDR_DDR4 = 0; // 设置PB4为输入
    PB_CR1_C14 = 0; // 设置PB4为模拟输入

    ITC_IRQ_PRIORITY = 0x03; // 设置中断优先级
    ITC_SPR1_SPRX4 = 0x80; // 设置外部中断4(PB4)的优先级

    CR_HAEN = 1; // 启用高电平触发
    CR_HPOL = 0; // 触发电平为低电平
    CR_EDGE = 1; // 边沿触发

    EICRA = 0x01; // 启用外部中断4(PB4)
    EIMSK = 0x01; // 使能外部中断4(PB4)

    sei(); // 开启全局中断
}
```

4. 实现外部中断服务程序:在您的代码中实现外部中断服务程序,以便在触发外部中断时执行相应的操作。

```c
ISR_HANDLER(EXT_INT4_vect) {
    // 在这里实现中断处理逻辑
}
```

5. 检查霍尔传感器与STM8S103之间的干扰:如果霍尔传感器与STM8S103之间的距离过近,可能会产生电磁干扰,导致误触发。尝试增加它们之间的距离,或者在它们之间添加屏蔽措施。

6. 检查电源和地线:确保霍尔传感器和STM8S103的电源和地线连接正确,避免电源干扰。

按照以上步骤进行排查和调整,应该能够解决您遇到的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分