STM32
直播中

贾伟刚

7年用户 1574经验值
私信 关注
[问答]

STM8 SET后发现中断实现不了,为什么?

我就用了EXti一个外设。发现在中断函数里写了条中断确认语句 ==SET后发现中断实现不了。删除==SET。或者改成!=RESET就可以了。这是为什么啊?十分困惑。求解答

回帖(1)

张莉

2024-5-7 17:34:09
在STM8微控制器中,中断功能是通过外部中断(EXTI)实现的。当外部事件发生时,如GPIO引脚的电平变化,微控制器会触发相应的中断。在中断服务程序(ISR)中,需要对中断标志位进行确认,以清除中断请求并允许再次触发中断。

根据您的描述,您在中断函数中使用了类似于 `==SET` 的语句,这可能导致了问题。在STM8中,中断标志位通常是一个位字段,需要使用位操作来检查和清除。以下是一些可能的原因和解决方案:

1. **语法错误**:在STM8的寄存器操作中,通常使用位操作符(如 `&` 和 `|`)来检查和修改位。`==SET` 这样的表达式可能不是STM8汇编语言或C语言中的正确语法。

2. **中断标志位未清除**:在中断服务程序中,需要清除中断标志位以允许再次触发中断。如果您使用了 `==SET`,可能没有正确地清除标志位,导致中断无法再次触发。正确的做法是使用位操作来清除标志位,例如:`EXTI_CR1 &= ~EXTI_CR1_PIN;`。

3. **中断优先级问题**:STM8微控制器支持中断优先级,如果其他中断的优先级高于您的EXTI中断,可能会导致您的中断服务程序无法被调用。请检查您的中断优先级设置,确保EXTI中断具有合适的优先级。

4. **硬件问题**:如果上述软件方面的问题都排除了,那么可能是硬件连接或配置存在问题。请检查您的GPIO引脚配置、上拉/下拉电阻设置等,确保硬件连接正确。

综上所述,您需要检查以下几点:

- 确保使用正确的位操作来检查和清除中断标志位。
- 检查中断优先级设置,确保EXTI中断具有合适的优先级。
- 检查硬件连接和配置,确保GPIO引脚等设置正确。

希望这些信息能帮助您解决问题。如果您能提供更详细的代码和硬件配置信息,我将更好地帮助您。
举报

更多回帖

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