有人问
我使用EXIT唤醒芯片,没什么没有触发中断,芯片却唤醒了?
Ⅰ写在前面
使用STM8S开发过上面类似功能的朋友应该会知道,STM8S的稳定性不如STM32,特别是在低功耗时,使用EXTI外部中断唤醒,很容易受到干扰信号而唤醒。因此,这种情况需在硬件电路上多加考虑抗干扰的电路。
其次,就是注意软件的上下拉配置,如果外部加了上拉或下拉电阻,不建议再配置成上拉或下拉;如果没有,建议加上。要使其软件稳定,还得深入EXTI的功能。
ⅡEXTI基础知识
STM8S的EXTI外部中断归属于GPIO一类,只需要将其IO配置成外部中断、使能全局中断、在中断入口函数添加相关的代码即可。
开启中断功能
在EXTI_CR[2:1]寄存器中对于每一个中断向量都可以独立编程为上升沿或下降沿触发。
外部中断只有在对应I/O口被设置为输入模式下才有效。
屏蔽中断功能
可以通过对Px_CR2寄存器的相应位进行编程来单独使能/关闭外部中断功能。复位后外部中断是关闭的。
提示:EXTI外部中断只有在IO输入模式下才有效,配置才输出模式,不能正常由外部触发中断。
Ⅲ软件工程源代码
1.关于工程
本文提供的工程代码是基于前面软件工程“STM8S-A04_UART基本收发数据”增加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
上一篇:浅谈STM8S_008_WDG独立看门狗和窗口看门狗
下一篇:STM8S_010_I2C读写EEPROM (硬件方式)
推荐阅读最新更新时间:2024-11-07 11:50
设计资源 培训 开发板 精华推荐
- MC34074ADR2G 高阻抗差分放大器的典型应用
- LT6654AMPS6-4.096 升压输出电流电压基准的典型应用
- TDA8932B D 类音频功率放大器的对称电源单声道 BTL 配置
- 基于GD32F350的简易计步器设计
- LT1086CT-12 高效双路线性电源的典型应用
- L5987 3 A 降压型开关稳压器的典型应用
- MC34074ADR2G 高输入阻抗差分放大器的典型应用
- EVAL-ADG901EB,ADG901 (SPST) 评估板是采用 CMOS 工艺的宽带开关
- SECO-RSL10-CAM-GEVB:RSL10 智能拍摄相机
- LT1993-4 的典型应用 - 900MHz 低失真、低噪声差分放大器 / ADC 驱动器 (AV = 4V/V)