STM32F1 - 中断系统

Interrupt

  • 1> 硬件框图
  • 2> NVIC 中断管理
  • 3> EXTI 中断管理
    • 3.1> EXTI与NVIC
    • 3.2> EXTI内部框图
  • 4> 外部中断实验
    • 4.1> 实验概述
    • 4.2> 程序设计
  • 5> 总结


1> 硬件框图

1

NVIC:Nested Vectored Interrupt Controller【嵌套向量中断控制器】

管理内核外设和片上外设的所有中断功能;

EXTI:External Interrupt 【外部中断控制器】

管理GPIO的中断;


2> NVIC 中断管理

2


3> EXTI 中断管理

3.1> EXTI与NVIC

31
STM32F103ZET6总共19个外部中断

PA0~PG0,7个引脚中只有一个可以映射到EXTI0;

外部中断EXTI 9 ~ 5 合并为EXTI9_5中断;
外部中断EXT 15~10 合并为EXT15_10中断;


3.2> EXTI内部框图

1


4> 外部中断实验


4.1> 实验概述

用2个按键控制2个LED状态翻转,用外部中断方式


4.2> 程序设计

main.c: 主程序

int main(void)
{ 
	
	
	LED_Init();
	KEY_Init();
	
	LED_Off();
	while(1) /* stop */;
	
	//return 0;		
}

bsp_led.c: LED灯初始化及开关函数

void LED_Init(void)
{
	GPIO_InitTypeDef gpio_Struct_tmp = {0};
	
	// 使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	
	
	// PB5
	gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
	gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
	
	GPIO_Init(GPIOB, &gpio_Struct_tmp); 	
	
	
	// PE5
	gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
	gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
	
	GPIO_Init(GPIOE, &gpio_Struct_tmp);
}


void LED_On(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_5);
	GPIO_ResetBits(GPIOE, GPIO_Pin_5);
}



void LED_Off(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_5);
	GPIO_SetBits(GPIOE, GPIO_Pin_5);
}

bsp_key.c: 按键初始化

void KEY_Init(void)
{
	GPIO_InitTypeDef GPIO_tmp;
	EXTI_InitTypeDef EXTI_tmp;
	NVIC_InitTypeDef NVIC_tmp;
	
	/*-------------Step 1> 配置GPIO ---------------*/
	
	// 2话不说开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
	
	GPIO_tmp.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_tmp.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;	// PE4, PE3
	GPIO_tmp.GPIO_Speed = GPIO_Speed_50MHz; 
	
	// PE4, PE3 上拉输入
	GPIO_Init(GPIOE, &GPIO_tmp);
	
	
	/*------------- Step 2> 配置AFIO  ------------*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4); // EXTI_Line4
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3); // EXTI_Line3

	/*------------- Step 3> 配置EXTI  ------------*/
	EXTI_tmp.EXTI_Line = EXTI_Line4;
	EXTI_tmp.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_tmp.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_tmp.EXTI_LineCmd = ENABLE;
	
	EXTI_Init(&EXTI_tmp);	// EXTI_Line4
	
	EXTI_tmp.EXTI_Line = EXTI_Line3;
	EXTI_tmp.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_tmp.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_tmp.EXTI_LineCmd = ENABLE;
	
	EXTI_Init(&EXTI_tmp);	// EXTI_Line3
	
	
	/*------------- Step 4> 配置NVIC  ------------*/
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		// 中断优先级分组
	
	NVIC_tmp.NVIC_IRQChannel = EXTI4_IRQn;
	NVIC_tmp.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_tmp.NVIC_IRQChannelSubPriority = 0;
	NVIC_tmp.NVIC_IRQChannelCmd = ENABLE;
	
	NVIC_Init(&NVIC_tmp);	
	
	NVIC_tmp.NVIC_IRQChannel = EXTI3_IRQn;
	NVIC_tmp.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_tmp.NVIC_IRQChannelSubPriority = 0;
	NVIC_tmp.NVIC_IRQChannelCmd = ENABLE;
	
	NVIC_Init(&NVIC_tmp);
}

4步配置GPIO的外部中断:

Step 1> 配置GPIO
Step 2> 配置AFIO
Step 3> 配置EXTI
Step 4> 配置NVIC


stm32f10x_it.c: 中断处理函数

// EXTI3 处理函数, key1;
void EXTI3_IRQHandler(void)
{
	EXTI_ClearITPendingBit(EXTI_Line3);
	
	LED_On();
}


// EXTI4 处理函数, key0;
void EXTI4_IRQHandler(void)
{
	EXTI_ClearITPendingBit(EXTI_Line4);
	
	LED_Off();
}

5> 总结

GPIO, AFIO, EXTI, NVIC等功能模块,学习它们们时各个击破;
了解他们内部结构,内部寄存器,找点感觉,
重点看看每个模块的函数如何使用,
会使用后,看看内部如何编写的,非常能提高编程技能;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/388992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot192中国陕西民俗网

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的中国陕西民俗网 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取…

蓝桥杯:C++排列与组合

排列是暴力枚举时的常见操作。有以下两种情况。 C的 next_permutation()是全排列函数,只能输出序列中所有元素的全排列。 本节将给出手写排列和组合的代码。因为在很多场合中不能使用系统自带的排列函数,所以需要自己编写。 全排列函数:nex…

