首先,自己本来报的是单片机的  ,但是因为队友的脑残,给我报成了嵌入式,哎,惨啊,就得从头看这个云里雾里的东西,但是没办法,都报名了  不能呢个交白卷,不然自己就是逃兵了,还有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的总结的更多相关文章

  1. 硬件——nrf51822第一篇,GPIO的使用

    未完,待续...... 本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK   1套: 手持终端系统 XT-EDU-HK 1套: GPIO操作 工程: 这是一个关于流水灯的程序: 我 ...

  2. 【整理】--【GPIO】OK6410

    S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制G ...

  3. 树莓派基于scratch2控制GPIO

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...

  4. 【原创】中断子系统-ARM GPIO中断处理流程

    目录 第一部分 GIC中断控制器的注册 1. GIC驱动分析 2.GIC驱动流程分析 第二部分 device node转化为platform_device 第三部分:platform_device注册 ...

  5. 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(2)

    作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面一篇博文基於tiny4412的Linux內核移 ...

  6. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  7. STM32f10xxx 之 GPIO口配置

    背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...

  8. STM32F412应用开发笔记之二:基本GPIO控制

    NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...

  9. STM32之GPIO操作

    啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出  就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPI ...

随机推荐

  1. C++编程学习(二) 数据

    博主已经有一些基础了,所以写的东西可能是容易错的,或者以前没记住的,或者是对理解知识点有帮助的.因此如果有纯小白看到了这篇博文,不懂的地方请自行百度啦~ 另外,本系列所有内容的图片均来自于西北工业大学 ...

  2. code first 和数据库映射

  3. 仿flash的文字动画效果

    .tips{ font-size: 24px; font-family: sans-serif; font-weight: 600; text-shadow: 1px 1px #ffb700; col ...

  4. echars的使用

    1.首先引入echars的js文件 该文件可从echars官网下载 在某些图表中可能会引用ecStat.js文件 如线性回归散点图 我们直接下载引用即可 <head> <title& ...

  5. Android自定义View——多边形网格属性图

      1.初始化变量 2.属性图解   3.如果想切换到5.6.7边形等等,则必须修改下面几条数据 4.获取宽和高 5.绘制图形 1.开始画画前:我们要把画笔准备好,这里看代码就能明白意思了,接着把整个 ...

  6. 电脑连接了HDMI线,电脑没有声音了,原因和解决办法

    我们经常会使用笔记本电脑通过HDMI线外接显示器或者投影仪设备,会遇到笔记本电脑没有声音或者声音很小的问题. 没有声音说明电脑的播放设备(扬声器)设置问题,可以通过查看扬声器情况解决. 如图所示: 需 ...

  7. 201771010123汪慧和《面向对象程序设计Java》第十七周实验总结

    一.理论部分 1.多线程并发执行中的问题 ◆多个线程相对执行的顺序是不确定的. ◆线程执行顺序的不确定性会产生执行结果的不确定性. ◆在多线程对共享数据操作时常常会产生这种不确定性. 2.线程的同步 ...

  8. (转)Java并发编程:阻塞队列

    Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable.Vector),也讨论了并发容器(ConcurrentHashMap.CopyOnWriteArrayList), ...

  9. scrapy 在pycharm中调试 不用到命令行中启动爬虫方法

    (目录结构如上图) 在主目录中加入main.py,在其中加入代码,运行此文件就可以运行整个爬虫: # -*- coding: utf-8 -*- __author__='pasaulis' #在程序中 ...

  10. idea 2018.3.4 破解

    我的idea_home=C:\Program Files\\IntelliJ IDEA 2018.3.4\ 1.下载破解文件 链接:https://pan.baidu.com/s/1I2APmk-pj ...