stm32初学之LED按键中断

本文介绍STM32微控制器中GPIO引脚及外部中断EXTI的配置方法,包括初始化过程、结构体参数说明及中断服务函数的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有点忙,所以到现在才有空闲搞stm32,赶紧做下简单的笔记。

首先,我们选定需要控制的特定引脚,

然后为其配置特定的功能,

最后就可以通过按键控制LED的亮与灭了。


对于LED和按键的初始化比较相似,都是通过GPIO_InitTypeDef结构体来配置。

  1. typedef struct
  1. {
  1.   uint16_t GPIO_Pin; //引脚号
  2.   GPIOSpeed_TypeDef GPIO_Speed; //配置速度
  3.   GPIOMode_TypeDef GPIO_Mode; //工作模式
  1. }GPIO_InitTypeDef;
这里还可以通过 GPIO_SetBits(GPIOC,GPIO_Pin_3);和GPIO_ResetBits(GPIOC,GPIO_Pin_3) 来使LED获得高低电平,从而使LED亮灭。


初始化GPIO后,就开始配置外部中断了,这也是通过结构体来配置。

一般配置一个I/O的步骤为:

1.  使能 EXTIx 线的时钟和第二功能 AFIO 时钟

2.  配置 EXTIx 线的中断优先级

3.   配置 EXTI 中断线 I/O

4.   选定要配置为 EXTI 的 I/O 口线和 I/O 口的工作模式

5.  EXTI 中断线工作模式配置

这里涉及到三个结构体:GPIO_InitTypeDef、EXTI_InitTypeDef和NVIC_InitTypeDef,配置方法大同小异,多看看stm32固件库手册就行了。

typedef struct

{

  uint32_t EXTI_Line;

  EXTIMode_TypeDef EXTI_Mode;

  EXTITrigger_TypeDef EXTI_Trigger;

  FunctionalState EXTI_LineCmd;

}EXTI_InitTypeDef;


typedef struct

{

  uint8_t NVIC_IRQChannel;

  uint8_t NVIC_IRQChannelPreemptionPriority;

  uint8_t NVIC_IRQChannelSubPriority;

  FunctionalState NVIC_IRQChannelCmd;

} NVIC_InitTypeDef;

NVIC 是属于Cortex 内核的器件,不可屏蔽中断 (NMI)和外部中断都由它来处理,而SYSTICK 不是由 NVIC 来控制的,在NVIC中配置中断优先级。
弄完这些之后,就差不多了,接下来就是按照启动文件 startup_stm32f10x_hd.s 中的中断向量表定义来写中断函数了,而在stm32中stm32f10x_it.c 文件是专门用来存放中断服务函数的。所以在这下面写上中断函数就ok了。这里注意的是中断服务函数名必须要跟中断向量表中的一致。

最后让程序进入死循环,通过按键中断来控制就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值