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

news/2025/1/26 11:09:49/

中断优先级

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/news/1565964.html

相关文章

我的2024年年度总结

序言 在前不久&#xff08;应该是上周&#xff09;的博客之星入围赛中铩羽而归了。虽然心中颇为不甘&#xff0c;觉得这一年兢兢业业&#xff0c;每天都在发文章&#xff0c;不应该是这样的结果&#xff08;连前300名都进不了&#xff09;。但人不能总抱怨&#xff0c;总要向前…

大模型GUI系列论文阅读 DAY4续:《Large Language Model Agent for Fake News Detection》

摘要 在当前的数字时代&#xff0c;在线平台上虚假信息的迅速传播对社会福祉、公众信任和民主进程构成了重大挑战&#xff0c;并影响着关键决策和公众舆论。为应对这些挑战&#xff0c;自动化假新闻检测机制的需求日益增长。 预训练的大型语言模型&#xff08;LLMs&#xff0…

QModbusTCPClient 服务器断开引起的程序崩溃

最近使用QModbusTCPClient 与一套设备通信&#xff0c;有一个QTimer频繁的通过读取设备寄存器。程序运行良好&#xff0c;但是有个问题&#xff1a;正常进行中设备断电了&#xff0c;整个程序都会崩溃。解决过程如下&#xff1a; 1.失败方案一 在QModbusTCPClient的errorOccu…

Leetcode2218:从栈中取出 K 个硬币的最大面值和

题目描述&#xff1a; 一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币。 每一次操作中&#xff0c;你可以从任意一个栈的 顶部 取出 1 个硬币&#xff0c;从栈中移除它&#xff0c;并放入你的钱包里。 给你一个列表 piles &#xff0c;其中 piles[i] 是一…

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…

Vue前端框架概述

Vue前端框架 Vue.js是一款用于构建用户界面的轻量级、渐进式JavaScript框架。它基于标准HTML、CSS和JavaScript构建&#xff0c;并提供了一套声明式的、组件化的编程模型。Vue以其简洁的语法、高效的性能以及强大的生态系统&#xff0c;在现代前端开发领域迅速崛起&#xff0c…

# [0114] Task01 《数学建模导论》P1 解析几何与方程模型

链接&#xff1a;https://www.datawhale.cn/activity/124 整理的相关代码库 GitHub 页面链接 绪论 姜启源&#xff1a;“数学建模就是建立数学模型解决实际问题” 本质还是解应用题&#xff0c;只是曾经的“小明买糖”变成了如今的“嫦娥探月”。 SEIR 模型&#xff0c;也…

MySQL面试题2025 每日20道【其三】

一、为什么在 MySQL 中不推荐使用多表 JOIN&#xff1f; 在MySQL中&#xff0c;不推荐使用多表JOIN的原因主要包括性能、可读性和维护性方面的问题&#xff1a; 性能问题&#xff1a; 笛卡尔积&#xff1a;当执行JOIN操作时&#xff0c;MySQL会创建一个临时的结果集。如果涉及…