完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基础知识
1、外部中断/事件框架: STM32F407一共有16+7条中断/事件线(如下图),也就是说在STM32工作过程中同时支持22条外部中断/事件。 从上图也可以看出,所有的GPIO口都可以当作外部中断/事件源。但是同时只能有16条位于不同的GPIO口上的中断/事件源。 2、中断/事件源配置: 选择EXIT0-16中断/事件线的中断/事件源在相应的SYSCFG_EXTICRx寄存器里配置。如配置EXIT0-3中断/事件线的源寄存器为下图: 3、中断与事件: 在这里我们需要辨识以下中断与事件的区别: 中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果; 事件是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等; 代码设计 .c代码 void mpuIntInit(void) { EXTI_InitTypeDef EXTI_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; //开启相关时钟 RCC_AHB1PeriphClockCmd(MPU_EXIT_RCCPERIPH, ENABLE); //GPIO设置-下拉输入 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = MPU_EXIT_GPIO_PIN; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;//大于等于50最好开启IO补偿 GPIO_Init(MPU_EXIT_GPIO, &GPIO_InitStruct); //EXIT设置-中断模式上升沿触发 EXTI_InitStruct.EXTI_Line = MPU_EXTI_LINE; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStruct); //NVIC设置-中断配置 NVIC_InitStruct.NVIC_IRQChannel = MPU_EXIT_IT_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//最高 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); //中断源配置-PA1 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1); } void MPU_EXIT_IT_HANDLER() { if(EXTI_GetITStatus(MPU_EXTI_LINE) == SET) { EXTI_ClearITPendingBit(MPU_EXTI_LINE); printf(“coming”); } } .h代码 #define MPU_EXIT_GPIO GPIOA #define MPU_EXIT_GPIO_PIN GPIO_Pin_1 #define MPU_EXIT_RCCPERIPH RCC_AHB1Periph_GPIOA #define MPU_EXTI_LINE EXTI_Line1 #define MPU_EXIT_IT_IRQn EXTI1_IRQn #define MPU_EXIT_IT_HANDLER EXTI1_IRQHandler #define MPU_EXTI_PORT_SOURCE EXTI_PortSourceGPIOA #define MPU_EXTI_PIN_SOURSE EXTI_PinSource1 void mpuIntInit(void); void MPU_EXIT_IT_HANDLER(void); 总结 一般配置外部中断/事件一般步骤: 1、先配置对应GPIO的时钟; RCC_AHB1PeriphClockCmd 2、初始化配置GPIO(根据触发方式设置上下拉模式); GPIO_Init 3、初始化配置EXTI中断线; EXTI_Init 4、如需中断则初始化配置NVIC NVIC_Init 5、设置中断线的中断源 SYSCFG_EXTILineConfig |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:53 , Processed in 0.856549 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号