概述
本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 使用外部中断EXTI进行驱动LED。 最近在弄ST和GD的课程,需要GD样片的可以加群申请:615061293 。
视频教学
https://www.bilibili.com/video/BV1Ld4y1i7pF/
csdn课程
课程更加详细。
https://download.csdn.net/course/detail/37152
生成例程
这里准备了自己绘制的开发板进行验证。
查看原理图,PB14为按键管脚。
LED管脚为PB7.
配置时钟树
配置时钟为64M。
中断口配置
GPIO 口连接到 16 个外部中断 / 事件线如下图 。可以看到PC13应该是在EXTI14上。
外部中断/事件控制器用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。
所以需要配置中断口是上升沿触发或者下降沿触发。
中断服务函数
配置完中断优先级之后,接着要做的就是编写中断服务函数。中断服务函数的名字是在 HAL 库中事先有定义的。
中断线 10-15 共用中断函数。一般情况下,我们可以把中断控制逻辑直接编写在中断服务函数中,但是 HAL 库把中断处理过程进行了简单封装。
GPIO配置
PA5为板上LED灯,配置PB7为输出口,当中断发生时候改变IO口极性。
配置中断优先级(NVIC),并使能中断
同样的,在mian.c的MX_GPIO_Init中,设置好中断线和 GPIO 映射关系,然后又设置好了中断的触发模式等初始化参数。既然是外部中断,涉及到中断我们当然还要设置 NVIC 中断优先级。 HAL_NVIC_SetPriority的中间0表示抢占优先级为0,最右边的0表示子优先级为0。
抢占优先级比子优先级的优先权更高,这意味抢占优先级更高的中断会先执行,而不管子优先级的优先权,数值越低优先级越高。
同理,如果抢占优先级相同,那么就会比较子优先级,子优先级更高的中断将会先被执行,数值越低优先级越高。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
EXTI15_10_IRQHandler
在stm32f0xx_it.c中,程序开始执行EXTI15_10_IRQHandler函数,EXTI15_10_IRQHandler函数只是调用了另一个函数HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
HAL_GPIO_EXTI_Callback
在stm32f1xx_hal_gpio.c中,HAL_GPIO_EXTI_IRQHandler该函数实现的作用非常简单,就是清除中断标志位,然后调用回调函数HAL_GPIO_EXTI_Callback()实现控制逻辑。根据函数名Callback也能看出来这里才是真正执行具体功能的函数,该函数需要在mian.c文件中重写,通过判断中断是来自哪个IO口编写相应的中断服务控制逻辑。
代码
在main.c中,重写HAL_GPIO_EXTI_Callback。
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == GPIO_PIN_14){/* KEY */
/* 翻转LED */
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_7);
}
}
/* USER CODE END 4 */
关键字:STM32CUBEMX GD32F303 外部中断 EXTI
引用地址:
STM32CUBEMX开发GD32F303(15)----外部中断EXTI
推荐阅读最新更新时间:2024-11-12 12:26
STM32CubeMX | 37 - 使用RS485总线进行双板通信(SP3485)
本篇详细的记录了如何使用STM32CubeMX配置 STM32F407ZGT6 使用 RS485 总线与另一个开发板之间通信。 0. RS485总线协议简述 RS485总线的特点及应用场合 RS-485 通讯协议由 RS-232 协议改进而来,将物理层改为了差分信号进行传输,所以具备抗干扰能力强、传输距离远的特点,广泛应用于噪声干扰较大的工业控制环境中。 RS485总线的物理层 RS485总线网络拓扑结构如图: 其中RS485收发器的作用是将普通TTL电平信号转换为差分信号,即总线每个时刻表达的逻辑由485-A和485-B的电平共同决定,属于半双工通信,判断逻辑为:当 AB 两线间的电压差为 -6V~-2V 时表示逻辑
[单片机]
stm32 外部中断知识介绍
中断分类 STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18: 线0~15:对应外部 IO口的输入中断。线16:连接到 PVD 输出。线17:连接到 RTC 闹钟事件。线18:连接到 USB 唤醒事件。 触发方式 :STM32 的外部中断是通过边沿来触发的,不支持电平触发。 外部中断分组: STM32 的每一个GPIO都能配
[单片机]
在STM32如何在我需要的时候关闭或打开外部中断EXTI
① EXTI- IMR &= ~(EXTI_Line1) 关闭了指定的外部 中断 ② EXTI- IMR |= EXTI_Line1 开启指定的外部中断
[单片机]
STM32CUBEMX开发GD32F303(11)----ADC在DMA模式下扫描多个通道
概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。 需要GD样片的可以加Q_QUN申请:6_15061293。 本章主要配置,双ADC轮询模式扫描多个通道,通过串口进行打印。 查阅手册可以得知,PA9、PA10为串口0的输出和输入口。 ADC通道配置 生成例程 这里准备了GD32303C_START开发板进行验证。 视频教学 https://www.bilibili.com/video/BV1hG41187Ah/ STM32CUBEMX配置 勾选中断。 ADC1配置。 ADCs_Common_Setti
[单片机]
s3c2440裸机-异常中断4-irq外部中断
我们回顾下中断产生前后的处理流程:详见异常、中断的原理与流程 中断前: 中断产生后: 问题案例: 我们想实现一个按键点灯程序,我们知道有以下两种方案: 1.轮询方案:轮询检测按键的电平状态,当检测到被按下后,对应的gpio会拉低,点亮对应的led;(略) 2.中断方案:将按键配置成外部中断源,当有按键按下,触发中断,在中断服务程序(isr)中去完成点灯。下面开始写代码: 一.中断初始化 1)中断源设置 我们用按键作为外部中断源,我们把按键对应的gpio配置成中断引脚,当按键按下,相应的gpio产生了电平跳变,就会触发外部中断。 我们想达到按下按键灯亮,松开按键灯灭这种效果(配成双边沿触发,按下的时候产生下降沿
[单片机]
C51单片机外部中断的触发方式
1. 电平触发方式 ○ CPU采样外部中断引脚电平 ○ 低电平,则硬件置1(IE=1) ○ 高电平,则硬件清0(IE=0) ○ 外部中断引脚的低电平要一直保持,直到CPU响应外部中断 ○ CPU响应中断后,会硬件将IE清0(IE=0),但是不会取消掉外部中断引脚的低电平,因此需要硬件加软件清除低电平(p133) 2. 下降沿触发方式 ○ CPU采样外部中断的引脚电平 ○ 如果上一个机器周期电平为高,下一个机器周期电平为低,则硬件置1(IE=1) ○ 等待CPU响应中断 ○ CPU响应中断,硬件清0(IE=0)
[单片机]
STM32入门学习之EXTI外部中断(STM32F030F4P6基于CooCox IDE)
下面的代码,是把PA0当做一个按键口,芯片内部上拉,按键闭合时,IO口被拉低,触发中断。 #include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_exti.h #include stm32_lib/inc/stm32f0xx_gpio.h #include stm32_lib/inc/stm32f0xx_syscfg.h #include stm32_lib/inc/stm32f0xx_misc.h int main(void) { //时钟使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPI
[单片机]
STM32外部中断(EXTI)分析和应用
本篇博文基于STM32F103ZET6芯片,与大多数STM32F10x芯片兼容; 代码基于ST官网提供的3.5.0标准库 如有不足之处,还望前辈多多指教; 一些需要了解的基础知识 STM32每个GPIO口都可以作为外部中断输入口使用 每个中断都设有状态位 每个中断/事件都有独立的触发和屏蔽设置。 STM32103有19个外部中断(但是供GPIO口使用的中断只有16个) 分别是: 0~15:对应外部中断IO的输入中断 16 : 连接到PVD输出 17 :连接到RTC闹钟时间 18 :连接到USB唤醒事件 这里会容易出现一个问题说:STM32F103ZET6的GPIO管脚一共有6*16即96个GPIO管脚,如何对应只有0~15
[单片机]