我是靠谱客的博主 斯文发带,最近开发中收集的这篇文章主要介绍STM32单片机---外部中断一、ARM Cortex-M3 的中断体系二、代码思路函数接口中断优先级,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

外部中断

  • 一、ARM Cortex-M3 的中断体系
  • 二、代码思路
  • 函数接口
    • 1.为引脚选择使用哪个中断
    • 2.配置外部中断
    • 3.中断优先级配置
    • 4.获取外部中断状态
    • 5.清空外部中断标志位
  • 中断优先级
    • 1.概述
    • 2.抢占优先级与响应优先级区别

一、ARM Cortex-M3 的中断体系

1、定义
中断,意味着中途打断现在干的事情,要立即处理紧急的事件。
现实的例子:手机玩游戏的时候,突然来电话。在编程当中还常遇到实时接收数据的请求,都使用中断服务函数,示例如下:
在这里插入图片描述

多达 140 个 GPIO(STM32F405xx/07xx 和 STM32F415xx/17xx)通过以下方式连接到 16 个外部中断/事件线。
例如:PA0占用了EXTI0,其他PB0~PI0是不能使用的。
在这里插入图片描述
在这里插入图片描述

二、代码思路

1.8051单片机
外部中断的触发方式:低电平触发、下降沿触发 IT0=1
允许外部中断引脚申请中断请求 EX0=1
优先级的配置
中断服务函数

2.STM32
端口A硬件时钟使能
SYSCFG硬件时钟使能
配置引脚的工作模式
将引脚连接到外部中断

中断触发方式:电平触发、边沿触发
允许外部中断引脚申请中断请求
优先级的配置
中断服务函数

注:
中断服务函数是不能被调用,编写格式不能随意编写,这是它特有的存在形式。不同的硬件平台,其编写方法是不一样的。

函数接口

1.为引脚选择使用哪个中断

/**
  * @brief  Selects the GPIO pin used as EXTI Line.
  * @param  EXTI_PortSourceGPIOx : selects the GPIO port to be used as source for
  *          EXTI lines where x can be (A..K) for STM32F42xxx/43xxx devices, (A..I) 
  *          for STM32F405xx/407xx and STM32F415xx/417xx devices or (A, B, C, D and H)
  *          for STM32401xx devices.  
  *            
  * @param  EXTI_PinSourcex: specifies the EXTI line to be configured.
  *           This parameter can be EXTI_PinSourcex where x can be (0..15, except
  *           for EXTI_PortSourceGPIOI x can be (0..11) for STM32F405xx/407xx
  *           and STM32F405xx/407xx devices and for EXTI_PortSourceGPIOK x can   
  *           be (0..7) for STM32F42xxx/43xxx devices. 
  *             
  * @retval None
  */
void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)

2.配置外部中断

/**
  * @brief  Initializes the EXTI peripheral according to the specified
  *         parameters in the EXTI_InitStruct.
  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
  *         that contains the configuration information for the EXTI peripheral.
  * @retval None
  */
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)

3.中断优先级配置

/**
  * @brief  Initializes the NVIC peripheral according to the specified
  *         parameters in the NVIC_InitStruct.
  * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
  *         function should be called before. 
  * @param  NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
  *         the configuration information for the specified NVIC peripheral.
  * @retval None
  */
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

4.获取外部中断状态

/**
  * @brief  Checks whether the specified EXTI line is asserted or not.
  * @param  EXTI_Line: specifies the EXTI line to check.
  *          This parameter can be EXTI_Linex where x can be(0..22)
  * @retval The new state of EXTI_Line (SET or RESET).
  */
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)

5.清空外部中断标志位

/**
  * @brief  Clears the EXTI's line pending bits.
  * @param  EXTI_Line: specifies the EXTI lines to clear.
  *          This parameter can be any combination of EXTI_Linex where x can be (0..22)
  * @retval None
  */
void EXTI_ClearITPendingBit(uint32_t EXTI_Line)

中断优先级

中断优先级的一个意义:出现多个中断同时触发,但是不能同时处理,所以先后顺序之分,要根据实际上的运行环境优先处理重要的中断。

1.概述

STM32 对中断优先级进行分组,共 5 组,组 0~4,这些分组是用于指定当前M3支持多少个抢占优先级和多少个响应优先级。同时,对每个中断设置一个抢占优先级和一个响应优先级。函数原型如下:

/**
  * @brief  Configures the priority grouping: pre-emption priority and subpriority.
  * @param  NVIC_PriorityGroup: specifies the priority grouping bits length. 
   *     @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority    //不支持抢占优先级
  *                                4 bits for subpriority             //支持16个响应优先级
  *     @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority    //支持2个抢占优先级
  *                                3 bits for subpriority             //支持8个响应优先级
  *     @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority    //支持4个抢占优先级
  *                                2 bits for subpriority             //支持4个响应优先级
  *     @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority    //支持8个抢占优先级
  *                                1 bits for subpriority             //支持2个响应优先级
  *     @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority    //支持16个抢占优先级
  *                                0 bits for subpriority             //不支持响应优先级
  * @retval None
  */

2.抢占优先级与响应优先级区别

1)高抢占优先级是可以打断正在进行的低抢占优先级的中断。抢占优先级若相同,则不会出现抢占的过程。
在这里插入图片描述

2)抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
在这里插入图片描述

3)抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
在这里插入图片描述

4)抢占优先级相同且响应优先级相同的中断,假如同时发生,会按照硬件内部固定的优先级执行,如下图。表中为互联型产品的向量表、其他类型成品可查找stm32中文参考手册

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5)无论是抢占优先级还是响应优先级,优先级数值越小,就代表优先级越高。

最后

以上就是斯文发带为你收集整理的STM32单片机---外部中断一、ARM Cortex-M3 的中断体系二、代码思路函数接口中断优先级的全部内容,希望文章能够帮你解决STM32单片机---外部中断一、ARM Cortex-M3 的中断体系二、代码思路函数接口中断优先级所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部