IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 3、GPIO输入 -> 正文阅读

[嵌入式]3、GPIO输入

1、按键电灯

在这里插入图片描述
KEY0连接PC5,KEY1连接PA15,wake_up连接PA0.
在这里插入图片描述
根据这个电路图可知。KEY0和KEY1,按键按下变低电平,要保证不按下是高电平。所以要采用上拉输入,在悬空时默认高电平。WK_UP连接高电平,按键按下高电平,不按下要保持低电平,用下拉输入。
在这里插入图片描述
在你的对应的文件目录下面新建一个hardware文件夹

在这里插入图片描述
点击
在这里插入图片描述
把这个文件夹添加进来
在这里插入图片描述
然后点击小槌头
在这里插入图片描述
把文件路径添加进来
在这里插入图片描述
在这里插入图片描述
在Hardware文件夹下新建按键和灯的.c和.h文件
在这里插入图片描述
然后开始敲代码

LED.c

#include "stm32f10x.h"                  // Device header


void LED_Init(void)
{	
	
	GPIO_InitTypeDef  GPIO_InitStructure;
	
	 // 配置时钟,使能IO口时钟,使能PA,PD端口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);	 
	
	 //初始化IO参数
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//推挽输出	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	 //初始化IO参数
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//推挽输出	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
	GPIO_Init(GPIOD, &GPIO_InitStructure);	
	
  
	GPIO_SetBits(GPIOA,GPIO_Pin_8);
	GPIO_SetBits(GPIOD,GPIO_Pin_2);
	
}

void LED1_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_8);
}

void LED1_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
void LED2_ON(void)
{
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}

void LED2_OFF(void)
{
	GPIO_SetBits(GPIOD,GPIO_Pin_2);
}

LED.h

//防止头文件重复包含
#ifndef __LED_H
#define __LED_H

#define LED0 PAout(8) //PA8
#define LED1 PDout(2) //PA8

//外部声明,可被外部调用
void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);

#endif

Key.c

#include "stm32f10x.h"                  // Device header
#include "delay.h"
void Key_Init(void)
{	
	
	GPIO_InitTypeDef  GPIO_InitStructure;
	
	 // 配置时钟,使能IO口时钟,使能PA,PD端口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);	 
	
	 //初始化IO参数
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	 //初始化IO参数
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
	GPIO_Init(GPIOC, &GPIO_InitStructure);	
	
}

uint8_t Key1_Scan(void)
{
	uint8_t keynum = 0;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0)
	{
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0);
		delay_ms(20);
		keynum = 1;
	}
	return keynum;
}

uint8_t Key0_Scan(void)
{
	uint8_t keynum = 0;
	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == 0)
	{
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == 0);
		delay_ms(20);
		keynum = 1;
	}
	return keynum;
}

Key.h

#ifndef __KEY_H
#define __KEY_H
 
void Key_Init(void);

uint8_t Key1_Scan(void);

uint8_t Key0_Scan(void);

#endif 

有四个函数需要注意。
\STM32F10x_FWLib\inc\stm32f10x_gpio.h 文件中可以找到

这两个是获得输入的位/字节的值

 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

这两个是获取输出的位/字节的值

  uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
   uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 

2、一些有的没的的笔记

1)关于关键字

在这里插入图片描述

2)关于一些c语言问题

#define宏定义
用一串字符代替一串字符,便于理解
注意这个不用写;

/*用LED0代替PA_8,用LED1代替PD_2
**/
#define LED0 PAout(8) //PA8
#define LED1 PDout(2) //PD2
#define ABC 12345
用ABC代替12345

typedef 给变量类型换名字

typedef unsigned char uint8_t;

struct结构体
一个数据类型,用于数据打包不同类型变量的集合

typedef struct
{
  uint16_t GPIO_Pin;  
  GPIOSpeed_TypeDef GPIO_Speed; 
  GPIOMode_TypeDef GPIO_Mode;   
}GPIO_InitTypeDef;
typedef struct
{
	char name;
	int age;
}student;

student.name = 2;

enum枚举类型

typedef enum
{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
                              ((SPEED) == GPIO_Speed_50MHz))

3)关于按键

按键抖动需要延时,20us是个合适的时间
在这里插入图片描述

4)关于光敏/热敏/红外传感器

在这里插入图片描述
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:52:42  更:2022-04-22 18:55:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:50:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码