STM32F407 GPIO口输入配置配置步骤

发布者:TranquilGaze最新更新时间:2024-09-04 来源: elecfans关键字:STM32F407  GPIO口  输入配置  配置步骤 手机看文章 扫描二维码
随时随地手机看文章

介绍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


关键字:STM32F407  GPIO口  输入配置  配置步骤 引用地址:STM32F407 GPIO口输入配置配置步骤

上一篇:stm32的五个时钟源参数设置经验
下一篇:ROS与STM32串口通信代码

推荐阅读最新更新时间:2024-11-08 18:29

STM32F407-基于AD7606进行多路数据采集
1.原理图 2.管脚定义 2.1 OS2,OS1,OS0 查阅数据手册 这三个管脚组合控制过采样模式。 000 表示无过采样,最大 200Ksps 采样速率。 001 表示 2 倍过采样, 也就是硬件内部采集 2 个样本求平均。 010 表示 4 倍过采样, 也就是硬件内部采集 4 个样本求平均。 011 表示 8 倍过采样, 也就是硬件内部采集 8 个样本求平均。 100 表示 16 倍过采样, 也就是硬件内部采集 16 个样本求平均。 101 表示 32 倍过采样, 也就是硬件内部采集 32 个样本求平均。 110 表示 64 倍过采样, 也就是硬件内部采集 64 个样本求平均。 过采样倍率越高,ADC 转换时间越
[单片机]
STM32F407-基于AD7606进行多路数据采集
基于STM32F407时钟配置学习
2F4x系列时钟树如下: 1、系统时钟SYSCLK 在STM32F407中,除了一些特定的时钟(例如,USB OTG FS时钟,I2S时钟)外,系统所有外设的时钟均是通过SYSCLK来提供的。也就是说我们经常用到的外设时钟,都是通过SYSCLK分频得到的。下面是和SYSCLK相关的时钟树的图。 由图中可以看到,SYSCLK的来源主要有三个。 - HSI 振荡器时钟 - HSE 振荡器时钟 - 主 PLL (PLL) 时钟 下面分别来看下系统时钟SYSCLK的三个来源。 (1) 高速外部时钟HSE(4M~26M) 高速外部时钟是芯片内部的HSE振荡器产生的。高速外部信号(HSE)有两个时钟源。 - HSE外
[单片机]
基于<font color='red'>STM32F407</font>时钟<font color='red'>配置</font>学习
stm32f407GPIO(操作寄存器)
stm32f407VG这款单片机上共有PA-PE共5×16共80个复用IO口,每个通用I / O端口有4个32位配置寄存器(GPIOx_MODERGPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUPDR),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位的置位/复位寄存器(GPIOx_BSRR),32位锁定寄存器(GPIOx_LCKR)和两个32位的备用功能选择寄存器(GPIOx_AFRHGPIOx_AFRL)。 设置步骤: 1. 使能相关时钟 2. 设置相应的IO口为输入或输出 3. 设置输入输出的类型 4. 设置输出的速度(如果设置为输入,此步跳
[单片机]
stm32的gpio口的介绍
我最近在学stm32,想和大家分享自己的学习成果,也和大家一起学习交流。之前学习过15的库函数的套用,经过一段时间摸索,我对stm32的使用有了基础的了解。因为板子不是正点原子和野火,所以有些不同。 每个板子视频教学第一个介绍都是stm32的gipo口的介绍,这个io口跟51的io口定义全然不同,并且能配置自身频率,而且有些定义用到了结构体。而且stm32是32位的单片机,内部的32位寄存器太多,很难记住,所以建议使用库函数的办法,先学会套用,后来在更改参数或者做一些小项目的时候,对一些寄存器做一些更深入的理解。 首先我们讲一下gipo口void led_init(void) { GPIO_InitTypeDe
[单片机]
STM32的ADC输入通道配置
STM32中最多有3个ADC模块,每个模块对应的通道不完全重叠。 下图是STM32F103CDE数据手册中的总框图的左下角,图中可以看出有8个外部ADC管脚分别接到了3个ADC模块,有8个外部ADC管脚只分别接到了2个ADC模块,还有5个外部ADC管脚只接到了ADC3模块,这样总共是21个通道。 下表是这些ADC管脚与每个ADC模块的对应关系,表中可以看出ADC1还有2个内部通道,分别接到内部的温度传感器和内部的参照电压:
[单片机]
STM32的ADC<font color='red'>输入</font>通道<font color='red'>配置</font>
SEW-MOVIPRO启动应用程序配置程序设置步骤
启动应用程序配置程序 使用应用程序配置程序,您可以确定使用MOVIPRO执行哪些应用程序。可以进行不同的配置,从简单的速度设置点到总线定位。 大众汽车的MOVIPRO设备与AMA0801应用模块一起工作。应用模块在电源部分启动,即逆变器本身。 为了允许过程数据通过PROFINET操作应用模块,数据必须简单地“通过”控制器。要启用此直通,在应用程序配置程序中设置“透明6PD”模式。 设置应用程序配置程序 在控制器上启动应用程序配置程序。 右键单击控制器,然后选择“应用程序模块”,然后左键单击“应用程序配置程序”: 应用程序配置程序的启动界面打开: 目前没有预先存在的g配置。左键单击以“创建新配置”。 这将打开配置界面
[嵌入式]
SEW-MOVIPRO启动应用程序<font color='red'>配置</font>程序设置<font color='red'>步骤</font>
stm32f407外部中断
一,外部中断的概念 STM32F4 的每个 IO 都可以作为外部中断输入。 STM32F4 的中断控制器支持 22 个外部中断 / 事件请求: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。 EXTI线18:连接到USB OTG FS唤醒事件。 EXTI线19:连接到以太网唤醒事件。 EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。 EXTI线21:连接到RTC入侵和时间戳事件。 EXTI线22:连接到RTC唤醒事件。 每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用
[单片机]
<font color='red'>stm32f407</font>外部中断
使用STM32CubeMx配置STM32输入捕获功能
输入捕获原理 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果开放了中断或者DMA操作,则将产生中断或者DMA请求。如果发生捕获事件时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置1。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。 摘自《STM32参考手册中文》 简单解释:定时器一直在计数,如果检测到设置的极性边沿,会把当前的计数值存下来,并触发中断; 比如,
[单片机]
使用STM32CubeMx<font color='red'>配置</font>STM32<font color='red'>输入</font>捕获功能
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved