完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.外部中断/事件管理框图
2. 外部中断函数编写--以按键控制LED为例 2.1初始化要连接的GPIO&初始化外部中断结构体 查阅指南者原理图,知道KEY1是在PA0,所以要连接在EXTI0,同理,对于连接在PC13的按键KEY2,应该连接在EXTI13。 void EXTI_Key_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /*开启按键GPIO口的时钟*/ RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE); /* 配置 NVIC 中断*/ NVIC_Configuration(); /*--------------------------KEY1配置-----------------------------*/ /* 选择按键用到的GPIO */ GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN; 初始化GPIO /* 配置为浮空输入 */ /*浮空输入的意思是,其电平由外部电路决定*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); //初始化EXTI /* 选择EXTI的信号源 */ GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE; /* EXTI为中断模式 */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /* 上升沿中断 */ EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; /* 使能中断 */ EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /*--------------------------KEY2配置-----------------------------*/ /* 选择按键用到的GPIO */ GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN; /* 配置为浮空输入 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure); /* 选择EXTI的信号源 */ GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE); EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE; /* EXTI为中断模式 */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /* 下降沿中断 */ EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /* 使能中断 */ EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } supplement:外部中断结构体 typedef struct { uint32_t EXTI_Line; //用于产生中断/事件线 EXTIMode_TypeDef EXTI_Mode; //事件/中断模式选择 EXTITrigger_TypeDef EXTI_Trigger; //上升沿/下降沿触发选择,也可以是上升沿&下降沿都触发 FunctionalState EXTI_LineCmd; //对应中断屏蔽/事件屏蔽寄存器 }EXTI_InitTypeDef; 需要注意的是,在选择哪个外部引脚作为中断/事件触发引脚时,其配置函数在“stm32f10x_gpio.h”中,其函数原型为 void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); 第一个参数配置GPIOA---GPIOG,第二个参数配置GPIO_PinSource0 -- GPIO_PinSource15 2.2.初始化EXTI用于产生中断/事件 2.3.初始化NVIC,用于处理中断 注意,在编写初始化函数时,NVIC_IRQChannel的赋值尤为要注意。 在“stm32f10x.h”中查找。在编写大容量芯片时,中断线大于5时,并不在单独定义,而是[5..9]定义一个,[10..15]定义一个。 2.4.编写中断服务函数 为便于管理,应统一写在stm32f10x_it.c文件中,但要注意,函数名并不是任意的,而要去“startup_stm32f10x_hd.s”中查找中断向量表 以中断线EXTI0为例, 同时也要注意,类比于上面,EXTI5之后也是公用一个函数名。 编写中断服务函数常用套路 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
721浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
563浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 23:59 , Processed in 0.581237 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号