第一节原理解读
打算写一下中断,又忍不住想说一下中断的概念,去书上翻一翻,或者自己在搜索引擎上搜一下,都可以找到一大堆,包括本文写的这个外部中断也不例外。如果要写光是中断就可以单独写一篇了,所以本文直入主题,对于STM32的外部中断进行详细的剖析。下图来自《STM32参考手册》,从整个架构图可以知道,外部中断的功能可以配置六个寄存器。
GPIO的映射关系图如下所示:第二节配置环境1,打开STM32CubeMX并选择芯片,下载器配置如下图。
2,选择按键的引脚,配置成外部中断。如下图:
3,配置PC15引脚(也就是开发板上LD5的引脚)为输出模式。
4,选中GPIO,选择PC14,并且将GPIO的模式配置为外部中断下降沿有效。如下图:
5,使能中断。如下图。
6,设置时钟树,项目路径,项目名称等等信息将不再阐述。配置完后生成项目即可。
第三节编写代码
1,大家先看看stm32l0xx_it.c的这个函数,这个是一个中断函数,中断服务函数里面就调用了GPIO外部中断处理函数HAL_GPIO_EXTI_IRQHandler(),参数为GPIO_PIN_14,即EXTI14中断。
2,详细看看这个函数,GPIO外部中断处理函数主要就是清除中断标识位,然后调用中断回调函数HAL_GPIO_EXTI_Callback()。我们只需重构中断回调函数,在函数里面添加我们的应用代码即可。
3,于是,在main.c中添加回调函数,如下:
4,配置下载器等就不再重复阐述了。
第四节 实验现象
实验注意事项:
1,程序语句需要位于程序的BEGIN与END之间。
2,利用USB线将电脑USB口与开发板USB1口连接。
3,CN4所有拨码开关必须选择ON DP档,否则无法下载程序。
实验现象:
LD1,LD4常亮。LD5上电长量,按下USER按键,LD5翻转。
关键字:外部中断 STM32 寄存器
引用地址:
第八章 外部中断
推荐阅读最新更新时间:2024-11-09 20:40
stm32变更外部晶振时钟配置
学习野火的固件库UART1串口案例时,用的是SIM9008模块应用板上的STM32103F103RB芯片,使用的外部晶振是12M。 串口读取的是乱码 默认的外部晶振是8M 由于stm32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 如果采用外部晶振8M或12M,配置时钟为72MHZ 。 1)在system32_stm32f10x.c文件中的void SetSysClockTo72(void)里这样改: 8M: RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72 12M: RCC- CFGR |=
[单片机]
51单片机(三十二)—— 串口通信实例测试
在《51单片机(三十一)—— 串口通信介绍》中,我们介绍了51单片机串口的工作原理及寄存器定义,在本文中,我们通过一个实例来熟悉51单片机的串口使用方法。本文的资源中有实例的源码。在源码中首先是串口的初始化代码,如下所示。 void init_UART(void) { SCON = 0x50; //串口工作方式1,8位数据位,使能接收 TMOD |= 0x20; //T1为方式2,8位自动重装 TH1 = 0xFD; //晶振11.0592MHz,0xFD对应波特率为9600 TR1 = 1; //打开T1定时 EA = 1;
[单片机]
8051单片机和STM32单片机的编程环境对比
单片机编程是一门实战性的技术,程序要在单片机平台上跑起来才能看到效果、才能积累编程经验。在学校学习单片机课程时,可能会感觉到一直有一种脱节的感觉,因为一直没有用武之地。其实学习单片机很简单,第一步就是搞清楚编程环境。 入门单片机时,我们常用51型8051单片机和STM32单片机。这两种单片机比较典型,因为学校里单片机课程是基于51单片机的,而STM32的单片机则具有较多的学习资料。下面就这两种单片机介绍一下编程环境。 1、单片机常用的编程环境 比较流行的单片机环境有keil和IAR,这两种环境可以覆盖市面上90%的单片机型号,而且都提供了函数库。根据单片机位数不同,这两个编程环境也有不同的版本。 1.1 Keil的常用版本
[单片机]
基于STM32的智能鱼缸设计
1. 前言 为了缓解学习、生活、工作带来的压力,提升生活品质,许多人喜欢在家中、办公室等场所养鱼。为节省鱼友时间、劳力、增加养鱼乐趣;为此,本文基于STM32单片机设计了一款智能鱼缸。该鱼缸可以实现水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能为一体的控制系统,可通过控制键进行一键控制。 从功能上分析,需要用到的硬件如下: (1)STM32系统板 (2)水温温度检测传感器: 测量水温 (3)水质检测传感器: 测量水中的溶解性固体含量,反应水质。 (4)步进电机: 作为鱼饲料投食器 (5)RGB氛围灯: 采用RGB 3色灯,给鱼缸照明。 (6)抽水电动马达: 用来给鱼缸充氧,换水
[单片机]
基于STM32点亮LED灯
我们在控制模块中所使用的处理器是Cortex-M4系列中的STM32F407VE,这个处理器芯片有100个引脚,其中包含一些电源供电引脚、外部晶振引脚、SWD程序烧录引脚和我们最常用的GPIO功能引脚: 实际上,我们使用的GPIO并不多,我们只使用了3路AD采集、Uart1和Uart2、I2C1、Tim3和Tim4的PWM输出引脚以及几个普通GPIO脚(具体使用情况请参照《控制模块》)。STM32有丰富的硬件资源供我们使用,例如:AD采集、串口、I2C、SPI、SDIO、CAN、USB_OTG_FS、USB_OTG_HS、I2S、PWM输出、PWM采集、GPIO输入输出等。在这一节里我们将完成STM32的第一个小程序:点亮LE
[单片机]
STM32-串口实验学习笔记
USART1_IRQHandler(void)函数: 当串口1发生了相应的中断,就会跳到改函数执行。这里设计了一个小小的接收协议(系统并未定义):通过这个函数,配合一个数组USART_RX_BUF ,一个接收状态寄存器USART_RX_STA实现对串口的数据的接收管理。USART_RX_BUF 最大值为64,也就是一次接收的数据最大不能超过64字节。USART_RX_STA是一个接收状态寄存器,其各位的定义如表所示: (注意:这个是作者设计的协议,怎样判断串口接收一组数据完毕?由于每次接收的数据长度不一样,少的就3个8位数据,多的时候有十多个,这个数据个数是不定的,且没规律的数据,有什么好的方法让它接收完
[单片机]
ARM寄存器总结
ARM有16个32位的寄存器(r0到r15)。 r15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址。 ARM有一个当前程序状态寄存器:CPSR。 一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。 1、 ARM处理器共有37个寄存器,其中包括: i. 31个通用寄存器,包括程序计数器(PC)在内。都是32位寄存器 ii. 6个状态寄存器,都是32位寄存器,但目前只使用了其中12位 2、 ARM处理器有7
[单片机]
编译STM32错误之一:Error: L6218E: Undefined symbol TIM_Cmd
注意要包含头文件:#include stm32f10x_tim.h 还有要把stm32f10x_tim.c加进工程。
[单片机]