问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

stm32实现按键功能 新手求助

发布网友 发布时间:2022-05-01 13:52

我来回答

2个回答

热心网友 时间:2023-10-16 08:49

你说的应该是按键触发外部中断的功能吧?

如果是继续往下看:stm32实现功能都是一个套路

配置你所用按键的引脚的GPIO和中断(我这里是以PA0引脚为例,用时候修改为你的引脚)

void EXTI_PA0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* config the extiline clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
/* config the NVIC */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* 配置中断源 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Configuration();
/* EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* EXTI line mode config */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

2.经过以上配置,当外部按键中断触发时就会执行,stm32f10x_it.c中的,对应外部中断函数,此时把你需要进行的操作加入函数中(比如点亮熄灭led)

void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
//确保是否产生了 EXTI Line 中断
// LED1 取反
LED1_TOGGLE;//这里需要改为你要实现的功能,
EXTI_ClearITPendingBit(EXTI_Line0);
//清除中断标志位
}

}

热心网友 时间:2023-10-16 08:50

定时器中断中周期性的查询按键IO口(如20ms),连续多次(如5次100ms)检测到按键有效就把按键短按消息发送到消息队列,如果连续很多次(50次5s),检测到按键按下,就发送按键长按消息到消息队列。
这样设计存在一个问题,就是长按之前必须有一个短按,如果不影响你的应用这样做就可以了,如果要排除这个问题,在一次按下和抬起之间计次数,抬起以后判断时间长度,进而判断按键。

热心网友 时间:2023-10-16 08:49

你说的应该是按键触发外部中断的功能吧?

如果是继续往下看:stm32实现功能都是一个套路

配置你所用按键的引脚的GPIO和中断(我这里是以PA0引脚为例,用时候修改为你的引脚)

void EXTI_PA0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* config the extiline clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
/* config the NVIC */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* 配置中断源 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Configuration();
/* EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* EXTI line mode config */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

2.经过以上配置,当外部按键中断触发时就会执行,stm32f10x_it.c中的,对应外部中断函数,此时把你需要进行的操作加入函数中(比如点亮熄灭led)

void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
//确保是否产生了 EXTI Line 中断
// LED1 取反
LED1_TOGGLE;//这里需要改为你要实现的功能,
EXTI_ClearITPendingBit(EXTI_Line0);
//清除中断标志位
}

}

热心网友 时间:2023-10-16 08:50

定时器中断中周期性的查询按键IO口(如20ms),连续多次(如5次100ms)检测到按键有效就把按键短按消息发送到消息队列,如果连续很多次(50次5s),检测到按键按下,就发送按键长按消息到消息队列。
这样设计存在一个问题,就是长按之前必须有一个短按,如果不影响你的应用这样做就可以了,如果要排除这个问题,在一次按下和抬起之间计次数,抬起以后判断时间长度,进而判断按键。

热心网友 时间:2023-10-16 08:49

你说的应该是按键触发外部中断的功能吧?

如果是继续往下看:stm32实现功能都是一个套路

配置你所用按键的引脚的GPIO和中断(我这里是以PA0引脚为例,用时候修改为你的引脚)

void EXTI_PA0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* config the extiline clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
/* config the NVIC */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* 配置中断源 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Configuration();
/* EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* EXTI line mode config */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

2.经过以上配置,当外部按键中断触发时就会执行,stm32f10x_it.c中的,对应外部中断函数,此时把你需要进行的操作加入函数中(比如点亮熄灭led)

void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
//确保是否产生了 EXTI Line 中断
// LED1 取反
LED1_TOGGLE;//这里需要改为你要实现的功能,
EXTI_ClearITPendingBit(EXTI_Line0);
//清除中断标志位
}

}

热心网友 时间:2023-10-16 08:49

你说的应该是按键触发外部中断的功能吧?

如果是继续往下看:stm32实现功能都是一个套路

配置你所用按键的引脚的GPIO和中断(我这里是以PA0引脚为例,用时候修改为你的引脚)

void EXTI_PA0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* config the extiline clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
/* config the NVIC */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* 配置中断源 */

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Configuration();
/* EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* EXTI line mode config */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

