历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2018年12月11日 | STM32中断方式检测按键

2018-12-11 来源:eefocus

1.简述


对于按键,常见的是通过MCU不断检测按键连接 GPIO 的状态变化(高–>低或低—>高),来确认是否有按键输入,这样的缺点很明显,MCU 一直在循环检测,对资源是一种浪费,不够高效。对于STM32,GPIO 是可以配置成中断的,有这个优势,我们就可以通过中断的方式来检测 GPIO 上电平的变化,进一步的得到按键的状态。


2.硬件电路


这里写图片描述


按键无上拉电阻,需要在 GPIO 上设为上拉状态,提供一个确定电平。


3.驱动实现


//按键初始化做了三件事

///1.按键连接的GPIO初始化;2.中断配置初始化;3.中断优先级配置

void Key_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    EXTI_InitTypeDef EXTI_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //GPIOA时钟使能

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //复用功能时钟打开

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //关闭JTAG


    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15); //配置GPIO为中断引脚

    EXTI_InitStructure.EXTI_Line = EXTI_Line15;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);


    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}


//中断服务函数

void EXTI15_10_IRQHandler(void)

    {

        if(EXTI_GetITStatus(EXTI_Line15) != RESET)  //检测是否触发对应的中断

    {

        delay_ms(10);

        LED0 = !LED0;//按键触发,灯的状态翻转

    }

    EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标志


}

推荐阅读

史海拾趣

上海国芯(Gcore)公司的发展小趣事
用于赛车、滑冰等体育项目的速度监测和超速报警。
Apx-Crystal公司的发展小趣事

作为一家有社会责任感的企业,Apx-Crystal公司始终将可持续发展作为企业的核心价值观之一。公司积极履行社会责任,关注环境保护和公益事业。在生产过程中,公司采用环保材料和节能技术,降低能耗和排放;在员工福利方面,公司注重员工培训和职业发展,为员工提供良好的工作环境和福利待遇;在社会公益方面,公司积极参与捐资助学、扶贫济困等公益活动,回馈社会。这些举措不仅提升了企业的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事都是基于电子行业的普遍发展情况和趋势虚构的,旨在展示一个类似Apx-Crystal公司在不同方面的发展情况和成就。请注意,这些故事并非基于真实事件或数据,因此可能与实际情况存在差异。

客益(Guestgood)公司的发展小趣事

作为一家有社会责任感的企业,Apx-Crystal公司始终将可持续发展作为企业的核心价值观之一。公司积极履行社会责任,关注环境保护和公益事业。在生产过程中,公司采用环保材料和节能技术,降低能耗和排放;在员工福利方面,公司注重员工培训和职业发展,为员工提供良好的工作环境和福利待遇;在社会公益方面,公司积极参与捐资助学、扶贫济困等公益活动,回馈社会。这些举措不仅提升了企业的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事都是基于电子行业的普遍发展情况和趋势虚构的,旨在展示一个类似Apx-Crystal公司在不同方面的发展情况和成就。请注意,这些故事并非基于真实事件或数据,因此可能与实际情况存在差异。

Codeco Corporation Of Vermont公司的发展小趣事

随着公司的发展,Codeco逐渐意识到技术创新的重要性。他们投入大量资源研发新技术,不断提升产品的性能和用户体验。在一次关键的研发项目中,Codeco的团队突破了某项技术难题,推出了一款引领行业潮流的新产品。这一创新不仅为公司带来了可观的收益,也进一步巩固了Codeco在电子行业的地位。

EMC [ELAN Microelectronics Corp]公司的发展小趣事

义隆电子一直注重人才培养和团队建设。公司积极引进国内外各知名学府的优秀人才,并提供完善的在职培训和优厚的福利待遇。同时,公司还建立了高效的团队协作机制,鼓励员工之间的交流和合作。这种注重人才培养和团队建设的策略使得义隆电子能够保持持续的创新能力和市场竞争力。

Eclipse Magnetics公司的发展小趣事

义隆电子一直注重人才培养和团队建设。公司积极引进国内外各知名学府的优秀人才,并提供完善的在职培训和优厚的福利待遇。同时,公司还建立了高效的团队协作机制,鼓励员工之间的交流和合作。这种注重人才培养和团队建设的策略使得义隆电子能够保持持续的创新能力和市场竞争力。

问答坊 | AI 解惑

06年薪资提升最快的12大行业

06年薪资提升最快的12大行业06年薪资提升最快的12大行业文章来源:广东省嵌入式软件公共技术中心培训www.gdemb.com“求职之路难”是很多求职者的感叹。在增加自身含金量的同时,也要摸清人力市场行情,为自己选个好职业。06年,哪些职业较为热门 ...…

查看全部问答>

利用ADC0804做一个真正的电压表

本帖转载自www.mcusy.com,作者月夜。…

查看全部问答>

学习学习GPS

GSV GSA GGA分别是什么 a.GPS固定数据输出语句($GPGGA)这是一帧GPS定位的主要数据,也是使用最广的数据。$GPGGA 语句 包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量, 水平精确度,海拔高 ...…

查看全部问答>

LED户外大屏幕基础知识

replyreload += \',\' + 374037;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

周公M0新原理图

周公的M0开发板的原理图终于更新了…

查看全部问答>

关于控制USB外设的问题

我是第一次作这方面的东西: 我感觉:首先要判断次外设的存在(包括他的插入于拔除)         向外设发送控制命令(包括向他提供数据)。 不知道思路是不是有问题,请各位给个思路。 …

查看全部问答>

我用的是Wince5.0+EVC开发,怎么实现用程序设置网络呢?

我用的是Wince5.0+EVC开发,怎么实现用程序设置无线网络呢? 如设置Wep加密,设置IP地址,DHCP等,请大家给个思路啊…

查看全部问答>

分享一个因初始化引发的奇怪问题

项目到了后期,我开始一点点整理程序,把一些最初草率直接在调用处写的短函数封装成子函数。就在这些我觉得无关紧要的改动以后,前几天我发出一个最新的测试版本,居然反馈回来一个非常奇怪的现象,在那边,主从机无法通讯!可是我办公室这边却好好 ...…

查看全部问答>

Linux 常用C函数(中文版)

很详细的c函数介绍文档,我一直把他当做工具书来用,分享给大家! 如果哪位大侠把这个网页式的工具做成chm格式的电子书就完美了,哈哈 截图,先睹为快 [ 本帖最后由 HOHO 于 2012-8-8 16:42 编辑 ]…

查看全部问答>

用IAR 8.3编译TI BLE Stack遇到Segment ISTACK Too Long的解决方案

IAR 8.3以后的版本编译TI BLE Stack会报类似如下的错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment   ...…

查看全部问答>