[应用相关] 怎么设置STM32单片机外部中断?

[复制链接]
768|11
 楼主| yyller 发表于 2020-9-3 18:49 | 显示全部楼层 |阅读模式
                                    

        比如要是使用GPC3作为中断源,上升沿触发外部中断必须配置好EXTI和NVIC

        使用以下函数打开SYSCFG的时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE)

        o4YBAFz3cSeAHA4bAAB1uVHIDV8540.jpg

        GPIO设置如下

        void GPIO_ConfiguraTIon(void)

        {

        GPIO_InitTypeDef GPIO_InitStructure;

        /* GPIOF Periph clock enable */

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//注意要打开SYSCFG时钟

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

        GPIO_Init(GPIOC, &GPIO_InitStructure);

        }

        因为要用的IO口做中断源,故IO的复用功能必须使能,F4的与F103的有些不同,它的外部中断复用功能是由SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx,GPIO_PinSourcex); 进行配置的。

        void EXTI_Configuration(void)

        {

        EXTI_InitTypeDef EXTI_InitStructure;

        //GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);//这是以前的F103所用的配置函数

        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource3); //407使用的配置函数

        EXTI_InitStructure.EXTI_Line = EXTI_Line3;

        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

        EXTI_InitStructure.EXTI_LineCmd = ENABLE;

        EXTI_Init(&EXTI_InitStructure);

        }

        设置外部中断源和优先级

        void NVIC_Config(void)

        {

        NVIC_InitTypeDef NVIC_InitStructure;

        /* Enable the USARTx Interrupt */

        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

        NVIC_Init(&NVIC_InitStructure);

        }

        中断处理函数

        void EXTI3_IRQHandler(void)

        {

        if(EXTI_GetITStatus(EXTI_Line3) != RESET)

        {

        do something();

        EXTI_ClearITPendingBit(EXTI_Line3);

        printf(“EXTI3_IRQHandlerrn”);

        }

        }

               
            

未说出口的像你 发表于 2023-1-16 06:22 | 显示全部楼层
现在好啦,可以用cubemx来配置啦
白马过平川 发表于 2023-1-16 06:55 | 显示全部楼层
其实外部中断挺好配置的,你得找参考例程或者数据手册
西洲 发表于 2023-1-16 07:27 | 显示全部楼层
这个正点原子或者野火是不是就有配置这块的操作呢?
捧一束彼岸花 发表于 2023-1-16 07:59 | 显示全部楼层
你这不是51的图吗?51用不了32MCU的硬件配置函数的
在曼谷的春 发表于 2023-1-16 08:32 | 显示全部楼层
配置属实有点难度,需要针对手册去配置的
我吃小朋友 发表于 2023-1-16 09:04 | 显示全部楼层
在处理MCU的中断的时候,注意的是优先级,一定要处理好
月亮一键变蓝 发表于 2023-1-16 09:36 | 显示全部楼层
你这个配置好像也没啥毛病吧

失物招領 发表于 2023-1-16 10:08 | 显示全部楼层
你就找个demo自己抄一下就好了,配置外部中断还是很简单的
她已醉 发表于 2023-1-16 10:40 | 显示全部楼层
讲的还是不错的,其实配置这块还是挺简单,容易操作
将爱藏于深海 发表于 2023-1-16 11:12 | 显示全部楼层
这种还得注意IO的中断线呢,不然可不行
SantaBunny 发表于 2023-2-3 19:15 | 显示全部楼层
初始化GPIO为输入,开启复用时钟,设置映射关系
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

241

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部