STM32 外部中断 led灯闪烁

这篇具有很好参考价值的文章主要介绍了STM32 外部中断 led灯闪烁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 、什么是中断 ? 

单片机的中断具有外部中断和内部中断,对于中断的理解很多博主讲解得很好,大家可以去学习一下,中断在单片机的学习过程中是非常重要的内容。

我认为中断最为简单的理解就是: 暂停当前的工作,去处理别的工作,别的工作处理完成后再回来继续完成当前的工作。假如你正在吃饭,妈妈叫你去收衣服,此时你便要停止吃饭,去收衣服,当衣服收完后,你又回来接着吃饭。

外部中断: 通过外部给定一个特定的信号,单片机监测该信号,最后做出相应的反应。

二、实现效果:

通过外部按键(按键连接PA0引脚: “实际控制中最好进行消抖处理”)实现Led灯闪烁一次 (LED连接 PC13引脚)

三、中断程序配置

本程序中使用的EXTI0外部中断。

 

STM32 外部中断 led灯闪烁

Code:  Exti.c

#include "exti.h"
#include "delay.h"
void My_EXTI_Init(void)
{
EXTI_InitTypeDef EXTI_InitStruct; //定义外部中断结构体
NVIC_InitTypeDef NVIC_InitStruct; //定义中断源结构体

// KEY_Init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //打开复用端口使用,因为外部中断使用的引脚是与普通I/O进行复用的

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); //外部中断使用GPIOA上的PIN0引脚

EXTI_InitStruct.EXTI_Line=EXTI_Line0; //使用的外部中断线为EXTI0
EXTI_InitStruct.EXTI_LineCmd=ENABLE; // 使能外部中断
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //使用下降沿触发外部中断

EXTI_Init(&EXTI_InitStruct); //初始化外部中断结构体

NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn; // 中断源为外部中断EXTI0
NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE; //使能中断源
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =2; //主中断优先级为2
NVIC_InitStruct.NVIC_IRQChannelSubPriority =2; //子中断优先级为2

NVIC_Init(&NVIC_InitStruct); //初始化中断源结构体
}

//中断函数
void EXTI0_IRQHandler(void)   //中断函数的名称是不能自己随意命名的,在特定的文件中查找你,前面的串口通信中断部分已经详细的讲解,请看前面的文章。
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay(50000);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
delay(50000);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
EXTI_ClearFlag(EXTI_Line0); //清除中断标志位
}

Code: Exti.h

#ifndef _EXTI_H_
#define _EXTI_H_
#include "stm32f10x.h"
void My_EXTI_Init(void);
#endif

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "exti.h"

 

#include "led.h"
#include "delay.h"

//LED初始化
void Led_funcing(){
GPIO_DeInit(LED_GPIO_PORT);// 注意这里的函数非常的重要,这里是将对应的GPIO端口初始化成默认的样子,因为这个端口可能在以前使用过,其他的配置可能发生了改变
GPIO_InitTypeDef GPIOC_LED_Init; // 定义GPIO的结构体,也就是外设的结构体
RCC_APB2PeriphClockCmd( LED_GPIO_CLK,ENABLE); //打开对应的GPIO的时钟,注意这里不同的外设可能挂载的时钟不同,所以需要开原理图,
GPIOC_LED_Init.GPIO_Pin=LED_GPIO_PIN ; // 配置需要使用的引脚
GPIOC_LED_Init.GPIO_Mode=GPIO_Mode_Out_PP; //配置引脚的输出的模式
GPIOC_LED_Init.GPIO_Speed=GPIO_Speed_50MHz; // 配置输出的频率,这个在输入的时候不需要配置
GPIO_Init(LED_GPIO_PORT,&GPIOC_LED_Init); // 使用初始化函数初始化刚刚定义的结构体,以及对应的GPIO端口
GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);
}

//按键初始化 (外部中断触发器)

