五、STM32F429IGT6 按键输入&EXTI

一、EXTI框图

在这里插入图片描述

二、EXTI初始化结构体

在这里插入图片描述

三、应用

目标:按键按下时,反转LED状态。

1. 编程流程
  • 初始化连接到 EXTI 的 KEY
  • 连接 EXTI 中断源 到 key0、key1 引脚
  • 初始化EXTI,用于产生中断事件
  • 初始化 NVIC,用于处理中断
  • 编写中断服务函数
2. 代码总结
  • key.c
#include "key.h"

static void KEY_NVIC_Config(void);

void KEY_Config(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
		EXTI_InitTypeDef EXTI_InitStructure;

		RCC_AHB1PeriphClockCmd(KEY0_CLK | KEY1_CLK, ENABLE);			// 开启 GPIO 外设时钟
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);          // 开启 EXTI 时钟
	
		/* 1. 初始化连接到 EXTI 的 KEY  */
		GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;        			// 输入模式
		GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;      			    // 确保按键未按下时,GPIO引脚能保持稳定的电平状态。

		GPIO_InitStructure.GPIO_Pin   = KEY0_PIN;
		GPIO_Init(KEY0_PORT, &GPIO_InitStructure);	

		GPIO_InitStructure.GPIO_Pin   = KEY1_PIN;
		GPIO_Init(KEY1_PORT, &GPIO_InitStructure);	
	
		
		/* 连接 EXTI 中断源 到 key0、key1 引脚 */
		SYSCFG_EXTILineConfig(KEY0_EXTI_PORTSOURCE, KEY0_EXTI_PINSOURCE);
	    SYSCFG_EXTILineConfig(KEY1_EXTI_PORTSOURCE, KEY1_EXTI_PINSOURCE);
	
		/* 2. 初始化 EXTI */
	    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;      // 中断模式
		EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;     // 下降沿触发
		EXTI_InitStructure.EXTI_LineCmd = ENABLE;                   // 使能
		
		EXTI_InitStructure.EXTI_Line    = KEY0_EXTI_LINE;
		EXTI_Init(&EXTI_InitStructure);
		
		EXTI_InitStructure.EXTI_Line    = KEY1_EXTI_LINE;
		EXTI_Init(&EXTI_InitStructure);
		
		/* 3. 初始化 NVIC,用于处理中断 */
		KEY_NVIC_Config();
}	


void KEY_NVIC_Config(void)
{
		NVIC_InitTypeDef NVIC_InitStructure;
	
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);           						// 配置中断优先级分组
	
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;						// 主优先级
		NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;						// 子优先级
		NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
	
		NVIC_InitStructure.NVIC_IRQChannel                   = KEY0_EXTI_IRQ;           // 中断通道
		NVIC_Init(&NVIC_InitStructure);
	
		NVIC_InitStructure.NVIC_IRQChannel                   = KEY1_EXTI_IRQ;
		NVIC_Init(&NVIC_InitStructure);
}
  • key.h
#ifndef __KEY_H
#define __KEY_H

#include "stm32f4xx.h"

#define KEY0_CLK      		         RCC_AHB1Periph_GPIOH
#define KEY0_PORT					 GPIOH
#define KEY0_PIN      		         GPIO_Pin_3
#define KEY0_EXTI_LINE    			 EXTI_Line3
#define KEY0_EXTI_PORTSOURCE         EXTI_PortSourceGPIOH
#define KEY0_EXTI_PINSOURCE          EXTI_PinSource3
#define KEY0_EXTI_IRQ         		 EXTI3_IRQn
#define KEY0_EXTI_IRQHANDLER         EXTI3_IRQHandler

#define KEY1_CLK      		         RCC_AHB1Periph_GPIOH
#define KEY1_PORT					 GPIOH
#define KEY1_PIN      		         GPIO_Pin_2
#define KEY1_EXTI_LINE    			 EXTI_Line2
#define KEY1_EXTI_PORTSOURCE         EXTI_PortSourceGPIOH
#define KEY1_EXTI_PINSOURCE          EXTI_PinSource2
#define KEY1_EXTI_IRQ         		 EXTI2_IRQn
#define KEY1_EXTI_IRQHANDLER         EXTI2_IRQHandler

void KEY_Config(void);

#endif
  • stm32f4xx_it.c文件添加如下内容
#include "key.h"
#include "led.h"

void KEY0_EXTI_IRQHANDLER(void) 
{
		if(EXTI_GetITStatus(KEY0_EXTI_LINE) != RESET)
		{
				LED0_TOGGLE;				    // 翻转LED状态
		}
		
		EXTI_ClearFlag(KEY0_EXTI_LINE);         // 清除中断标志位
}

