基于stm32按键中断实验中说明所有按键的有效电平以及GPIO输入模式。
1个回答
关注
展开全部
您好亲在STM32按键中断实验中,常用的按键有两种类型:常开型和常闭型。常开型按键在未按下时,两个引脚之间为断路状态,此时输入引脚为高电平。当按下按键后,两个引脚之间变为通路状态,此时输入引脚为低电平。常闭型按键在未按下时,两个引脚之间为通路状态,此时输入引脚为低电平。当按下按键后,两个引脚之间变为断路状态,此时输入引脚为高电平。在STM32中,GPIO输入模式有两种:上拉输入模式和下拉输入模式。上拉输入模式指的是将输入引脚与VDD(电源正极)连接,此时输入引脚未接触到外部信号时,输入引脚为高电平。下拉输入模式指的是将输入引脚与GND(电源负极)连接,此时输入引脚未接触到外部信号时,输入引脚为低电平。在STM32按键中断实验中,一般使用上拉输入模式,因为大多数按键在未按下时,输入引脚需要为高电平状态。同时,在使用外部中断时,需要将GPIO设置为输入模式,并使能外部中断。
咨询记录 · 回答于2023-05-03
基于stm32按键中断实验中说明所有按键的有效电平以及GPIO输入模式。
您好亲在STM32按键中断实验中,常用的按键有两种类型:常开型和常闭型。常开型按键在未按下时,两个引脚之间为断路状态,此时输入引脚为高电平。当按下按键后,两个引脚之间变为通路状态,此时输入引脚为低电平。常闭型按键在未按下时,两个引脚之间为通路状态,此时输入引脚为低电平。当按下按键后,两个引脚之间变为断路状态,此时输入引脚为高电平。在STM32中,GPIO输入模式有两种:上拉输入模式和下拉输入模式。上拉输入模式指的是将输入引脚与VDD(电源正极)连接,此时输入引脚未接触到外部信号时,输入引脚为高电平。下拉输入模式指的是将输入引脚与GND(电源负极)连接,此时输入引脚未接触到外部信号时,输入引脚为低电平。在STM32按键中断实验中,一般使用上拉输入模式,因为大多数按键在未按下时,输入引脚需要为高电平状态。同时,在使用外部中断时,需要将GPIO设置为输入模式,并使能外部中断。
我想问一下就是刚才我发的图中按键的有效电平和GPIO输入模式,不太明白
按键的有效电平是指按键在按下时与未按下时的电平状态。常开型按键在未按下时,输入引脚为高电平;在按下时,输入引脚为低电平。常闭型按键在未按下时,输入引脚为低电平;在按下时,输入引脚为高电平。这个有效电平是指在按键的使用过程中,需要注意的电平状态。GPIO输入模式是指STM32的GPIO引脚所处的工作模式。在输入模式下,GPIO引脚能够接受外部信号,并将信号传输到STM32芯片中。在输入模式中,GPIO引脚可以设置为上拉输入模式或下拉输入模式。上拉输入模式指的是将输入引脚与VDD(电源正极)连接,此时输入引脚未接触到外部信号时,输入引脚为高电平。下拉输入模式指的是将输入引脚与GND(电源负极)连接,此时输入引脚未接触到外部信号时,输入引脚为低电平。在STM32按键中断实验中,一般使用上拉输入模式,因为大多数按键在未按下时,输入引脚需要为高电平状态。同时,在使用外部中断时,需要将GPIO设置为输入模式,并使能外部中断。这样,当按键被按下时,GPIO输入引脚的电平状态就会发生变化,触发外部中断。
在头文件中使用宏定义来定义外设GPIO引脚的优势是什么呢
在头文件中使用宏定义来定义外设GPIO引脚的优势如下:1. 方便修改:使用宏定义来定义GPIO引脚,可以方便地修改GPIO引脚的配置。如果直接在代码中使用具体的GPIO引脚编号,当需要更改GPIO引脚时,需要在代码中逐个修改,比较繁琐。而使用宏定义,只需要修改头文件即可。2. 提高可读性:使用宏定义定义GPIO引脚,可以提高代码可读性。在代码中使用具体的GPIO引脚编号,可能会降低代码可读性,让代码难以理解。而使用宏定义,可以为GPIO引脚定义有意义的名称,让代码更加易读。3. 降低出错率:使用宏定义来定义GPIO引脚,可以降低代码出错率。在代码中使用具体的GPIO引脚编号,可能会出现拼写错误、复制粘贴错误等问题,导致代码出错。而使用宏定义,可以避免这些问题,提高代码的稳定性。4. 方便移植:使用宏定义来定义GPIO引脚,可以方便地移植代码到其他平台。不同的芯片可能会有不同的GPIO引脚编号,如果直接在代码中使用具体的GPIO引脚编号,移植代码时需要逐个修改,比较麻烦。而使用宏定义,只需要修改头文件即可,移植代码更加方便。
在外部中断服务函数中,一般为了效率不会调用延时函数,但是在STM32按键中断实验中使用延时函数作为实验会存在一个异常问题:在主函数和中断服务函数中均调用缺少temp & 0x01条件判断的延时函数,会出现进入死循环的情况,为什么会出现此现象的原因,还有为什么添加temp & 0x01就可以解决此问题?
在STM32按键中断实验中,在主函数和中断服务函数中都调用了延时函数,这个延时函数可能会使用循环来实现延时,而循环会消耗CPU的大量时间,导致中断服务函数的执行时间变长,影响系统的实时性,甚至可能会导致系统死机。在添加temp & 0x01条件判断之后,可以避免进入死循环的情况。原因是:temp & 0x01的意思是对temp的最低位进行与操作,如果最低位为1,则条件成立;否则条件不成立。由于temp的值在中断服务函数中被修改,因此temp & 0x01的值会随之改变。在中断服务函数执行完后,temp的最低位一定会变为0,因此在主函数中调用延时函数时,temp & 0x01的值为0,条件不成立,延时函数不会进入死循环,程序正常执行。而在中断服务函数中调用延时函数时,temp & 0x01的值为1,条件成立,延时函数会执行相应的延时,但不会进入死循环。因此,在中断服务函数中,为了保证系统的实时性,一般不建议使用延时函数,而应该尽可能快地执行中断服务函数,并尽快退出中断服务函数。如果确实需要使用延时函数,可以添加类似temp & 0x01的条件判断来避免进入死循环的情况。
在基于STM32按键中断实验过程中,通过添加system.h可以令输入输出使用这样的方式完成:LED1 = 0;LED2 = 0;LED1 = !LED1;LED2 = !LED2;这种控制方式的名称是啥,这种方式与GPIO_SetBits和GPIO_ResetBits有什么差别。
这种控制方式的名称是“位操作(Bit Manipulation)”或者“位运算(Bitwise Operation)”。它是通过直接操作寄存器的位来控制GPIO引脚的输出状态。在STM32的GPIO寄存器中,每个引脚都有一个对应的位,可以通过修改这个位的值来控制引脚的输出状态。例如,将LED1对应的位设置为0,就可以将LED1输出低电平,将LED1对应的位设置为1,就可以将LED1输出高电平。与GPIO_SetBits和GPIO_ResetBits相比,位操作更加底层,能够直接操作寄存器,因此执行速度更快,占用的系统资源更少。而GPIO_SetBits和GPIO_ResetBits是封装好的库函数,需要调用多个函数来完成GPIO引脚的控制,执行速度相对较慢,占用的系统资源相对较多。但是,GPIO_SetBits和GPIO_ResetBits更加易用,可以直接通过引脚名称来控制GPIO引脚的状态,不需要了解寄存器的具体结构和位定义,因此更加适合初学者。
本回答由意法半导体(中国)投资有限公司提供