STM32之GPIO按键实验

发布者:CyborgDreamer最新更新时间:2018-09-06 来源: eefocus关键字:STM32  GPIO  按键实验 手机看文章 扫描二维码
随时随地手机看文章

实验板:带有按键的Stm32开发板一块,本人用得是Open107V实验板,型号是107的

库函数:STM32官方3.5的库

其他材料:ST-LINK、跳线若干

实验原理:按键实验和LED实验类似, GPIO点灯是向led的pin脚输出高低电平, 而按键则是向pin口输入高低电平。 对于按键有两种输入模式可以选择, 一,采用上拉输入模式,二,采用浮动浮空输入模式,上拉输入模式在没有按键按下的时候是默认是高电平。符合这个要求。原理图如下:

实验描述:PE5连接到key1,用扫描的方式查询是否有按键按下,key1按下时,LED1状态取反。

库文件:startup/start_stm32f10x_cl.s

              CMSIS/core_cm3.c

              CMSIS/system_stm32f10x.c

               FWlib/stm32f10x_gpio.c

               FWlib/stm32f10x_rcc.c

用户文件:USER/main.c

                  USER/ stm32f10x_it.c

                  USER/led.c

                  USER/key.c

首先配置好工程环境,添加h头文件,接着初始化配置GPIO

******************************led.c******************************

#include"led.h"

void LED_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOC,&GPIO_InitStructure);
 GPIO_SetBits(GPIOC,GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5);
}

****************************led.h**********************************

#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
#define ON 1
#define OFF 0
#define LED1(a) if(a) \
     GPIO_SetBits(GPIOC,GPIO_Pin_3);\
      else            \
   GPIO_ResetBits(GPIOC,GPIO_Pin_3)
#define LED2(a) if(a) \
     GPIO_SetBits(GPIOC,GPIO_Pin_4);\
      else            \
   GPIO_ResetBits(GPIOC,GPIO_Pin_4)   
#define LED3(a) if(a) \
     GPIO_SetBits(GPIOC,GPIO_Pin_5);\
      else            \
   GPIO_ResetBits(GPIOC,GPIO_Pin_5) 
void LED_GPIO_Config(void);
#endif             

********************************key.c******************************

#include"led.h"
void Key_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
 GPIO_Init(GPIOE,&GPIO_InitStructure);
 
}

******************************main.c****************************

#include "stm32f10x.h"
#include "led.h"
#define KEY_ON 0
#define KEY_OFF 1
void Delay(__IO u32 nCount);
u8 Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin);

int main(void)
{
  LED_GPIO_Config();
 LED1(ON);
 
 /*config key*/
 Key_GPIO_Config();
 //GPIO_SetBits(GPIOC,GPIO_Pin_3);
 while(1)
 {
  if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON)
  {
     /*config key*/
   GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));
  }
 }
}

u8 Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
{
  
 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)
  {
      Delay(0x7ffff);
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)
     {
        while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON);
      return KEY_ON;
     }
     else
      return KEY_OFF;
  }
  else
   return KEY_OFF;
}

void Delay(__IO u32 nCount)
{
   for(;nCount != 0; nCount--);
}

实验中采用的是3.5版本的库,上电后,启动文件已经调用了SystemInit()将我们的系统时钟SYSCLK配置为72MHZ。进入mian函数,第一步先调用了在LED灯例程中编写的GPIO_Config(),配置为LED用到的I/O。再使用LED1(ON)宏把LED设置为点亮状态。为了使用LED的工程代码,将led.c和led.h文件也添加到工程中直接调用,将led.c添加到工程中就可以了。在main函数中,检测到有按键按下,就开始执行LED反转的操作。

        最后的实验现象是将配套的STM32开发板供电后,插上ST-LINK,将编译好的程序下载到开发板,LED1亮,按下按键时LED1灭,再按下按键LED1亮,再按下灭,如此可以实现控制操作。


关键字:STM32  GPIO  按键实验 引用地址:STM32之GPIO按键实验

上一篇:STM32几种IO设置模式
下一篇:STM32学习记录之GPIO篇

推荐阅读最新更新时间:2024-03-16 16:13