2.经过以上配置,当外部按键中断触发时就会执行,stm32f10x_it.c中的,对应外部中断函数,此时把你需要进行的操作加入函数中(比如点亮熄灭led)

void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
//确保是否产生了 EXTI Line 中断
// LED1 取反
LED1_TOGGLE;//这里需要改为你要实现的功能,
EXTI_ClearITPendingBit(EXTI_Line0);
//清除中断标志位
}

}

热心网友 时间:2023-10-16 08:50

定时器中断中周期性的查询按键IO口(如20ms),连续多次(如5次100ms)检测到按键有效就把按键短按消息发送到消息队列,如果连续很多次(50次5s),检测到按键按下,就发送按键长按消息到消息队列。
这样设计存在一个问题,就是长按之前必须有一个短按,如果不影响你的应用这样做就可以了,如果要排除这个问题,在一次按下和抬起之间计次数,抬起以后判断时间长度,进而判断按键。

热心网友 时间:2023-10-16 08:50

定时器中断中周期性的查询按键IO口(如20ms),连续多次(如5次100ms)检测到按键有效就把按键短按消息发送到消息队列,如果连续很多次(50次5s),检测到按键按下,就发送按键长按消息到消息队列。
这样设计存在一个问题,就是长按之前必须有一个短按,如果不影响你的应用这样做就可以了,如果要排除这个问题,在一次按下和抬起之间计次数,抬起以后判断时间长度,进而判断按键。
新手求助各位师傅,关于STM32通过按键控制流水灯

主要应用到的外设有定时器,GPIO就能够实现流水灯的效果。用定时器做1s的定时中断,在中断程序中进行GPIO 输出高低电平的切换就可以了。

新手求助STM32F051 ADC出来的数据一直为0

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)AD_Value; //DMA内存基地址 这句话有问题,你应该把AD-Value的地址赋值过去,而不是把AD_Value的内容赋值过去,改成这样试试 DMA_InitStructure.DMA_MemoryBaseAddr = (&AD_Value);

新人求助,stm32的板子买什么版本的比较好

STM32的板子按需购买,不同版本的引脚以及内部外设各不相同,根据你需求选择最合适的板子。如果是新手学习,或者是好多类型都可以用,没有具体要求的;建议买F103或F407系列,后者比前者更强大更贵。例如STM32F103ZET6这款最经典的板子。买这些主流板子的大优点是前辈们用的多!网上有无数的成品历程,当...

新手求助STM32F051 ADC出来的数据一直为0

void RCC_Configuration(void); void NVIC_Configuration(void); 是时钟和中断的配置函数声明,如果你确定你在该文件中没有使用就可以去掉 延时子程序延时长短取决于传送过来的参数nCount ,以及STM32的时钟及分频情况

新手求助STM32F051 ADC出来的数据一直为0

尝试吧DMA关掉,然后一步一步调试观察。

STM32中,ADC输入通道有18个,16个外部通道,2个内部通道,那16个外部通...

在STM32的(datasheet)数据手册中有,具体的型号引脚分布同,我给你一个我知道的型号的 在网上搜下你的那个型号的datasheet 就可以找到了 希望可以帮到你,望采纳。 本回答由提问者推荐 举报| 答案纠错 | 评论 13 0 lily_magnolia 采纳率:48% 擅长: C/C++ 嵌入式 操作系统开发 Linux 工程技术科学 ...

新手求助,STM32 sprintf函数入口参数用不了u8类型

是的,最近被这个问题弄得很郁闷,本来想把浮点型数字利用sprintf()函数转化为字符串发出去,谁知用不了u8类型的数组作为入口参数,怎么解决?请接着瞧 include <stdio.h> ………u8 temp[6];float ad2 = 3.14;sprintf(temp ," %3.3f ",ad2);compiling……user\stm32f10x_it.c(91): warni...

新手求助,STM32串口通信协议怎么写

STM32串口通信协议编写是要与与之相配的通信设备一起考虑如何编写,外设有协议,按照外设协议规约编写。如果只是一对一且通信距离很短,不需要特规范的协议。协议是为了保证通信可靠性和多机通信人为设定的一套发送和应答格式。具体怎么订这个协议要根据应用环境来判断。但通信协议和指令规约对通信起事半功...

