『7x24小时有问必答』

有人问
我使用EXIT唤醒芯片,没什么没有触发中断,芯片却唤醒了?

写在前面

使用STM8S开发过上面类似功能的朋友应该会知道,STM8S的稳定性不如STM32,特别是在低功耗时,使用EXTI外部中断唤醒,很容易受到干扰信号而唤醒。因此,这种情况需在硬件电路上多加考虑抗干扰的电路

其次,就是注意软件的上下拉配置,如果外部加了上拉或下拉电阻,不建议再配置成上拉或下拉;如果没有,建议加上。要使其软件稳定,还得深入EXTI的功能。

为方便大家阅读,本文内容已经整理成PDF文件:
http://pan.baidu.com/s/1i5uWhJR

EXTI基础知识

STM8S的EXTI外部中断归属于GPIO一类,只需要将其IO配置成外部中断、使能全局中断、在中断入口函数添加相关的代码即可。

开启中断功能
用户可以在I/O引脚为输入模式时通过设置Px_CR2寄存器的相应位来配置某个I/O作为外部输入中断模式。在该配置下, I/O引脚上的一个信号沿或是低电平会产生一个中断请求。
在EXTI_CR[2:1]寄存器中对于每一个中断向量都可以独立编程为上升沿或下降沿触发。
外部中断只有在对应I/O口被设置为输入模式下才有效。

屏蔽中断功能
可以通过对Px_CR2寄存器的相应位进行编程来单独使能/关闭外部中断功能。复位后外部中断是关闭的。

提示:EXTI外部中断只有在IO输入模式下才有效,配置才输出模式,不能正常由外部触发中断。

软件工程源代码

1.关于工程

本文提供的工程代码是基于前面软件工程“STM8SA04UART基本收发数据”增加EXTI外部中断修改而来。初学的朋友可以参看我前面对应的基础文章,那些文章讲的比较详细。

2.EXTI引脚配置

我们尚且定义为按键KEY,浮动输入,中断模式。
#define KEY_GPIO_PORT   GPIOD
#define KEY_GPIO_PIN   GPIO_PIN_2
GPIO_Init(KEY_GPIO_PORT, (GPIO_Pin_TypeDef)KEY_GPIO_PIN, GPIO_MODE_IN_FL_IT);
  

3.EXTI中断配置

void EXTI_Configuration(void)
{
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_FALL_ONLY);
    EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY);
}
这个地方配置成下降沿中断,端口需对应引脚的端口

4.中断入口函数

#define KEY_READ      GPIO_ReadInputPin(KEY_GPIO_PORT, KEY_GPIO_PIN)

INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
   if(RESET == KEY_READ)
   {
      IT_Delay(50);                                       //延时消抖
      if(RESET == KEY_READ)       //确认按下
      {
         LED_REVERSE;                            //改变LED状态
      }
   }
}

提示:我们使用的GPIOD,入口需要对应。

下载

STM8S资料:
http://pan.baidu.com/s/1o7Tb9Yq

软件源代码工程两版本(STM8S-A09_EXTI外部中断):
http://pan.baidu.com/s/1c2EcRo0

提示:如果网盘链接失效,可以微信公众号“底部菜单”查看更新链接。

最后

微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码