void Key_Init(void )
{
GPIO_DeInit(GPIOA);
GPIO_InitTypeDef Key_GPIO_Struct;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
Key_GPIO_Struct.GPIO_Pin= GPIO_Pin_0;
Key_GPIO_Struct.GPIO_Mode=GPIO_Mode_IPU; // 输入端口的模式为上拉输入,表示该该引脚在空闲时处于高电平状态,常用的浮空输入是空闲时引脚点电平处于不确定状态
GPIO_Init(GPIOA,&Key_GPIO_Struct);
}

Main.c

 

int main()
{
Led_funcing();
Key_Init();
My_EXTI_Init();
while(1)
{

}
}文章来源地址https://www.toymoban.com/news/detail-600047.html

到了这里,关于STM32 外部中断 led灯闪烁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机(五)第二节:EXTI外部中断练习(对射式红外传感器计次和旋转编码器计次)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(35)
  • 学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

    在模块化编程里,函数使用分为如下三步: 返回值 函数名称( 入口参数 ) { 函数要执行的功能 } @返回值:没有返回值就是void @函数名称:避开(IDE中标蓝),不重复,非特殊字符随便取 @入口参数:类型+名称,多个参数“,”分开,空就写void 返回值 函数名称( 入口参

    2024年02月12日
    浏览(38)
  • STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    流水灯通过交替闪烁实现灯光流动的效果,本篇将分析如何采用STM32单片机实现流水灯。 STM32单片机(STM32F103RCT6)、发光二极管 4(我用的是七彩快闪,用红绿蓝LDE自行搭配也可)、1k电阻 4、面包板飞线等自备。 打开STM32CubeMX,选择型号STM32F103RCT6,配置调试器PinoutConfigurati

    2023年04月09日
    浏览(31)
  • STM32/51单片机编程入门(点亮LED)

    目录 一、Proteus电路仿真软件上的C51程序设计及仿真 1.原理图绘制 2.Keil5上的51程序编写 3.仿真 二、安装mdk5软件和stm32包,完成一个stm32的简单程序 1.mdk5软件中编写程序 2.stm32仿真程序调试 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤

    2024年02月02日
    浏览(48)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月07日
    浏览(42)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月11日
    浏览(36)
  • 单片机LED灯闪烁的简单代码

    目录 前言 一、定义LED灯 二、设置延迟函数 三、让LED闪烁 四、总结 本文将介绍普中51单片机多功能LED灯闪烁的概念、原理、硬件设计、实验测试以及总结展望。 工作原理 1.在LED点亮、LED闪烁实验的基础之上。 2.移位函数 crol (a,b):循环左移函数,a为左移的值,b为左移的位数

    2024年03月22日
    浏览(31)
  • 单片机第三季-第七课:STM32中断体系

    目录 1,NVIC 2,中断和事件的区别 3,优先级的概念  4,如何实际编程使用外部中断 5,STM32开发板通过按键控制LED  5.1,打开相应GPIO模块时钟 5.2,NVIC设置 5.3,外部中断线和配套的GPIO进行连接映射 5.4,代码文件  6,FSMC NVIC: Nested Vector Interrupt Control,嵌套向量中断控制器;

    2024年01月18日
    浏览(36)
  • 单片机-c语言LED灯循环闪烁

    1.1一灯循环 1.2for循环实现八个依次亮 1.3使用intrins.h库函数实现 (连接完电路后,双击单片机,在programfiles中导入keil代码生成的 .HEX文件即可)

    2024年02月06日
    浏览(30)
  • 【单片机】STM32单片机频率计程序,外部脉冲计数程序,基于脉冲计数的频率计程序,STM32F103

    两种方法用于在单片机中实现频率计的功能。 第一种方法是通过定时器来衡量信号的周期,然后将周期转换为频率。在这种方法中,你可以使用单片机的定时器模块来测量输入信号的周期,定时器会产生一个计数值,你可以根据这个计数值来推算出输入信号的周期,并通过简

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包