STM32F1 - 中断系统

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


1> 硬件框图

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机

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

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

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

管理GPIO的中断;


2> NVIC 中断管理

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机


3> EXTI 中断管理

3.1> EXTI与NVIC

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机
STM32F103ZET6总共19个外部中断

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

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


3.2> EXTI内部框图

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机


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> 中断向量表

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机

中断数量:70个

STM32F103ZET6有70个中断 = 60外设中断 + 10个系统中断;


6> 总中断开关

// 文件core_cm3.h:

static __INLINE void __enable_irq()               { __ASM volatile ("cpsie i"); }
static __INLINE void __disable_irq()              { __ASM volatile ("cpsid i"); }

STM32F1 - 中断系统,STM32F1-外设驱动,stm32,嵌入式硬件,单片机


7> 总结

GPIO, AFIO, EXTI, NVIC等功能模块,学习它们们时各个击破;
了解他们内部结构,内部寄存器,找点感觉,
重点看看每个模块的函数如何使用,
会使用后,看看内部如何编写的,非常能提高编程技能;文章来源地址https://www.toymoban.com/news/detail-835139.html

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

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

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

相关文章

  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(39)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(61)
  • STM32F4基础:时钟系统、中断及定时器

            时钟系统是CPU的脉搏, 由于STM32 本身非常复杂,外设非常的多,并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 k 的时钟即可,因此STM32F4 的时钟系统比较复杂 ,不像简单的 51 单片机一个系统时钟就可以解决一切。         如下图所

    2023年04月09日
    浏览(33)
  • STM32F103标准外设库——认识STM32(一)

     个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导

    2024年01月15日
    浏览(37)
  • 基于STM32F1的舵机控制

    一、SG90舵机介绍 SG90是有三个版本的,90度版、180度版和360度版,前两个只是舵机旋转角度的范围不一样,可以在这个范围内任意的控制舵机所转的角度,而360版本的是一直旋转的,我们不能控制它旋转的角度,只能控制它旋转的速度,这里我们在买的时候就要注意一点,根

    2023年04月25日
    浏览(272)
  • STM32学习-基于STM32F1具有控制菜单的温控小风扇

    本文仅作个人学习记录,非教程,内容不完整,仅供参考,请勿用于商业用途。 使用ADC读取环境温度,根据环境温度设置PWM占空比,从而控制FAN转速。控制菜单功能:1.设置特定转速,2.切换为手动模式任意控制FAN转速。 整个系统并不复杂:MCU负责运行代码并输出信号;NTC是

    2024年02月06日
    浏览(230)
  • STM32 Cubemx 同名外设中断及回调

    最近在学习STM32,采用HAL库开发方式。记录一下 同名外设中断及回调 。 这里提及的同名外设指USART1/2之类的 相同外设 ,但 不是同一个instance 。 以使用cubemx配置两个同名外设EXTI0/EXT4为例。 在NVIC配置界面, 勾选EXTI line0/4 . 在Code Generation栏,勾选以下三项: Generate Enable in I

    2024年02月10日
    浏览(31)
  • STM32项目设计:基于stm32f1的智能门锁(附项目视频全套教程)

      最近假期比较闲,拿着之前剩下的模块做了一个小玩具, 先制定一下此次玩具的规划,也可以理解为简易项目书。 开发软件:keil 硬件选型:STM32F103C8T6、RFID读卡器、oled屏幕、按键模块、蓝牙通信模块、蜂鸣器、舵机; 上位机: 1.上位机可以对密码进行设置、重置 2.上位机可以

    2024年02月10日
    浏览(36)
  • 五、修改官方FreeRTOS例程(STM32F1)

    (1)进入FreeRTOS官网:FreeRTOS官网 (2)下载FreeRTOS。(选择带示例的下载) (1)下载后解压的FreeRTOS文件如下图所示。 (2)删除下图中红框勾选的文件。 FreeRTOS-Plus,FreeRTOS的生态文件,非必需的。 tools,这里面是亚马逊相关的文件,不需要。 (3)删除\\\"FreeRTOSv202212.01FreeRTOSDemo\\\"目录下用不到

    2024年02月11日
    浏览(35)
  • STM32F1系列简单介绍及入门学习

    1.什么是STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星。 STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。AR

    2023年04月19日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包