stm32专题二十:FSMC结构体分析
FSMC结构体: 控制FSMC使用SRAM存储器时主要是配置时序寄存器以及控制寄存器,利用ST标准库的SRAM时序结构体以及初始化结构体可以很方便地写入参数。 时序结构体配置: SRAM初始化结构体配置: 硬件连接: 操作的时候,就直接进行指针操作,向相应的地址写入和读出就行了,非常简单。 sram.c #include ./sram/sram.h /** * @brief 初始化控制SRAM的IO * @param 无 * @retval 无 */ static void SRAM_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitSt
[单片机]
<font color='red'>stm32</font>专题二十:FSMC结构体分析
STM32的中断机制 stm32中断方式有几种
STM32的中断机制stm32中断方式有几种 中断机制在单片机中是很重要的环节,中断代码默认地从上往下执行,遇到特定条件或特定语句,将按照指定的程序跳转。而STM32单片机的中断是有两层控制器分别控制的,若采用中断机制,必须同时配置内核和芯片。 在STM32单片机中执行中断机制主要有三个函数,分别是: 1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.自行编写中断服务函数 NVIC是嵌套向量中断控制器,主要控制整个单片机芯片中断相关的功能,跟内核紧密耦合。配置NVIC_Config()函数是为单片机提供选择中断源的优先级及打开中断通道,主要由配置NVIC初始化结构体NVIC_InitStr
[单片机]
STM32中USART接收中断问题使单片机死机
问题描述: 在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发送!问题就出来,不到1分钟时间,通讯没有反应了,死机了。USART配置代码如下: void uart_config(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = UART_GetBaud(BaudRate); USART_InitStructure.USART_WordLength = USA
[单片机]
网络通信之UIP在STM32上的移植
1、什么是UIP协议栈: UIP是一种适用于小型嵌入式通信的TCP/IP协议栈,由瑞典计算机科学院的人开发编写的,它去掉了完整的TCP/IP中不常用的功能,简化了通讯过程,但其保留了网络通信中必须使用的协议,把设计重点放在IP、TCP和ARP协议的实现上。简单易用、占用资源少是它的设计特点。 2、协议栈接口 UIP协议栈通过一系列接口函数与底层函数和上层应用程序通信,在两者之中,UIP接口函数处于中间。 其中UIP提供两个个接口函数给底层系统。分别是 (1)uip_input() 当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用 uip_input() 函数,这个函
[单片机]
网络通信之UIP在<font color='red'>STM32</font>上的移植
stm32控制共阳数码管以及共阴数码管
共阳数码管 #include stm32f10x.h u8table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};//共阳数码管0 1 2 3 4 5 6 7 8的编码 void delayms(u16 time)//延时函数 延时1ms { u16i=0; while(time--) { i=12000; while(i--); } } void Init() { GPIO_InitTypeDefGPIO_InitStructure; //定义一个管脚初
[单片机]
九寨沟、新疆地震突如其来,地震仪到底发展到啥程度了?
这两天,想必大伙一定被两则地震消息给刷屏了,一个是08月08日21时19分发生在四川阿坝州九寨沟县发生7.0级地震;另一个是8月9日7时27分,在新疆博尔塔拉州精河县发生 6.6级地震。有网友疑问,为什么 地震仪 不能提前预测并大幅度减少伤亡呢?地震仪的技术到底发展到什么程度了?   今天的《 方案馆 》,与非小编就和大伙说一说关于地震仪的故事。   发展史 说到地震仪,不知道大伙是不是和小编一样,“张衡”两个字瞬间跳到眼前。张衡是我国东汉时代的科学家在公元132年就制成了世界上最早的“地震仪”,准确的说是 地动仪 。此仪器据说能判定地震发生的方位,那个没有电子仪器的年代,这玩意当真有用吗?     地动仪的核心部件就是一个青
[嵌入式]
stm32定时器2输出10KHZ波形
紧接上一篇文章 /*! @function ******************************************************************************** PRE :RCC_Configuration ¹ : ---------------------------------------------------------------------------------- ² : : --------------------------------------------------------------------
[单片机]
STM32/GD32翻新或假货
今天,我的技术交流群在讨论芯片涨价和咸鱼上卖芯片的话题,然后又看到了公众号嵌入式ARM分享了一篇《GD32也开始假货泛滥了》文章,我也来说说关于芯片涨价和假货的一些问题。 1 芯片涨价背景前两年的中美毛衣战,使国内一些技术型大企业受到了影响,比如华为。但是绝大部分电子相关的企业,受到的影响很小。 2020年,一场疫情,导致了一些半导体企业受到很大打击,比如工人罢工。 然后,一些原材料价格开始出现了不同程度的上涨,特别是今年初开始,很多金属、塑料等绝大部分原材料价格都上涨了,小到电阻电容,大到电视冰箱等消费电子产品,都出现了不同程度的涨价。 芯片亦如此,我们熟知的MCU价格出现了不同程度的涨价,相信大家都知道了,特别是STM32
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved