完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
提示:小白自学,大神看到不对的地方请指出指导一下。
中断是啥 中断可以这样比喻:你在做一件事情,然后电话打进来,你去做电话里要求你做的是,然后做完了又回来做刚才没做完的事情。 NVIC 嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。 EXTI 外部 中断/事件 控制器 EXTI 有20个中断/事件线,每个GPIO都可以被设置为输入线,占用 EXTI0至EXTI15。 中断分组、主优先级、子优先级 一般来说先选定优先级分组,选好之后就不要改了,因为改分组可能会使程序错乱。然后配置主优先级和子优先级。 如果同一分组里,主优先级相同,子优先级越低,越先发生。如果是主优先级不同,那么主优先级越低,也越先发生。等一个发生完了,再接下一个发生…当然,如果一个优先级高的先发生了,这是来了个低的,是不会打断这个正在发生的。 配置过程分析 用的是按键中断 1.初始化要连接到EXTI的GPIO 代码如下(示例): GPIO_InitTypeDef GPIO_InitStruct; //声明结构体 RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK, ENABLE); //开时钟 GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN; //配置按键的引脚 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //配置模式 GPIO_Init( KEY1_INT_GPIO_PORT , &GPIO_InitStruct); //端口初始化写入 2.初始化EXTI用于产生中断/事件 代码如下(示例): EXTI_InitTypeDef EXTI_InitStruct;//声明结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//打开APB2的时钟 GPIO_EXTILineConfig( GPIO_PortSourceGPIOA, GPIO_PinSource0);//选择GPIO引脚作为EXTI线 EXTI_InitStruct.EXTI_Line = EXTI_Line0;//选择EXTI线 EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//选择中断模式 EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;//选择上升触发类型 EXTI_InitStruct.EXTI_LineCmd = ENABLE;//EXTI使能 EXTI_Init( &EXTI_InitStruct); 3.初始化NVIC,用于处理中断 代码如下(示例) NVIC_InitTypeDef NVIC_InitStruct;//声明结构体 NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);//选择优先级分组 NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;//选择中断源 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//选择主优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//选择子优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//中断使能 NVIC_Init( &NVIC_InitStruct); NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序也不会报错,只会导致不响应中断。 有需要的可以去固件库里查所需要的中断源 4.编写中断服务函数 #define LED_G_TOGGLE {LED_GPIO_PORT->ODR ^= LED_GPIO_PIN;}//寄存器异或实现亮灭 void EXTI0_IRQHandler(void) { if(EXTI_GetITStatus( EXTI_Line0) != RESET )//检测是否按下 { LED_TOGGLE;//灯亮灭 } EXTI_ClearITPendingBit( EXTI_Line0 );//清除 } 5.主函数 int main(void) { LED_GPIO_Config(); EXTI_KEY1_Config(); while(1) { } } 总结 算是对STM32的中断有了个了解,会用按键中断来电灯,这算是入门的一大步嘛?哈哈哈, |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
521浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:15 , Processed in 0.742240 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号