STM32之GPIO

F103ZET6的IO口有7组,每组16个,工112个IO,是A、B~F、G

GPIOA、GPIOB、GPIOC。。GPIOG


GPIO作用:

1、普通IO口

2、端口复用,比如PA9,PA10

3、映射---布线方便


GPIO8中工作方式

输入4中

1、输入浮空    2、输入上拉    3、输入下拉    4、模拟输入

输出4中

1、开漏输出    2、推挽输出     3、开漏复用    4、推挽复用     (主要开漏和推挽的区别)


每个IO端口有7个寄存器控制,分别为

1、CRL        2、CRH    (配置模式用,都为32位寄存器,CRL控制低位8个IO,CRH控制高位8个IO)  CNX[1:0] MODEX[1:0]

3、IDR        4、ODR    IDR为只读数据寄存器、ODR为可读可写寄存器,只有低16位有效

5、BSRR      6、BRR   只有BRR为16位寄存器

7、LCKR    配置锁定寄存器,锁定端口位的配置


GPIO库函数 ----常用的函数

1个初始化函数

void GPIO_Init(GPIO_TypeDef*  GPIOx,GPIO_InitTypeDef*  GPIO_InitStruct) 

    看函数参数第一个结构体,为GPIO_TypeDef*,结构体内部定义的为寄存器

    看函数实体,有

        assert_param(IS_GPIO_ALL_PERIPH(GPIOx))                //有效性判断

        assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode))

        assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin))

2个读取输入电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)        //读取单个

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIO)                                        //读取一组

2个读取输出电平函数

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)

uint16_t GPIO_ReadOutPutData(GPIO_TypeDef* GPIO)

4个设置输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)        //输出高

void GPIO_ResetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)    //输出低

void GPIO_WriteBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,BitAction BitVal)

void GPIO_Write(GPIO_TypeDef* GPIOx,uint16_t PortVal)


tyoedef struct

{

    __IO uint32_t    CRL;

    __IO uint32_t    CRH;   

    __IO uint32_t    IDR;

    __IO uint32_t    ODR;

    __IO uint32_t    BSRR;

    __IO uint32_t    BRR;

    __IO uint32_t    LCKR;

}GPIO_TypeDef;


typedef struct

{

    uint16_t GPIO_Pin;                            //指定要初始化的IO

    GPIOSpeed_TypeDef GPIO_Speed;    //设置IO口输出速度

    GPIOMode_TypeDef GPIO_Mode;    //设置工作模式,8种中的一个

}GPIO_InitTypeDef;

GPIO初始化:

GPIO_InitTypeDef GPIOInitStructure;

GPIOInitStructure.GPIO_Pin=GPIO_Pin_5;                    //5引脚

GPIOInitStructure.GPIO_Mode=GPIO_Mode_Out_PP;    //推挽输出

GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;    //IO口速度50MHz

GPIO _Init(GPIOB,&GPIOInitStructure)


使用IO步骤

1、使能IO口时钟    RCC_APB2periphColcmCmd()        不同IO口时钟函数不一样

2、初始化IO口组    GPIO_Init()

3、操作IO口

    GPIO_SetBits()

    GPIO_ResetBits()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值