精华内容
下载资源
问答
  • STM32F4寄存器与IO输入输出学习
    千次阅读
    2020-05-03 22:18:35

    IO设置函数

    包括两个函数:GPIO_Set和GPIO_AF_Set. GPIO_AF_Set,每次只能设置一个IO口的复用功能。

    STM32F4的每组通用I/O端口包括4个32位配置寄存器(MODER,OTYPER,OSPEEDR和PUPDR),2个32位数据寄存器(IDR和ODR),1个32位置位/复位寄存器(BSRR),1个32位锁定寄存器(LCKR)和2个32位复用功能选择寄存器(AFRH和AFRL).

    这样,STM32F4每组IO有10个32位寄存器控制,其中常用的有4个配置寄存器+2个数据寄存器+2个复用功能选择寄存器,共8个。

    各个寄存器介绍

    1.MODER寄存器,该寄存器是GPIO端口模式控制寄存器,用于控制GPIOx(STM32F4最多有9组IO,x=A/B/C/D/E/F/G/H/I)的工作模式。
    MODERy[1:0]:端口x配置位(y=0~15)这些位通过软件写入,用于配置I/O方向模式。

    00:输入(复位状态)

    01: 通用输出模式

    10: 复用功能模式

    11:模拟模式

    该寄存器各位在复位后,一般都是0(个别不是0,比如JTAG占用的几个IO口),也就是在默认状态下是输入状态的。每组IO下有16个IO口,该寄存器共32位,每两个控制一个IO,位31:16 保留,必须保持复位值。

    2.OSPEEDR寄存器,该寄存器用于控制GPIOx的输出速度。(输出模式)复位时,寄存器值一般为0.

    00: 2MHz(低速)

    01: 25MHz(中速)

    10: 50MHz(快速)

    11: 30pF时为100MHz(高速)(15pF时为80MHz输出(最大速度))

    3.PUPDR寄存器,用于控制GPIOx的上拉/下拉。复位后,寄存器值为0.

    00: 无上拉/下拉

    01: 上拉

    10: 下拉

    11: 保留

    4.ODR寄存器,用于设置某个IO输出低电平(ODRy=0)还是高电平(ODRy=1),该寄存器也仅在输出模式下有效,在输入模式下(MODER[1:0])不起作用.

    5.IDR寄存器,用于读取GPIOx的输入,用于读取某个IO的电平,如果对应的位为0,则说明该IO输入的是低电平

    6.OTYPER寄存器,在输入模式不起作用,低16位有效。

    0: 输出推挽(复位状态)

    1: 输出开漏

    7.AFRL和AFRH,是用来设置IO引脚复用和映射的,STM32F4每个IO引脚通过一个复用器连接到板载外设,该复用器一次仅允许一个外设的复用功能(AF)连接到IO引脚,AFRL控制0…7这8个IO口,AFRH控制8…15这8个IO口。4个位控制一个IO。

    0000: AF0

    1111: AF15

    8.BSRR寄存器是端口位设置/清除寄存器,BSRR低16位用于设置GPIO口对应位输出高电平,高16位用于设置GPIO口对应位输出低电平.

    void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
    {
      /* Check the parameters */
      assert_param(IS_GPIO_PIN(GPIO_Pin));
      assert_param(IS_GPIO_PIN_ACTION(PinState));
    
      if(PinState != GPIO_PIN_RESET)
      {
        GPIOx->BSRR = GPIO_Pin;
      }
      else
      {
        GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
      }
    }

    STM32F4的IO的8种模式

    4种输入模式
    1.GPIO_Mode_IN_FLOATING 浮空输入

    MCU直接读取I/O电平,I/O电平状态不确定,完全由外部输入决定

    2.GPIO_Mode_IPU 上拉输入

    IO内部接上拉电阻,此时如果IO口外部没有信号输入或引脚悬空,IO默认为高电平,如果要大电流还是要外部上拉

    3.GPIO_Mode_IPD 下拉输入

    IO内部接上拉电阻,没有外部信号或引脚悬空,IO默认为低电平

    4.GPIO_Mode_AIN 模拟输入

    当位于模拟输入配置下,通过数模转换,转换成模拟信号,CPU不能在"输入数据寄存器"上读到有效数据.

    4种输出模式

    1.GPIO_Mode_OUT_OD 开漏输出

    2.GPIO_Mode_AF_OD 复用开漏输出

    3.GPIO_Mode_OUT_PP 推挽输出

    4.GPIO_Mode_AF_PP 复用推挽输出

    开漏输出:可以输出强低电平,高电平得靠外部电阻拉高

    推挽输出:可以输出强高低电平.

    更多相关内容
  • stm32寄存器(四种输入输出方式

    千次阅读 2020-03-10 16:32:37
    开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能...

    概述

    在STM32入门学习过程中,STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口。
    配置寄存器 CRL 和 CRH;2 个 32 位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器
    BSRR;一个 16 位的复位寄存器 BRR;1 个 32 位的锁存寄存器 LCKR;这里我们仅介绍常用 的
    几个寄存器,我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。
    浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了.
    开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了.
    推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻.
    (1)GPIO_Mode_AIN 模拟输入
    (2)GPIO_Mode_IN_FLOATING 浮空输入
    (3)GPIO_Mode_IPD 下拉输入
    (4)GPIO_Mode_IPU 上拉输入
    (5)GPIO_Mode_Out_OD 开漏输出
    (6)GPIO_Mode_Out_PP 推挽输出
    (7)GPIO_Mode_AF_OD 复用开漏输出
    (8)GPIO_Mode_AF_PP 复用推挽输出

    推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
    在这里插入图片描述

    开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
    总结下使用情况:
    在STM32中选用IO模式
    (1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
    (2)带上拉输入_IPU——IO内部上拉电阻输入
    (3)带下拉输入_IPD—— IO内部下拉电阻输入
    (4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
    (5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
    (6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
    (7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
    (8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
    STM32设置实例:
    (1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
    (2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;
    在这里插入图片描述

    展开全文
  • 看到这个标题你是不是想问为什么要麻烦的使用寄存器来设置引脚的输入输出呢?使用库函数多方便。 因为比如当我们在使用IIC通讯的时候,IIC通讯速率400KHz,需要特别快的通讯速率,用库函数来设置引脚的话很不方便,...

    看到这个标题你是不是想问为什么要麻烦的使用寄存器来设置引脚的输入输出呢?使用库函数多方便。

    因为比如当我们在使用IIC通讯的时候,IIC通讯速率400KHz,需要特别快的通讯速率,用库函数来设置引脚的话很不方便,所以当我们被要求速度快的情况下,最好的办法就是直接操作寄存器。

    那该怎么配置寄存器呢?接下来我们通过STM32L031F4P6单片机举例子来看看怎么配置

    我们首先找到芯片的参考手册,找到关于GPIO端口模式寄存器(MODER)

     这是一个32位的单片机,所以它的寄存器也是32位,通过看图咱们可以知道它有32个位,其中每两位为一组,就是有16组,16组就对应IO口的16个引脚,例如PA口的16个引脚,PB口的16个引脚

    Bit1:0就控制PA0、PB0、PC0、PD0;Bit3:2就控制PA1、PB1、PC1、PD1;以此类推

    现在我们需要设置PA6引脚,所以我们要修改Bit13:12这两个位,这两个位不是0就是1,搭配起来的话就是有四种状态

     00:输入模式

    01:通用输出模式

    10:复用功能

    11:模拟输入模式

    现在我们需要用到输入模式和输出模式,也就是将Bit13:12这两个位设置为00和01,通过下面代码我们就可以很轻松的通过配置寄存器设置了PA6引脚的输入输出了

    void MPU_SDA_OUT() // PA6   输出模式
    {
    	GPIOA->MODER |= (0x1<<12); // 给bit13:12写01
    }
    
    void MPU_SDA_IN()  //  输入模式
    {
    	GPIOA->MODER &= ~(0x3<<12); // 给bit13:12写00
    }

    下面我再解释一下这个位运算:

    首先我们要知道逻辑运算符(!,&&,||)和位运算符(<<,>>,~,|,^,&)的区别:

    我们对寄存器的操作使用的是位运算符,而逻辑运算符一般用于在程序中判断逻辑中使用。

    输出模式:将寄存器MODER的第13位清“0”12位置“1”    MODER |= (0x1<<12);

    (将0X1左移12位,使用位运算"|" )

    输入模式:将寄存器MODER的第13位清“0”12位清“0”    MODER &= ~(0x3<<12);

    (将0X3左移12位,取反,使用位运算"&" )

    总结一下:

         将某位置1,移位后使用位运算"|" ;

         将某位清0,移位取反后,使用位运算"&"

    展开全文
  • STM32F103系列,每个端口的IO最多为16,因此设置分为高8位IO与低8位IO,高8位IO与低8位IO 各有32位寄存器。 高8位IO需要操作(GPIOx_CRH)寄存器,低8位IO则操作(GPIOx_CRL) 1.低8位IO寄存器 每个IO口由该寄存器控制...

    STM32F103系列,每个端口的IO最多为16,因此设置分为高8位IO与低8位IO,高8位IO与低8位IO 各有32位寄存器。
    高8位IO需要操作(GPIOx_CRH)寄存器,低8位IO则操作(GPIOx_CRL)

    1.低8位IO寄存器

    在这里插入图片描述在这里插入图片描述
    每个IO口由该寄存器控制表的4个位进行控制,
    其中CNY寄存器两位,MODE寄存器两位。
    IO序号由ANY0CNY7,MODE0MODE7,对应的是Px0~Px7的io口。
    例如:设置PB6 IO口为输入模式

    //自行理解C语言的位带操作
    //先清空B6io寄存器内容
    GPIOB->CRL&= 0XF0FFFFFF;
    //由于设置为输入模式,若选择上拉/下拉输入模式
    //ANY控制位的值为10,MODE控制位的值为00,由于是B6IO,因此需要左移24位。
    GPIOB->CRL|= 8<<24;
    

    例如:设置PB6 IO口为输出模式,

    //先清空B6io寄存器内容
    GPIOB->CRL&= 0XF0FFFFFF;
    //由于设置为推挽输出模式,输出频率为50Mhz
    //ANY控制位的值为00,MODE控制位的值为11,由于是B6IO,因此需要左移24位。
    GPIOB->CRL|= 3<<24;
    
    展开全文
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 英文资料
  • 寄存器配置GPIOx输入输出模式

    千次阅读 2021-01-15 22:30:05
    最近程序中使用到了—用寄存器配置GPIOx的输入输出模式,简单记录一下,方便今后自己参考。 // An highlighted block //IO方向设置 #define DHT11_1_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|= 8<&...
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 中文资料.rar
  • 串行工作模式之同步移位寄存器输入输出方式 主要用于扩展并行输入或输出口。数据有RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接受均为8位数据。低位在前,高位在后。 //串行口...
  • 什么是复用工功能输入输出?复用功能输入输出类似于:房间《--》大厅《--》门《--》室外的关系;从房间到室外,需要经过大厅,在经过大门才可以到达室外;从室外到房间,也需要经过大门  1) 当给TDR寄存器...
  • 之前一直没有研究过寄存器,直到今天需要改一下模拟IIC的SDA IO口,就研究了一下,发在这里相当于做个笔记把。 //#define IOSDA_IN() {GPIOB->MODER&=~(3<<(92));GPIOB->MODER|=0<<92;} //PB9...
  • 汇编-输出寄存器的值-输出

    千次阅读 2020-05-16 23:40:37
    今天总结一下令初学者感到头疼的寄存器输出问题 我们知道: 可以看出寄存器值是一个十六位进制的数,我们可以将其每一位都转成字符进行判断,完成后使用9号系统功能输出结果。 此时计算机输出时以ascll码为准,...
  • 74HC165驱动程序 74HC165并行输入串行输出移位寄存器的简单AVR驱动程序
  • 关于STM32的GPIO端口输入/输出数据寄存器关于STM32的GPIO端口 输入/输出数据寄存器关于STM32的GPIO端口输入/输出数据寄存器 以前认为GPIO 输入数据寄存器输出 数据寄存器是完全分离得,互不相关,今天才发现在在...
  • 保持寄存器 输入寄存器_揭密寄存器

    千次阅读 2018-10-29 11:49:00
    保持寄存器 输入寄存器 让我们深入了解寄存器寄存器是处理器用来更有效地处理数据的内部存储器存储位置。 如果不是寄存器,则处理器在想从内存中读取或写入数据时都将被迫与控制总线进行交互。 寄存器与...
  • 移位寄存器

    2020-12-09 01:57:52
    为了完成不同的移位功能,每个寄存单元的输出与其相邻的下一个寄存单元的输入之间的连接方式也不同。(2)所有寄存单元共用一个时钟。在公共时钟的作用下,各个寄存单元的工作是同步的。每输入一个时钟脉冲,寄存器的...
  • 移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、序列码检测器,进行数值运算以及数据处理等,它也是...
  • 寄存器加法器.docx

    2020-06-18 12:59:26
    含时序仿真、代码、RTL网表 掌握VHDL描述时序电路的方法,学会用VHDL设计4位寄存器加法器。同时电路应支持无符号数,其中复位是异步复位。要求写出VHDL代码,并导出RTL网表。最后通过时序仿真为A,B赋不同的值,以...
  • 寄存器与移位寄存器(数字电路)

    千次阅读 2021-06-12 22:23:29
    寄存器的功能: 暂时存放计算机的数据或者指令。 基本构成: D触发器 0 时钟上升沿 0 1 1 ...
  •  在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。...
  • 寄存器分类

    2020-11-13 04:36:40
    并行寄存器是并行输入并行输出寄存器。移位寄存器除具寄存器的功能外,所存储的数码在时钟脉冲的作用下还可以移位。根据数码的移位方向分为左移寄存器和右移寄存器。左移寄存器是指在时钟脉冲的作用下,低位寄存器的...
  • STM32 (3) GPIO口功能讲解 GPIO 口输入输出 寄存器配置

    万次阅读 多人点赞 2018-08-09 17:16:32
    输出数据寄存器输出 0/1 的时候 经过输出控制 控制两个MOS管 输出0v 或者3.3V 我们将上面的推挽输出 简化成下图, 比如:ODR 寄存器 输出了1 经过 反相器就 成了0, 0的话上面的MOS管导通(P-MOS)当 Ug时 P...
  • 在上图可以知道,外设IO输入模式含有(输入浮空、输入上拉、输入下拉、模拟输入),输出模式含有(推挽输出、开漏输出、推挽输出、推挽式复用功能、开漏复用功能);另外下面两个表就是如何配置IO是哪种输入或哪种...
  • 1 Verilog描述 module shift_p2s( input clk, input [7:0] din, input load, output reg q ); reg [7:0] tmp; always@(posedge clk)begin if(load == 1...
  • 第七章 输入输出接口

    千次阅读 2020-11-21 12:59:54
    文章目录I/O接口概述I/O接口的典型结构I/O端口的地址输入输出指令16位DOS应用程序无条件传送和查询传送无条件传送查询传送中断控制系统中断传送IA-32中断系统内部中断服务程序中断控制器外部中断服务程序驻留中断...
  • 这样,在输入输出程序中访问端口就是访问接口电路的寄存器,通常所说的IO操作就是对IO端口的操作,即CPU所访问的是与IO设备相关的端口,而不是IO设备本身 输入输出方式 输入/输出接口分类:  1、按数据...
  • FreeModbus输入寄存器

    千次阅读 2019-04-08 21:22:32
    输入寄存器的访问属性为只读 对输入寄存器的操作包括:读输入寄存器(0x04) 在一个远程设备中,使用该功能码读取1 至大约125 的连续输入寄存器。请求PDU 说明了起始地址和寄存器数量。从零开始寻址寄存器。...
  • 行业分类-设备装置-使用输入写掩码和立即数从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
  • SW3518S寄存器列表,可以用来读取SW35xx系列的电流,电压,温度,当前协议,以及调整输入输出电流电压,开启关闭某些保护,使用IIC总线通信,内部资料,网络上比较稀少。
  •  如图 SPI接收移位寄存器和MIMO输入寄存器 由SCK钟控的计数器用来对输入到移位寄存器的数据位进行计数,它也能够能够产生数据传输完毕的指示信号。当数据传输完成,移位寄存器中数据被装入SPI接
  • 最近调试一个项目,时序没有报错,仿真没有问题,但是上板始终差一个bit,因为更换过器件,所以怀疑IP,各种怀疑,最后...总结这次经验,模块的输出一定要寄存器输出输入最好也是。 . . . . . . . . . .

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,809
精华内容 60,323
关键字:

寄存器的输入输出方式