打印
[应用相关]

怎么设置STM32单片机外部中断?

[复制链接]
437|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yyller|  楼主 | 2020-9-3 18:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
                                    

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

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

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE)

       

        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 | 只看该作者
这个正点原子或者野火是不是就有配置这块的操作呢?

使用特权

评论回复
5
捧一束彼岸花| | 2023-1-16 07:59 | 只看该作者
你这不是51的图吗?51用不了32MCU的硬件配置函数的

使用特权

评论回复
6
在曼谷的春| | 2023-1-16 08:32 | 只看该作者
配置属实有点难度,需要针对手册去配置的

使用特权

评论回复
7
我吃小朋友| | 2023-1-16 09:04 | 只看该作者
在处理MCU的中断的时候,注意的是优先级,一定要处理好

使用特权

评论回复
8
月亮一键变蓝| | 2023-1-16 09:36 | 只看该作者
你这个配置好像也没啥毛病吧

使用特权

评论回复
9
失物招領| | 2023-1-16 10:08 | 只看该作者
你就找个demo自己抄一下就好了,配置外部中断还是很简单的

使用特权

评论回复
10
她已醉| | 2023-1-16 10:40 | 只看该作者
讲的还是不错的,其实配置这块还是挺简单,容易操作

使用特权

评论回复
11
将爱藏于深海| | 2023-1-16 11:12 | 只看该作者
这种还得注意IO的中断线呢,不然可不行

使用特权

评论回复
12
SantaBunny| | 2023-2-3 19:15 | 只看该作者
初始化GPIO为输入,开启复用时钟,设置映射关系

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

241

帖子

1

粉丝