完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*实现功能:按键之前D2常亮;
按下INT2键(C13端口,对应EXti13外部中断线),进入中断程序D2常灭,恢复后D2常亮*/ #include "STM32f10x.h" /*****************************/ void LED_GPIO_Config() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //开启GPIO_G外设时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //板上LED编号 D2 PG14 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速率 GPIO_Init(GPIOG, &GPIO_InitStructure); //调用库函数,初始化GPIO_G GPIO_SetBits(GPIOG,GPIO_Pin_14); //点亮D2 // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Init(GPIOG, &GPIO_InitStructure); // GPIO_ResetBits(GPIOD,GPIO_Pin_13); } void NVIC_Config(void) //NVIC中断控制器初始化配置 { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置中断优先级分组1 NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn; //设定中断源为EXTI13 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断 NVIC_Init(&NVIC_InitStructure); } void EXTI_Config(void) //外部中断配置 PC13 { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); NVIC_Config(); /*EXTI LINE GPIO CONFIG */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //C13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入 GPIO_Init(GPIOC, &GPIO_InitStructure); /*EXTI LINE MODE CONFIG*/ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式为中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿出发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能中断线 EXTI_Init(&EXTI_InitStructure); //根据参数初始化中断寄存器 } EXTI15_10_IRQHandler() //外部中断13中断服务函数 { if(EXTI_GetITStatus(EXTI_Line13)!=RESET) //进入中断后,调用EXTI_GetITStatus()函数再次检查是否产生了EXTI_Line中断 { EXTI_ClearFlag(EXTI_Line13); GPIO_ResetBits(GPIOG,GPIO_Pin_14); //GPIO_SetBits(GPIOD,GPIO_Pin_13); //灭D2 EXTI_ClearITPendingBit(EXTI_Line13); //清除中断标志位再退出中断服务程序 } } int main() { LED_GPIO_Config(); EXTI_Config(); while(1); //等待中断 } |
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
436 浏览 1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1356 浏览 2 评论
1671 浏览 3 评论
1279 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1411 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 10:11 , Processed in 0.406789 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号