《合成孔径雷达成像算法与实现》Figure6.18

% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …

如何使用六图一表七种武器

六图一表七种武器用于质量管理: 描述当遇到问题时应该用那张图来解决: 一、如果题目说出了质量问题需要找原因? 解:用因果图,因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控? 解&#xff1a…

【zabbix】(五)-自定义监控项:MySQL主从状态-自动告警

一 查看主从状态 二 在zabbix-agent端配置监控脚本 2.1 首先定义监控项 [rootmysql-112 conf]# mysql -uroot -pLXYlxy2:024.#8u} -e "show slave status\G" | grep -w Slave_IO_Running | awk {print $2} mysql: [Warning] Using a password on the command line…

UI设计常见风格(1):一文读懂九个,教你如何辨识。

Hello,我是大千UI工场,设计风格是我们新开辟的栏目,上次讲了毛玻璃风格、辨识方法、应用场景、运用方法等,很受大家欢迎,本次带来常见的风格及辨识,让大家有个总览,以后会逐个讲解的&#xff0c…

Python一些可能用的到的函数系列124 GlobalFunc

说明 GlobalFunc是算网的下一代核心数据处理基础。 算网是一个分布式网络,为了能够实现真的分布式计算(加快大规模任务执行效率),以及能够在很长的时间内维护不同版本的计算方法,需要这样一个对象/服务来支撑。Globa…

学法减分线上考试答案查找?分享九个搜题直接出答案的软件 #媒体#媒体#笔记

在信息爆炸的时代,选择适合自己的学习辅助工具和资料,能够提供更高效、便捷和多样化的学习方式。 1.试题猪 这是个微信公众号 一款聚合了好多款搜题软件的公众号,对话框可以直接搜题,题库好像挺多的,一次性能出好多…

计算机二级数据库之数据模型(三层相关的结构)

数据模型 模型的概念 模型的介绍模型是对现实世界特征的模拟和抽象, 数据模型的概念: 数据模型是对现实世界中数据特征的抽象,描述的是数据的共性。 数据模型是用来在数据库中抽象、表示和处理现实世界中的数据和信凹。 其相关的共同特…

阿里云幻兽帕鲁服务器中据点帕鲁数量上限是修改哪个参数?

在阿里云的计算巢管理中,找到你的这台部署幻兽帕鲁的服务器实例,选择右上角的“修改游戏配置” 然后选择“基地内工作帕鲁的最大数量”改成20 不过也有同学说更改上面的数字,根本不起作用。 参考资料:大多数人现在都知道&#xf…

AGV|RGV基本概念及导航分类与差异

AGV是自动导引运输车,装备采用电磁或光学等自动导引装置,能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车。其导航方式主要分磁条|磁钉导航、激光导航、激光反光板、激光自然导航、二维码导航、惯性导航等方式,广…

【51单片机】利用STC-ISP软件工具【定时器计算器】配置【定时器】教程(详细图示)(AT89C52)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

OpenAI全新发布文生视频模型Sora - 现实,不存在了

OpenAI,发他们的文生视频大模型,Sora了。。。。。 而且,是强到,能震惊我一万年的程度。。。 https://openai.com/sora 如果非要用三个词来总结Sora,那就是“60s超长长度”、“单视频多角度镜头”和“世界模型” &am…

一周学会Django5 Python Web开发-项目配置settings.py文件-资源文件配置

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计17条视频,包括:2024版 Django5 Python we…

深度学习之梯度下降算法

梯度下降算法 梯度下降算法数学公式结果 梯度下降算法存在的问题随机梯度下降算法 梯度下降算法 数学公式 这里案例是用梯度下降算法,来计算 y w * x 先计算出梯度,再进行梯度的更新 import numpy as np import matplotlib.pyplot as pltx_data [1.0,…

紫微斗数双星组合:武曲破军在巳亥

文章目录 前言内容总结 前言 紫微斗数双星组合:武曲破军在巳亥 内容 紫微斗数双星组合:武曲破军在巳亥 性格分析 在紫微斗数命盘中,武曲星入命之人性格大都为正直、刚强、果决、重视原则。假如与破军星同守命宫时,身边的破军是…

【防网盘在线解压】Peazip 豌豆压缩 v9.7.0

软件介绍 Peazip 是一个免费的文件归档应用程序, 支持跨平台,是和WinRar、WinZip类似软件的开源免费替代品;支持压缩/ 存档到 7Z, ARC、Brotli BR、BZip2、GZip、 PAQ、PEA、RAR、自解压档案、TAR、WIM、XZ、Zstandard ZST、打开…

如何为你的幻兽帕鲁服务器手动配置虚拟内存或Swap、Zram

其实非常简单,如果是Windows系统服务器的话,直接远程连接到服务器桌面。 连上之后,打开设置,找到“高级系统设置” 可以参考视频教程: 拒绝卡顿!幻兽帕鲁服务器内存优化攻略! 详细教程地址&…

多进程面试题汇总

这里写目录标题 一、多进程1、进程的定义:2、单核多任务CPU执行原理3、进程的优点和缺点4、创建进程15、创建进程26、进程池6.1、进程池的作用6.2、原理图6.3、使用进程池的优点 7、进程间的通信(Queue)7.1、需求1:采用多进程将10…

《合成孔径雷达成像算法与实现》FIgure6.20

% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …