第一个----关于GPIO的总结
首先,自己本来报的是单片机的 ,但是因为队友的脑残,给我报成了嵌入式,哎,惨啊,就得从头看这个云里雾里的东西,但是没办法,都报名了 不能呢个交白卷,不然自己就是逃兵了,还有20天就比赛了 我得加把劲啊,不然我就惨了
GPIO是General-Purpose Input / Output。
到了单片机上,单片机有很多管脚(PIN)
PIN除了一些特殊的,比如电源,比如地线,晶振接线等等,很多都可以任意定义成两种功能中的一种:1. 模块的管脚,2. GPIO
当定义为模块管脚时,PIN起模块中定义的功能。比如定义成SPI模块的管脚,那就按照具体芯片的规定,或者定义成MOSI,或者定义成MISO,或者定义成SCLK,这些不是任意的。SPI是模块,MISO等是功能管脚。
当定义成GPIO时,可以定义成高阻,输入,或者输出。这时候,就可以用作操作控制位,点LED灯等功能了。
很多模块的功能管脚,严格意义上来讲也是IO,比如CANH,CANL,所以这里为了避免混淆,就将没有定义成模块功能管脚的那些单片机管脚定义成General Purpose的IO了,以示区别。
1-------首先,我觉得 只要是用IO口,都离不开这个GPIO,相对于51,51对于一些简单的东西,如什么led灯啦,什么蜂鸣器啦,没有这个stm32复杂,但是其实差不多,思想没变,只不过在控制这些灯啦,蜂鸣器啦,要先控制这个GPIO先使能这个GPIO的时钟,别的没啥了,还是那句话,习惯了,什么都是浮云和套路。
2-------大部分的操作步骤:
1)声明一个GPIO_InitStructure结构体:
例如: GPIO_InitTypedef GPIO——InitStructure;(要是不懂这个结构体 ,可以看keil的库,就是用鼠标点着这个结构体,然后右键,看他的reference)
2)使能GPIO对应的外设时钟:(//使能GPIOA,GPIOB,GPIOC时钟)
例如: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOC , ENABLE);
3)选择待设置的GPIO管脚:(选择待处理的GPIO的第7,8,9脚,中间加“|”)
例如 : GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
4)设置GPIO管脚的速率:(设置选中GPIO管脚的速率为最高速率2MHz,这个值是可以改变的,那个板子上标着哪一个管脚的速率最大值可以达到多少,只要出超过他就行)
例如 : GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz
5)设置GPIO的管脚模式(设置选中GPIO管脚的模式为开漏输出模式,也可以是其他的模式)
例如 :GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
6)根据GPIO_InitStructure中指定的参数初始化外设GPIOX
例如: GPIO_Init(GPIOC, &GPIO_InitStructure);
(根据GPIO_InitStructure中指定的参数初始化外设GPIOC)
3-----其他应用:
1)将端口GPIOA的第10,15脚置1(高电平)
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
2)将端口GPIOA的第10、15脚置0(低电平)
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
3)GPIO寄存器:
4)GPIO库函数
4)库函数详细介绍:
函数GPIO_DeInit:
功能描述:将外设GPIOx寄存器重设为缺省值(缺省值:就是系统的默认值)
例如: GPIO_DeInit(GPIOA);
函数GPIO_AFIODeInit
功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值
例如: GPIO_AFIODeInit();
函数GPIO_Init
功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
例如:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitTypeDef structure
GPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
GPIO_Pin
该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合。
以使用下表中的任意组合。
GPIO_Pin_None: 无管脚被选中
GPIO_Pin_x:选中管脚x(0--15)
GPIO_Pin_All:选中全部管脚
GPIO_Speed
GPIO_Speed:用以设置选中管脚的速率;
GPIO_Speed_10MHz: 最高输出速率为10Mhz
GPIO_Speed_2MHz: 最高输出速率为2MHz
GPIO_Speed_50MHz: 最高输出速率为50MZ
GPIO——Mode
GPIO_Mode: 用以设置选管脚的工作状态。
GPIO_Mode_AIN: 模拟输入
GPIO_Mode_In_FLOATING :浮空输入(那个串口通信输入,一般就用它)
GPIO_Mode_IPD : 下拉输入
GPIO_Mode_IPU: 上拉输入
GPIO_Mode_Out_OD:开漏输出
GPIO_Mode_Out_PP: 推挽输出
GPIO_Mode_AF_OD: 复用开漏输出
GPIO_Mode_AF_PP: 复用推挽输出
函数GPIO_StructInit
功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入
例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStruct:
GPIO_Pin:GPIO_Pin_All
GPIO_Speed:GPIO_Speed_2MHz
GPIO_Mode:GPIO_Mode_IN_FLOATING
函数GPIO_ReadInputDataBit
功能描述:读取指定端口管脚的输入
例如:
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBi(GPIOB, GPIO_Pin_7);
函数GPIO_ReadInputData
功能描述:读取指定的GPIO端口输入
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
函数GPIO_WriteBit
功能描述:设置或者清除指定的数据端口位
例: GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET)
函数GPIO_Write
功能描述:向指定GPIO数据端口写入数据
例: GPIO_Write(GPIOA, 0x1101);
函数GPIO_PinLockConfig
功能描述:锁定GPIO管脚设置寄存器
例:GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
函数GPIO_EventOutputConfig
功能描述:选择GPIO管脚用作事件输出
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
GPIO_PortSource GPIO_PortSource用以选择用作事件输出的GPIO端口。
函数GPIO_EventOutputCmd
功能描述:使能或者失能事件输出
例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); GPIO_EventOutputCmd(ENABLE);
函数GPIO_PinRemapConfig
功能描述:改变指定管脚的映射
例:
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
四----GPIO概述
1、共有8种模式,可以通过编程选择:
1. 浮空输入
2. 带上拉输入
3. 带下拉输入
4. 模拟输入
5. 开漏输出——(此模式可实现hotpower说的真双向IO)
6. 推挽输出
7. 复用功能的推挽输出
8. 复用功能的开漏输出
模式7和模式8需根据具体的复用功能决定。
第一个----关于GPIO的总结的更多相关文章
- 硬件——nrf51822第一篇,GPIO的使用
未完,待续...... 本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK 1套: 手持终端系统 XT-EDU-HK 1套: GPIO操作 工程: 这是一个关于流水灯的程序: 我 ...
- 【整理】--【GPIO】OK6410
S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制G ...
- 树莓派基于scratch2控制GPIO
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...
- 【原创】中断子系统-ARM GPIO中断处理流程
目录 第一部分 GIC中断控制器的注册 1. GIC驱动分析 2.GIC驱动流程分析 第二部分 device node转化为platform_device 第三部分:platform_device注册 ...
- 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(2)
作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面一篇博文基於tiny4412的Linux內核移 ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- STM32f10xxx 之 GPIO口配置
背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...
- STM32F412应用开发笔记之二:基本GPIO控制
NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...
- STM32之GPIO操作
啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出 就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPI ...
随机推荐
- C语言-存储类&作用域&生命周期&链接属性
1.概念解析(1)存储类 a.存储类就是存储类型,也就是描述C语言变量在何种地方存储. b.内存有多种管理办法:栈.堆.数据段.bss段..text段......一个变量的存储类属性就是描述这个变量存 ...
- (7)opencv图片内部的基本处理
就是,给定我们一张图片,我们可以对图片的每一个像素的色彩进行处理 比如,我们的原图是这个样子 然后我首先将他变成灰度图(灰度图的行道是1,就是chanaual是1) 然后,我又将灰色图片的黑白进行颠倒 ...
- C# 互操作性入门系列(三):平台调用中的数据封送处理
好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...
- C#构造函数调用其他构造函数
http://blog.csdn.net/dogfish/article/details/6990266 <-- 虏来的地 public class Class1 { public Class ...
- Day 12:枚举值、枚举类
jdk1.5新特性之-----枚举 问题:某些方法所接收的数据必须是在固定范围之内的, 解决方案: 这时候我们的解决方案就是自定义一个类,然后是私有化构造函数,在自定义类中创建本类的对象对外使用. ...
- SpringCloud----服务注册中心Eureka
Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现.Eureka由两个组件组成:Eureka服务器和Eureka客户端.Eureka服务器用作服务注册服务器.Eureka ...
- A4纸网页打印
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序返回页面传值
一.通过url传递参数,但由于navigateTo无法跳转到导航页,所以无法往导航页传递参数 wx.navigateTo({ url: 'test?id=1' }) 二.通过wx.navigateBa ...
- docker入门2---docker的初体验
Tomxin7 Simple, Interesting | 简单,有趣 第一个Docker镜像? 尝试运行docker自带的镜像"hello-world",了解docker镜像的下 ...
- vSphere 6.7 新特性 — 基于虚拟化的安全 (VBS)
https://blogs.vmware.com/china/2018/07/27/vsphere-6-7-%E6%96%B0%E7%89%B9%E6%80%A7-%E5%9F%BA%E4%BA%8E ...