stm8s单片机(二)外部中断实验

embedded/2025/1/23 18:19:37/

中断优先级

stm8的中断优先级不是固定不变的,stm8的中断分为硬件优先级与软件优先级;当多个中断发生时,cpu会先响应软件优先级高的中断,若软件优先级相同会先响应硬件优先级高的;

其中软件优先级有四个

/*** @brief  ITC Priority Levels selection*/
typedef enum {ITC_PRIORITYLEVEL_0 = (uint8_t)0x02, /*!< Software priority level 0 (cannot be written) */ITC_PRIORITYLEVEL_1 = (uint8_t)0x01, /*!< Software priority level 1 */ITC_PRIORITYLEVEL_2 = (uint8_t)0x00, /*!< Software priority level 2 */ITC_PRIORITYLEVEL_3 = (uint8_t)0x03  /*!< Software priority level 3 */
} ITC_PriorityLevel_TypeDef;

例子:

ITC_SetSoftwarePriority(ITC_IRQ_PORTE,ITC_PRIORITYLEVEL_2 );

外部中断

stm8的所有io引脚都有外部中断能力;
在这里插入图片描述

IAR的中断处理声明

在固件库stm8s.h中可以找到这样一段代码

#ifdef _IAR_#define STRINGVECTOR(x) #x#define VECTOR_ID(x) STRINGVECTOR( vector = (x) )#define INTERRUPT_HANDLER( a, b )  \_Pragma( VECTOR_ID( (b)+2 ) )        \__interrupt void (a)( void )#define INTERRUPT_HANDLER_TRAP(a) \_Pragma( VECTOR_ID( 1 ) ) \__interrupt void (a) (void)  
#endif /* _IAR_ */

例子:

INTERRUPT void EXTI_PORTE_IRQHandler(void);INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{if(KEY1==0){delay_ms(20);while(KEY1==0);LED1_TOGGLE;}if(KEY2==0){delay_ms(20);while(KEY2==0);LED2_TOGGLE;	}
}

外部中断灵敏性(触发方式)

/*** @brief  EXTI Sensitivity values for PORTA to PORTE*/
typedef enum {EXTI_SENSITIVITY_FALL_LOW  = (uint8_t)0x00, /*!< Interrupt on Falling edge and Low level */EXTI_SENSITIVITY_RISE_ONLY = (uint8_t)0x01, /*!< Interrupt on Rising edge only */EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */EXTI_SENSITIVITY_RISE_FALL = (uint8_t)0x03  /*!< Interrupt on Rising and Falling edges */
} EXTI_Sensitivity_TypeDef;

Falling edge 是下降沿
Rising edge 是上升沿

使用例子:

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);

实验程序

使用一个GPIO来作外部中断有这几个步骤

  1. GPIO_Init
  2. EXTI_SetExtIntSensitivity
  3. ITC_SetSoftwarePriority
  4. INTERRUPT_HANDLER 定义中断处理
  5. enableInterrupts
#include "stm8s_gpio.h"
#include "stm8s_itc.h"
#include "stm8s_exti.h"bool pinn = FALSE;
void delay(uint32_t delayTime);int main(void)
{disableInterrupts();GPIO_Init(GPIOA, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);GPIO_Init(GPIOE, GPIO_PIN_6, GPIO_MODE_IN_PU_IT);EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);ITC_SetSoftwarePriority(ITC_IRQ_PORTE, ITC_PRIORITYLEVEL_3);if (pinn == TRUE){GPIO_WriteLow(GPIOA, GPIO_PIN_4);}else{GPIO_WriteHigh(GPIOA, GPIO_PIN_4);}enableInterrupts();while (1){}
}void delay(uint32_t delayTime)
{while (delayTime--);
}INTERRUPT void EXTI_PORTE_IRQHandler(void);INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{BitStatus status;status = GPIO_ReadInputPin(GPIOE, GPIO_PIN_6);if (status == RESET){pinn = !pinn;if (pinn == TRUE){GPIO_WriteLow(GPIOA, GPIO_PIN_4);}else{GPIO_WriteHigh(GPIOA, GPIO_PIN_4);}}
}

http://www.ppmy.cn/embedded/156363.html

相关文章

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

JAVA实战开源项目:课程作业管理系统(Vue+SpringBoot) 附源码

本文项目编号 T 023 &#xff0c;文末自助获取源码 \color{red}{T023&#xff0c;文末自助获取源码} T023&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Java中面向对象的面试试题及答案解析

Java 的面向对象是一种编程思想&#xff0c;它将现实世界的事物抽象为“对象”&#xff0c;并通过类和对象来实现对数据的封装和行为的定义。以下是关于 Java 面向对象的具体解释&#xff1a; 基本概念 对象&#xff1a;是程序中的基本构建块&#xff0c;表示现实世界中的实体或…

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…

数据库clickhouse如何进行数据导入导出

导入数据&#xff1a; 使用clickhouse-client工具导入数据&#xff0c;可以使用--query选项执行SQL语句&#xff0c;或者使用--file选项从文件中读取数据。例如&#xff0c;从CSV文件中导入数据&#xff1a; clickhouse-client --query"INSERT INTO my_table FORMAT CSV…

PAT甲级-1014 Waiting in Line

题目 题目大意 一个银行有n个窗口&#xff0c;每个窗口最多站m个人&#xff0c;其余人在黄线外等候。假设k个人同时进入银行按先后次序排队&#xff0c;每个人都有相应的服务时间。每个顾客都选择最短队列站&#xff0c;如果有多个相同长度的队列&#xff0c;按序号小的站。给…

创建一个Spring Boot项目

文章目录 一、如何创建一个Spring Boot项目 1.1 项目创建&#xff1a;专业版 or 社区版 or 网站创建1.2 数据配置1.3 项目启动1.4 代码编写 二、Spring Boot 项目文件介绍三、Web服务器四、根据HTTP状态码解决bug 4.1 4044.2 500 五、Spring VS Spring Boot VS Spring Web MVC…

【大模型】ChatGPT 高效处理图片技巧使用详解

目录 一、前言 二、ChatGPT 4 图片处理介绍 2.1 ChatGPT 4 图片处理概述 2.1.1 图像识别与分类 2.1.2 图像搜索 2.1.3 图像生成 2.1.4 多模态理解 2.1.5 细粒度图像识别 2.1.6 生成式图像任务处理 2.1.7 图像与文本互动 2.2 ChatGPT 4 图片处理应用场景 三、文生图操…