void KEY1_EXTI_IRQHANDLER(void) 
{
		if(EXTI_GetITStatus(KEY1_EXTI_LINE) != RESET)
		{
				LED1_TOGGLE;
		}
		
		EXTI_ClearFlag(KEY1_EXTI_LINE);
}
  • main.c
#include "stm32f4xx.h"
#include "led.h"
#include "key.h"

int main(void) 
{
	  GPIO_Config(); 
		KEY_Config();
	
		while(1)
		{
		}
}
  • 编译运行即可
### 回答1: STM32F767IGT6和STM32F429IGT6是STMicroelectronics推出的两款32位ARM Cortex-M微控制器。下面是两者的比较: 1. 处理器性能:STM32F767IGT6采用了ARM Cortex-M7内核,主频可达216 MHz,提供了更高的处理能力和更快的执行速度。而STM32F429IGT6使用了ARM Cortex-M4内核,主频为180 MHz。 2. 存储容量:STM32F767IGT6具有1MB的闪存和320KB的SRAM,而STM32F429IGT6则仅有1MB的闪存和256KB的SRAM。因此,前者提供了更大的存储容量,可以用于存储更多的程序和数据。 3. 外设和接口:两者均具有丰富的外设和接口,如多个USART、SPI、I2C、USB等。然而,STM32F767IGT6还拥有更多的接口和外设,如以太网MAC、SDIO、SDMMC、QSPI等,可以提供更多的连接和扩展选项。 4. 电源管理:STM32F767IGT6支持更多的低功耗模式,包括多个待机模式和休眠模式。这样可以进一步降低功耗,延长电池寿命。 5. 其他特性:STM32F767IGT6在外设和性能方面拥有一些额外的特性,如更多的定时器、DMA通道和ADC转换通道。同时,它还提供了更多的扩展功能,如温度传感器和自检。 综上所述,STM32F767IGT6在处理能力、存储容量、外设和接口等方面都更为强大,适用于对性能要求较高的应用场景。而STM32F429IGT6则适用于对功耗和成本有更高要求的应用。选择适合的芯片需根据具体应用需求来决定。 ### 回答2: STM32F767IGT6和STM32F429IGT6是两种不同型号的STM32单片机。它们在处理器核心、性能、外设等方面存在一些不同。 首先,STM32F767IGT6采用了ARM Cortex-M7内核,而STM32F429IGT6采用了ARM Cortex-M4内核。相对于Cortex-M4内核,Cortex-M7内核具有更强大的计算性能和更高的操作速度。 其次,STM32F767IGT6拥有更大的闪存和SRAM容量。它有2MB的闪存和512KB的SRAM,而STM32F429IGT6只有1MB的闪存和256KB的SRAM。更大的存储容量使得STM32F767IGT6能够运行更复杂的应用程序和存储更多的数据。 此外,STM32F767IGT6和STM32F429IGT6在外设方面也有一些差异。两者都配备了通用I/O端口、定时器、串行通信接口、USB接口等常见外设,但STM32F767IGT6还集成了以太网控制器、SDIO接口、CAN接口等更多功能。 总体上看,STM32F767IGT6相对于STM32F429IGT6具有更强大的处理器和更大的存储空间,可以支持更复杂的应用程序,并且集成了更多的外设功能。然而,选择适合的型号还要根据具体的应用需求和成本考虑。 ### 回答3: STM32F767IGT6和STM32F429IGT6STM32系列微控制器的两个不同型号。以下是它们之间的比较: 处理器性能:STM32F767IGT6采用Cortex-M7内核,主频为216 MHz,而STM32F429IGT6采用Cortex-M4内核,主频为180 MHz。因此,STM32F767IGT6具有更高的处理性能和更快的时钟速度。 存储容量:STM32F767IGT6具有更大的Flash存储器,容量为2 MB,而STM32F429IGT6的Flash容量为1 MB。此外,STM32F767IGT6还具有更大的RAM容量,为512 KB,而STM32F429IGT6的RAM容量为256 KB。 外设功能:STM32F767IGT6和STM32F429IGT6都具有许多通用和专用外设,如UART、SPI、I2C、ADC和定时器等。然而,STM32F767IGT6具有更多的GPIO脚,为216个,比STM32F429IGT6的112个更多。此外,STM32F767IGT6还具有更多的专用外设,如以太网MAC、USB OTG等。 功耗:由于采用了不同的内核和处理器架构,STM32F767IGT6在性能方面可能会更耗电。对于更低功耗要求的应用,STM32F429IGT6可能是更好的选择。 总结:STM32F767IGT6和STM32F429IGT6在处理器性能、存储容量、外设功能和功耗方面有所区别。选择哪个型号主要取决于具体的应用需求和性能要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值