完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20
个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿 检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为 中断或者事件,以及触发事件的属性。 目标:用按键控制小灯亮灭,按键1按第一下LED1亮,按第二下LED2亮,按第三下都灭; 按键2按一下两个灯都灭。 引脚连接 1.按键 KEY1-PA0 KEY2-PC13 2.LED LED1-PB9 LED2-PB8 代码 1.main #include "stm32f10x.h" #include "bsp_led.h" #include "bsp_exti.h" #include "bsp_SysTick.h" int main(void) { SysTick_Init(); /* LED 端口初始化 */ LED_GPIO_Config(); LED1(0); LED2(0); /* 初始化EXTI中断,按下按键会触发中断, * 触发中断会进入stm32f10x_it.c文件中的函数 * KEY1_IRQHandler和KEY2_IRQHandler,处理中断. */ EXTI_Key_Config(); /* 等待中断,由于使用中断方式,CPU不用轮询按键 */ while(1) { } } 2.Stm32f10x-it.c void SysTick_Handler(void) { TimingDelay_Decrement(); } int i=0; void KEY1_IRQHandler(void) { //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) // Delay_us( 10000 ); if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) { // while(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET); i++; if(i%4==2) { LED1(1); } else if(i%4==1) { LED2(1); } else if(i%4==0) { LED1(0); LED2(0); } } //清除中断标志位 EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); } void KEY2_IRQHandler(void) { //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) { i=0; LED1(0); LED2(0); //清除中断标志位 EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1942浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
739浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
576浏览 3评论
599浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
561浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 20:55 , Processed in 0.857249 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号