STM32按键中断(HAL库版)
本文将介绍如何使用STM32F4的IO口作为中断触发源,通过串口显示按键被按下的日志。
1.运用到的资源、工具:
1.1开发板芯片STM32F407,PI9作为外部中断源、USART3串口向屏幕传输信息
1.2编译工具:MDK-ARM V5(keil5)
1.3辅助工具:STM32CubeMX
2.硬件设计
2.1原理图:


3.软件设计
3.1STM32cubeMX配置工程文件
选择Key1作为外部中断源、选择中断触发方式为下降沿触发、并设置中断优先级分组选择优先级
使能USART3串口配置为异步通信
最后生成工程文件
3.2串口输出重定向(重写fputc函数)
int fputc(int ch, FILE *p)
{
while(!(USART3->SR & (1 << 7)));
USART3->DR = ch;
return ch;
}
3.3在中断回调函数中,打印KEY1 DOWN
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_9)
{
HAL_Delay(40);
if(HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_9) == 0)
{
printf('KEY1 DOWN
');
}
}
}
4.代码及运行结果
4.1运行结果 按下KEY1、打印一次KEY1 DOWN
关键字:STM32 按键中断 串口显示
引用地址:
STM32按键中断应用实例
推荐阅读最新更新时间:2026-03-25 13:11
STM32中按键中断分析
在按键学习中,我们有用到查询的方法来判断按键事件是否发生,这种查询按键事件适用于程序工作量较少的情况下,一旦程序中工作量较大较多,则势必影响程序运行的效率,为了简化程序中控制的功能模块的执行时间,引入中断控制就很有必要,,一旦有中断时间发生,则程序立马跳转到中断向量的执行程序中,执行完成后就恢复到正常的程序状态。 在STM32F中采用中断控制器NVIC来设定中断。按照中断初始化配置的结构体文件,我们需要在NVIC初始化结构体配置如下: void EXti_PB12_Config(void) { //定义结构体 GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeD
[单片机]
关于STM32按键中断总结
stm32学习笔记——按键(外部中断) 目的:使用外部中断方式触发按键,会使用外部中断的操作 配置文件:#include stm32f10x_gpio.h #include stm32f10x_rcc.h #include stm32f10x_exti.h 寄存器:EXTI_IMR:高13位保留,低19位对应19个中断线编号,置1时开放该线上外部 中断 EXTI_EMR:高13位保留,低19位对应19个中断线编号,置1时开放该线上事 件中断 EXTI_RTSR:高13位保留,低19位对应19个中断线编号,置1时允许上升沿触 发事件和外部中断 EXTI_FTSR:高13位保留,低19位对应19个中断线
[单片机]
STM32一枚按键的旅行(GPIO+中断+NVIC分组)
首先看硬件原理图 GPIO的C13和E0是两个按键,平时是高电平,当按键下去的时候就接地变成低电平。(所以中断是下降沿触发) 开始软件配置: 宏定义两个按键 (仔细看是有必要的,因为你看 GPIO_Pin_13和GPIO_PinSource13的排序是不同的) #define TSKEY1GPIO GPIOC #define TSKEY1GPIOPIN GPIO_Pin_13 #define TSKEY1IRQ EXTI15_10_IRQn #define TSKEY1_ExtiPortsource GPIO_PortSourceGPIOC #define TSKEY1_Ex
[单片机]
利用STM32的Systick中断实现按键消抖
在系统初始化的时候对systick进行初始化 void SysTickConfig(void) { /* Set SysTick Timer for 100us interrupts */ if (SysTick_Config(SystemCoreClock / 10000)) { /* Capture error */ while (1); } /* Configure the SysTick handler priority */ NVIC_SetPriority(SysTick_IRQn, 0x0); } 在stm32f4xx_it.c中加入 void SysTick_Handler(void) {
[单片机]
STM32 实战 按键点亮LED(中断)
来看看最简单的点亮一个灯的实验你把,实验要求使用KEY4*4按键,按键按下灯亮,按键拿起灯灭,如此一直循环: 程序的思路如下: 1、首先需要设置的是时钟:你将灯的管脚连在哪个端口的某个引脚上面,你就开启哪个端口的时钟,比如灯连在A端口的某个引脚,就要开启A端口的时钟。 2、其次,设置管脚(我们要设置LED和矩阵键盘中的一个键的管脚): 我们需要对GPIO进行初始化设置,我们只需调用 GPIO_InitTypeDef的结构体,对每个成员进行设置,要设置的有PIN管脚的位置GPIO_Pin,还有管脚的速率GPIO_Speed,还有管脚的工作状态GPIO_Mode,最后在调用一下初始化的函数GPIO_Init, 3、然后就开始写我们的
[单片机]
STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
STM32F334C8T6这款MCU中有两个12位ADC(模数转换器),ADC1的通道16连接到内置的一个温度传感器,本文使用该温度传感器测量MCU和周围的环境温度,并且通过串口发送到PC的串口助手进行显示。 1. ADC的使用 1. select the ADC clock using the function RCC_ADCCLKConfig() 2. Enable the ADC interface clock using RCC_AHBPeriphClockCmd(); 3. ADC pins configuration Enable the clock for the ADC GPIOs using the fo
[单片机]
在STM32上创建链表并实现LCD滚动显示串口消息
在实现STM32开发ESP8266的时候发现ESP8266串口发送的消息行数很多, 如果使用普通的数组来存储消息需要大量的存储开销, 并且数据的显示也会损耗MCU的处理速度, 故而实现对消息的传输装入一个可以动态拓展, 并且具有灵活的调用形式的容器. 链表理所当然成为首选. 关于C语言链表的相关操作本文不再详细叙述, 若有需求请移步网址:https://blog.csdn.net/morixinguan/article/details/68951912先学习链表后再来学习在STM32创建链表. 首先粘贴STM32上链表.c文件的代码: //////roll_display.c的代码 #include roll_di
[单片机]
按键控制LED灯-ESP32中断处理
#include driver/gpio.h #include esp_task_wdt.h #include freertos/FreeRTOS.h #include freertos/queue.h #include freertos/semphr.h #include freertos/task.h #include math.h #include sdkconfig.h #define MIN_DELAY 500 #define BUTTON_GPIO GPIO_NUM_14 #define BLINK_GPIO GPIO_NUM_13 static char *TAG = SMART-WATER ;
[单片机]