zoukankan      html  css  js  c++  java
  • 17.3.15---关于GPIO学习笔记

    STM32的IO口可以由软件配置成为8种模式:

    1--输入浮空

    2--输入上拉

    3--输入下拉

    4--模拟输入

    5--开漏输出

    6--推挽输出

    7--推挽复用

    8--开漏复用

    STM32的每个IO口都有7个寄存器控制,他们分别是:

    端口配置寄存器(32位,共两个,CRL和CRH)

    数据寄存器(32位,共两个,IDR和ODR)

    置位/复位寄存器(32位,一个,BSRR)

    复位寄存器(16位,一个,BRR)

    锁存寄存器(32位,一个,LCKR)

    常用的IO寄存器只有四个,即CRL、CRH、IDR、ODR,他们分别是设置IO口工作状态和输入/输出数据的,其中CRL和CRH共2个32位寄存器控制16个IO口的状态(CRL和CRH完全一样,只是CRL控制的是低8位输出口GPIOx(0:7),CRH控制的是高八位GPIOx(8:15)),,寄存器情况如图所示:

    上图为CRL寄存器,控制低8位状态,CRH类似。

    常用的状态配置:

    0X0 模拟输入模式(ADC用)

    0X3 推挽输出模式 (作输出口用 50Mhz速率)

    0X8 上/下拉输入模式 (作输入口用)

    0XB 复用输出  (作IO口的第二功能 50Mhz速率)

    例子

    我们甚至PORTC的11位位上拉输入,12位为推挽输出,代码如下

    1     GPIO->CRH&=0XFFF00FFF;  //清除原来的设置,不影响其他位
    2 
    3     GPIO->CRH|=0X00038000;  //PC11输入,PC12输出
    4 
    5     GPIO->ODR=1<<11; //PC11上拉,IDR 输入数据寄存器,只使用了低16位,只读寄存器,同理,ODR也只使用了低16位,位可读写寄存器。

    这样我们就完成了设置。

    另外,IDR 输入数据寄存器,只使用了低16位,只读寄存器,同理,ODR也只使用了低16位,位可读写寄存器。

    IDR寄存器描述如图:

    RCC->APB2ENR|=1<<8; //使能 PORTG 口时钟

    就是打开GPIO的时钟。stm32对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗。
    说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟
  • 相关阅读:
    nginx配置虚拟主机
    nginx 中http协议的相关配置
    nginx的性能优化
    编译安装NGINX-1.21.0
    nginx命令使用
    编译安装NGINX1.16.1
    nginx: [emerg] getpwnam("nginx") failed
    swift选择类或结构体
    工具与网址
    WARNING: CPU: 0 PID: 1 at ./arch/x86/include/asm/fpu/internal.h:373
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/6552876.html
Copyright © 2011-2022 走看看