STM8单片机外部中断工作原理、相关寄存器、代码功能实现详解

STM8单片机教程-07  外部中断-上升沿&下降沿

 

注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。

注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。

 

一 本节课的目标:

  • 掌握单片机的外部中断功能
  • 按键外部外部检测功能
  • 实验:通过中断方式完成按键检测功能

 

二 硬件介绍:

 

 三 外部中断的原理

外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的单片机将迫使暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去.

举例:

为了更好的理解外部中断:我们举个例子:  今天上班我的主要工作是要完成一个 电路板的设计,如果没有外部影响的话,我就只需要做这个工作就OK了。  突然,你的领导或者老板,中间让你去见一下客户。  中断了当前的工作,和客户沟通完之后,我回来之后接着当前的继续干。

再这个过程中我们要分析几个细节:

  • 是你的领导 或者你的老板,而不是其他的人。
  • 老板找你,就要中断当前的工作         
  • 去陪客户
  • 赔完客户后,会回去接着干之前没有干完的工作。

void main(void)

{

     system_init();

     while(1)

     {

         led1_open();

         delay_1s();

         led1_close();

         delay_1s();

     }

}

INTERRUPT_HANDLER(EXTI0_IRQHandler, 8)

{

      INTERTUPTE Task 

}

 

四 相关寄存器的介绍 和工作机制分析(了解)

通过视频学习

 

五  官方提供的外部中断的例程

1.官方提供的例程:

2.移植官方例程。

3.打开工程,简单查看例程:

①STM8单片机中断的总结:

  • PA   PB  PC PD 都支持外部中断功能(和51有区别,51是指定的端口)
  • PA0 PB0 PC0 PD0 占用一个通道。  

②外部中断初始化

  • GPIO端口初始化成输入中断模式
  • 打开端口中断
    • 支持上升沿,下降沿。
  • 打开总中断
  • 完善中断服务函数代码

 

六  结合寄存器 了解外部中断的库函数:(了解)

查看外部中断的库文件。如下图:

void EXTI_DeInit(void);

void EXTI_SetPortSensitivity(EXTI_Port_TypeDef EXTI_Port,EXTI_Trigger_TypeDef EXTI_TriggerValue);

void EXTI_SetPinSensitivity(EXTI_Pin_TypeDef EXTI_PinNum, EXTI_Trigger_TypeDef EXTI_TriggerValue);

void EXTI_SetHalfPortSelection(EXTI_HalfPort_TypeDef EXTI_HalfPort, FunctionalState NewState);

EXTI_Trigger_TypeDef EXTI_GetPortSensitivity(EXTI_Port_TypeDef EXTI_Port);

EXTI_Trigger_TypeDef EXTI_GetPinSensitivity(EXTI_Pin_TypeDef EXTI_PinNum);

FunctionalState EXTI_GetHalfPortSelection(EXTI_HalfPort_TypeDef EXTI_HalfPort);

ITStatus EXTI_GetITStatus(EXTI_IT_TypeDef EXTI_IT);

void EXTI_ClearITPendingBit(EXTI_IT_TypeDef EXTI_IT);

 

七 实现代码

1.实现效果:

通过外部中断检测按键,按键SW3按下LED2 亮  SW4按下LED灭

 

2.代码实现:

复制上节课的例程代码,并修改名称位  ”演示例程-外部中断”,如下图:

打开工程,编译main.c 函数。代码如下:

屏蔽stm8l10x_it.c  中外部中断1  外部中断4 的中断服务函数

 

#include “stm8l10x.h”

#define LED_GPIO_PORT  GPIOA

#define LED_GPIO_PINS  GPIO_Pin_3

#define SW3_GPIO_PORT  GPIOC

#define SW3_GPIO_PINS  GPIO_Pin_4

#define SW4_GPIO_PORT  GPIOC

#define SW4_GPIO_PINS  GPIO_Pin_1

void Delay(uint16_t nCount)

{

    while (nCount != 0)

    {

        nCount–;

    }

}

void main(void)

{

    GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);

    GPIO_Init(SW3_GPIO_PORT, SW3_GPIO_PINS, GPIO_Mode_In_PU_IT);

    GPIO_Init(SW4_GPIO_PORT, SW4_GPIO_PINS, GPIO_Mode_In_FL_IT);

    EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling_Low);

    EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Falling_Low);   

    enableInterrupts();

    GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);  

    while (1)

    {  

    }

}

INTERRUPT_HANDLER(EXTI1_IRQHandler, 9)

{

  EXTI_ClearITPendingBit(EXTI_IT_Pin1);

  GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PINS);

}

INTERRUPT_HANDLER(EXTI4_IRQHandler, 12)

{

  EXTI_ClearITPendingBit(EXTI_IT_Pin4);

  GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);

}

 

七 功能测试

  实验需要的器材: 

  和上节课一样,这里不再介绍

  测试效果:

    功能测试正常.  通过视频课程演示。

 

 

本节课到此结束。

给TA买糖
共{{data.count}}人
人已赞赏
单片机百科单片机自学指南

STM8单片机GPIO口输入、按键检测、代码功能实现详解

2023-5-25 11:57:36

单片机百科单片机自学指南

STM8定时器工作原理、相关寄存器、代码功能实现详解

2023-5-25 14:41:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