STM32F407 GPIO口输入配置配置步骤

发布时间:2024-09-04  

介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。

【1】F407建工程所需依赖文件

img

img

img

img

img

img

【2】新建工程

img

img

img

img

img

img

img

img

img

img

img

【3】分析KEY按键硬件原理图

img

img

img

【4】编写KEY按键驱动代码

查看数据手册:

img

img

key.c文件代码如下:


#include 'key.h'

 /*

 函数功能:按键初始化配置

 硬件连接:

 KEY0 --- >PE4  按下为低电平

 KEY1 --- >PE3  按下为低电平

 KEY2 --- >PE2  按下为低电平

 KEY_UP-- >PA0  按下为高电平

 */

 void KEY_Init(void)

 {

 /*1. 开时钟*/

   RCC- >AHB1ENR|=1< < 0;//使能PORTA时钟

 RCC- >AHB1ENR|=1< < 4;//使能PORTE时钟

 

   /*2. 配置GPIO口模式*/

   GPIOE- >MODER&=~(0x3< < 2*2); //清除模式

 GPIOE- >MODER|=0x0< < 2*2;    //配置输入模式

 

 GPIOE- >MODER&=~(0x3< < 3*2); //清除模式

 GPIOE- >MODER|=0x0< < 3*2;    //配置输入模式

 

 GPIOE- >MODER&=~(0x3< < 4*2); //清除模式

 GPIOE- >MODER|=0x0< < 4*2;    //配置输入模式

 

 GPIOA- >MODER&=~(0x3< < 0*2); //清除模式

 GPIOA- >MODER|=0x0< < 0*2;    //配置输入模式

 

 /*3. 配置GPIO口上下拉模式*/

 GPIOE- >PUPDR&=~(0x3< < 2*2); //清除之前配置

 GPIOE- >PUPDR|=0x1< < 2*2;    //配置上拉

 

 GPIOE- >PUPDR&=~(0x3< < 3*2); //清除之前配置

 GPIOE- >PUPDR|=0x1< < 3*2;    //配置上拉

 

 GPIOE- >PUPDR&=~(0x3< < 4*2); //清除之前配置

 GPIOE- >PUPDR|=0x1< < 4*2;    //配置上拉

 

 GPIOA- >PUPDR&=~(0x3< < 0*2); //清除之前配置

 GPIOA- >PUPDR|=0x2< < 0*2;    //配置下拉

 }

 

 

 /*

 函数功能:扫描按键

 函数参数:扫描的模式。1表示连续检测、0只能检测单个按键

 返 回 值:按下的按键值1、2、3、4

           返回0表示按键没有按下

 */

 u8 ScanKeyVal(u8 mode)

 {

 static u8 stat=0; //保存按键按下的状态

 if(mode)stat=0;   //手动清除按键按下标志

 if((KEY_UP||KEY0==0||KEY1==0||KEY2==0)&&stat==0)

 {

 stat=1;      //标记按键已经按下了

 DelayMs(20); //延时消抖

 if(KEY_UP) return 4;

 if(KEY0==0)return 1;

 if(KEY1==0)return 2;

 if(KEY2==0)return 3;

 }

 else

 {

   if(KEY_UP==0&&KEY0&&KEY1&&KEY2)stat=0; //清除按键按下标志

 }

 return 0;

 }

 

key.h代码如下


#ifndef _KEY_H

 #define _KEY_H

 #include 'stm32f4xx.h'

 #include 'delay.h'

 void KEY_Init(void);

 u8 ScanKeyVal(u8 mode);

 #define KEY0  (!!(GPIOE- >IDR&1< < 4))

 #define KEY1  (!!(GPIOE- >IDR&1< < 3))

 #define KEY2  (!!(GPIOE- >IDR&1< < 2))

 #define KEY_UP (!!(GPIOA- >IDR&1< < 0))

 #endif

 

Main.c代码如下


#include 'stm32f4xx.h' // Device header

 #include 'led.h'

 #include 'delay.h'

 #include 'key.h'

 

 int main(void)

 {

 u8 key,i;

 LED_Init();

 KEY_Init();

 while(1)

 {

  key=ScanKeyVal(0);

  if(key)

  {

   i=!i;

 LED0(i);

   LED1(i);

 BEEP(i);

  }

 }

 }


【5】编译代码 配置下载

img

img


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    );     TimerCount=0; } } 烧录测试一下,是否可以改变波形和调整参数借助上位机调节PID 调节P 把I=0、D=0先给正值或负值值测试P 正负、然后根据PID函数输入......
    返回根目录。 6、7 配合可以输入信号参数值。参数调节旋钮7下方还有左右两个箭头,按下后可以左右调节屏幕下方参数输入框里光标所在的位置,局部修改参数值。 设定好了信号参数后,按区域3通道......
    DC的可加载输出电压。对数调整动态范围为:当正弦输入为-75 dBm时,输出为+0.5 V;当输入为+5 dBm时,输出为+3.5 V。超出此范围时,对数线性度典型值在±0.4 dB以内。所有调整参数......
    -3588J多屏拼接固件(提取码:1234) 2. 升级固件(升级方法参考维基教程) 3. 将HDMI、VGA、DP显示屏分别接入主板 4. 主板上电开机 应用场景 广泛适用于智能广告机、医疗......
    倍数) 为6。 结果显示放大倍数与变压器的初级绕组漏感(leakage inductance) 直接相关。因此,为了实现精确的放大倍数,这个寄生参数需要设有最小容差。为了实现这个目标,要使......
    基于FreeRTOS的机智云接入教程分享;本教程是使用的STM32F103C8T6,并结合FreeRTOS和机智云撰写的教程。其中使用操作系统主要是为了保证系统的稳定性,否则当逻辑复杂之后,很容......
    的模式有两种:输入(INPUT)和输出(OUTPUT)。输入模式表示引脚可以读取外部信号的电压值,输出模式表示引脚可以控制外部元件的电压值。 设置引脚模式的函数是pinMode(),它有两个参数:引脚......
    块的接口  步骤  要定义接口,请按以下步骤操作:  1.   在“Input” 部分定义带有以下属性的输入参数:  –  名称:"Duration"  –  数据类型:"Int"  可在此参数......
    对管脚进行了初始化的配置。 HAL_GPIO_DeInit()函数 该函数的作用是重置GPIO口,由下图可知,该函数输入GPIO管脚号即可初始化对应的GPIO。 HAL_GPIO_WritePin()函数 该函......
    磁场的分布图,如下图所示。假如对于电机气隙磁场分布十分感兴趣,请留言,本人详细地告诉你关于气隙磁场分布的数学公式推导过程。 如下图所示,是分别采用解析法和有限元法,计算......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>