历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2019年03月25日 | STM32之中断与事件---一个使用GPIO作为外部中断的示例

2019-03-25 来源:eefocus

1.GPIO的正确设置

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable GPIOD clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

 

/* Configure PD.03, PC.04, as input floating */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 ;

 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD, &GPIO_InitStructure);

 

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); //PD3作为外部中断引脚


其中GPIO_EXITLineConfig函数的声明如下:


/**

* @brief Selects the GPIO pin used as EXTI Line.

* @param GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.

* This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).

* @param GPIO_PinSource: specifies the EXTI line to be configured.

* This parameter can be GPIO_PinSourcex where x can be (0..15).

* @retval None

*/

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)


2.中断初始化

EXTI_InitTypeDef EXTI_InitStructure;

 

// Configure EXTI Line3 to generate an interrupt on falling edge

EXTI_InitStructure.EXTI_Line = EXTI_Line3;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource4);

 

// Configure EXTI Line4 to generate an interrupt on falling edge

EXTI_InitStructure.EXTI_Line = EXTI_Line4;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);


3.在NVIC_Configuration 中Configures the NVIC and Vector Table base address.

/* Configure the Priority Group to 2 bits */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/* enabling interrupt */

NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

 

/* Enable the EXTI3 Interrupt on PD.3 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/* Enable the EXTI4 Interrupt on PD.4 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);


4.在stm32f0x_it.c 中写入 中断处理函数



/*******************************************************************************

* Function Name : EXTI3_IRQHandler

* Description : This function handles External interrupt Line 3 request.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void EXTI3_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line3) != RESET)

    {

        // Led_RW_ON();

        GPIO_SetBits(GPIOC, GPIO_Pin_4| GPIO_Pin_5 );

 

 

        /* Clear the EXTI line 9 pending bit */

        EXTI_ClearITPendingBit(EXTI_Line3);

    }

}

 

/*******************************************************************************

* Function Name : EXTI4_IRQHandler

* Description : This function handles External interrupt Line 4 request.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void EXTI4_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line4) != RESET)

    {

        //Led_RW_OFF();

        GPIO_ResetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5);

        /* Clear the EXTI line 9 pending bit */

        EXTI_ClearITPendingBit(EXTI_Line4);

    }

}


推荐阅读

史海拾趣

百事通科技(BUDDIES)公司的发展小趣事

为了降低成本、提高效率,百事通科技(BUDDIES)开始着手进行产业链整合。公司与上下游企业建立了紧密的合作关系,通过优化供应链、共享资源等方式,实现了产业链的协同发展。这一举措不仅提高了公司的运营效率,还增强了公司的市场竞争力。

汇科公司的发展小趣事

随着市场的不断发展和变化,汇科公司始终将技术创新作为发展的核心驱动力。2012年,汇科第一台球磨机节电柜研发成功,并成功申请国家专利,这标志着公司在节能环保技术领域取得了重要突破。随后,公司又成功研发了柱塞泵节电柜、新一代全智能球磨机节电柜等产品,这些产品不仅提升了公司的市场竞争力,也推动了整个电子行业的发展。

Boundary Devices公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如物联网的快速发展、人工智能的崛起等。面对这些变革,Boundary Devices积极调整战略,加强在物联网和人工智能领域的研发投入,推出了一系列符合市场趋势的新产品。同时,公司还加强与高校和研究机构的合作,共同推动电子行业的创新与发展。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

随着市场的竞争加剧,Elite Enterprises意识到只有不断提升产品品质和技术水平,才能在竞争中立于不败之地。因此,公司加大了对研发的投资,不断引进先进的生产设备和检测仪器,并严格把控原材料采购和生产流程。这些努力使公司的LED产品在光效、寿命和稳定性等方面均达到了行业领先水平。

ELPIDA公司的发展小趣事

2012年,由于无法承受巨大的财务压力和市场竞争压力,ELPIDA宣布破产保护。随后,美国美光科技公司(Micron Technology)以较低的价格收购了ELPIDA。这一事件标志着日本在DRAM领域的彻底失败,同时也为美光公司带来了重要的技术和市场资源。

CINCH公司的发展小趣事

CINCH公司作为一家在电子行业颇具影响力的企业,始终致力于技术研发和产品创新。某年,公司研发团队成功开发出一种新型的连接器技术,该技术不仅提高了数据传输速度,还增强了设备的稳定性和耐用性。这一技术突破迅速引起了市场的关注,CINCH公司趁热打铁,推出了一系列基于新技术的产品,迅速占领了市场份额,实现了业务的快速增长。

问答坊 | AI 解惑

高性能模/数转换器AD6645及其应用

豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板  180元 DSP5402学习开发板II200元 LABTOOL-48UXP &nb ...…

查看全部问答>

LINUX

电子教案,需要的快下哦…

查看全部问答>

PCB布线的几点经验

1、输入端与输出端的边线应避免相邻平行, 以免产生反射干扰。必要时应加地线隔离;两相邻层的布线要互相垂直,平行容易产生寄生耦合。 2、地线>电源线>信号线,通常信号线宽为:8mil~12mil;电源线为50mil~100mil。对数字电路 ...…

查看全部问答>

EVC中是不是不支持settimer的SLIDER_TIMER参数??

EVC中是不是不支持settimer的SLIDER_TIMER参数??         mSliderTimer = SetTimer(SLIDER_TIMER, 100, NULL); 报错是:error C2065: \'SLIDER_TIMER\' : undeclared identifier…

查看全部问答>

EVC环境下为什么delete对象无法释放内存

我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!…

查看全部问答>

注册公司的步骤

注册公司的步骤一、选择公司的形式: 普通的有限责任公司,最低注册资金3万元,需要2个或2个以上的股东, 从06年1月起新的公司法规定,允许1个股东注册有限责任公司,这种特殊的有限责任公司又称“一人有限公司”(但公司名称中不会有“一人”字 ...…

查看全部问答>

ADI实验室电路DIY项目指南

报名参与:『ADI实验室电路DIY大赛』正式启动!https://bbs.eeworld.com.cn/thread-293726-1-1.html ADI实验室电路品种繁多,涉及面很广,如何选择合适的DIY项目可能是件容易令人困扰的事,但深究起来,其实可玩性是很大的,从今天开始,我将陆续 ...…

查看全部问答>

大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败

如题,下面一段程序中,DeviceIoControl访问OID_802_11_BSSID_LIST老是失败(见下面红色),也就是说bResult一直等于0;为什么?请教牛人!!!可能的问题出现在哪?为什么第二个DeviceIoControl失败?#include \"stdafx.h\"#include <windows.h ...…

查看全部问答>

介绍java的接口和原理

       卓跃教育发现随着采用Android系统的谷歌手机、平板电脑等产品逐渐扩大市场占有率,Android平台人才的缺口日益显现。据业内统计,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少30万。&n ...…

查看全部问答>