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需根据具体的复用功能决定。

  • 相关阅读:
    jsp自定义标签
    spring JDBC 返回list<map>集合
    AWS 身份及验证服务(四)
    AWS 存储服务(三)
    AWS 核心服务概述(二)
    云计算和 AWS 概述(一)
    AWS 解决方案架构师考点(Storage)
    利用 AWS 无服务架构之语音合成
    AWS 云上安全最佳实践
    持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/6572950.html
Copyright © 2011-2022 走看看