新手求助,GY-30这个模块怎么连接STM32

GY-30是IIC通讯的,VCC,GND都接好,IIC的clk和sda都接到stm32的iic的通讯线路上就可以了。addr是地址引脚是确定iic设备地址的。可以直接接地就可以。

STM32 的SPI总线问题,求助大侠!!

操作步骤如下:1. 为了能够及时响应VS1003的数据要求,需要先将数据缓冲到STM32的RAM中,即先从Flash读取一部分MP3数据到RAM中。然后写满VS1003的512字节缓冲,开始播放。2. VS1003在有缓冲空闲时会产生中断请求,此时缓冲区中至少还能支撑30微秒。如果此时SPI空闲,操作SPI,直接从RAM将数据写入VS1003 ...

stm32多功能按键 stm32单片机多功能按键 stm32按键按下 stm32按键控制 stm32按键切换 stm32如何做按键方案 stm32怎么定义按键 stm32独立按键 stm32按键输入
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
沈阳大道教育的老师看起来比较年轻,教学经验丰富吗? 为什么老师教学经验越丰富,教学效果越差劲 广联达bim使用教程 一个人怎么拍摄视频 电动窗帘轨道卡住了怎么办 7岁儿童牙齿钙化怎么办 牛皮纸压泡纸机 去女友家送花选什么,拜访女友家送花推荐 新买的笔记本硬盘直接换上就可以用吗? 五色饭富含哪些营养价值 壮家人喜爱五色饭把它作为什么的象征_百度知 ... stm32按键中断程序第一次能进中断函数 后来就不行了 stm32外部按键中断无法退出中断问题 最近在自学STM32,写了一个按键中断程序,但是中断总是不响应...望大虾赐教,谢谢....程序如下 STM32中断功能的实现 蔬菜水果批发市一级二级有什么区别 请问我用stm32的外部中断时,使用下降沿触发,那么按键导致下降沿可以触发下降沿从而进入中断函数,但是 STM32能通过按键中断实现连续按键吗 stm32按键的问题 用STM32做矩阵键盘、自己理解的外部中断方式的几个问题。 stm32按键消抖时间大概是多少 stm32的外部中断线 如何防抖动? 给一个按键 就进入中断好多次 怎么办? stm32中断函数中计数,在按键处理函数中查询计数值来消抖,怎么弄的? STM32中断采用按键上升沿怎样消抖啊? 梦见坐公交车手机被偷了,然后我发现后,小偷把手机还给我了,这是什么意思?以前手机被偷过 梦见自已驾车出行遭遇撞车和手机钱包被偷? 梦见在车站等车手机被偷然后去报案? 梦见车子被偷走但小偷的手机掉我家了 梦见车和手机让人偷走了 周公解梦梦见自己被迷晕手机和车都丢了? 冰箱有1-7按几档比较快结冰啊 STM32 按键检测问题。 STM32 EXTI中断问题 STM32矩阵键盘求教。在加上延时,软件去抖动的时候,程序就会在某一个按键上不动,求教那里出错了 一级市场与二级市场的区别: stm32在按键中断里读取按键的值程序卡死了 STM32两个按键怎么用同一个外部中断??? 购房款200万3年拿房产生利息是多少? 按现在的房贷利率,买200万的房子,贷款100万。贷一年要利息多少,贷两年利息要多少? 电脑键盘最上面那排字母打成数字 为什么电话机(手机)与电脑键盘上的数字排列顺序是不一样的呢 雅尼锂电池头灯yanl736t多少钱~个 经常洗碗对手有影响吗? 京东商城充电头灯锂电池多少钱一个 锂电池头灯60伏多少钱有没有 牛王进口锂电池头灯8218价格 佳格锂电池充电式头灯价格yd一612 冬天 气候谚语 用交交易所账户买入华强股份有限公司股票,成交含税费15万,目的是断线持有的会计分录 与冬天有关的气象谚语 为什么不带手套洗碗手会变粗?