zoukankan      html  css  js  c++  java
  • 第一个----关于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需根据具体的复用功能决定。

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/6572950.html
Copyright © 2011-2022 走看看