精华内容
下载资源
问答
  • 关于stm32单片机准双向IO口配置

    千次阅读 2019-10-31 23:14:09
    我们在开始学习51内核的单片机的时候就知道,p0口的引脚都是双向IO口,P1,P2,P3的IO口需要双向使用时需要外接上拉电阻,故称为准双向IO口, 但是我们在学习STM32单片机的时候知道32的IO口可以配置为8种状态,但是却...

    我们在开始学习51内核的单片机的时候就知道,p0口的引脚都是双向IO口,P1,P2,P3的IO口需要双向使用时需要外接上拉电阻,故称为准双向IO口,

    但是我们在学习STM32单片机的时候知道32的IO口可以配置为8种状态,但是却没有双向IO这一选项,但是我们也可以通过一些操作将stm32的引脚配置为准双向IO口;

    配置stm32的IO口为准双向IO口的方法就是

    软件上:将需要配置我的准双向IO口的引脚配置为开漏输出

    static void GPIO_Init(void)
    {
    	 RCC->APB2ENR|=1<<2;    	//使能PORTA 时钟  
    	 GPIOA->CRL&=0XFFFFF0FF; 
    	 GPIOA->CRL|=0X00000700;	//PA2 为开漏输出		
    }
    

    硬件上:接上拉电阻

    此方法亲测有效,测试平台为st M3内核单片机

    展开全文
  • Verilog——双向IO口的FPGA实现

    千次阅读 2020-03-31 10:44:08
    双向IO口的FPGA实现双向IO口的Verilog试验主要功能模块代码仿真代码仿真结果 双向IO口的Verilog试验 主要功能 主模块定义如下: module stg # ( parameter WIDTH = 7 ) ( input clk , input ...

    双向IO口的Verilog试验

    主要功能

    为深入理解双向端口的使用,进行本仿真试验,完成一个类似可修改数值的计数器。en_set为0时,通过一个双向IO数据接口inout [7:0] bio 输出模块内部计数器cnt的计数值;en_set为1时,通过bio输入数值对内部计数器cnt进行设置。主模块定义如下:

    module stg
    #
    (
        parameter           WIDTH   =   7
    )
    (
        input               			clk             	,
        input               			rst_n           	,
        inout   [WIDTH:0]   	        bio                	,
        input               			en_set                  
    );
    

    bio为双向IO:
    1)en_set为1时bio为输入口,置为高阻态输出(不影响输入),并将输入的数值赋值到cnt;
    2)en_set为0时bio为输出口,输出cnt的数值。

    模块代码

    `timescale 1ns/1ps
    module stg
    #
    (
        parameter           WIDTH   =   7
    )
    (
        input               clk             ,
        input               rst_n           ,
        inout   [WIDTH:0]   bio             ,
        input               en_set                  
    );
    
        reg     [WIDTH:0]   cnt;
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n)
                cnt <= 'd0;
            else if(en_set == 1'b1)
                cnt <= bio;
            else
                cnt <= cnt + 'd1;
        end
        
        
        assign bio = (en_set == 1'b1) ? 'bz : cnt;
    
    endmodule
    

    仿真代码

    `timescale 1ns/1ps
    module tb_stg;
    
    reg                     clk             ;
    reg                     rst_n           ;
    wire        [7:0]       bio             ;
    reg                     en_set          ;     
    
    stg
    #
    (
    .WIDTH              (7          )
    )
    u_stg
    (
    .clk                (clk        )           ,
    .rst_n              (rst_n      )           ,
    .bio                (bio        )           ,
    .en_set             (en_set     )       
    );
    
    initial begin
        rst_n = 0;
        clk = 0;
        en_set = 0;
        #100;
        rst_n = 1;
        #1000;
        en_set = 1;
        #100;
        en_set = 0;
    end
    
    always #10 clk = ~clk;
    
    assign bio = (en_set == 1'b1) ? 7'h68 : 7'hzz;
    
    endmodule
    

    仿真结果

    在这里插入图片描述

    展开全文
  • 怎么使用双向IO口

    2017-10-29 13:15:00
    在很多情况下,需要使用双向IO。不过最好谨慎使用,在top层使用。网上很多描述的代码甚至是不可以综合并且有语法错误的,还是老实自己写个模块吧。 新版本如下: 使用inout,直接定义个inout。 然后用使能...

    在很多情况下,需要使用双向IO。不过最好谨慎使用,在top层使用。网上很多描述的代码甚至是不可以综合并且有语法错误的,还是老实自己写个模块吧。

    新版本如下:

    使用inout口,直接定义个inout口。

    然后用使能控制就好了,如果是作为输入,则直接把inout赋值给reg型变量就行。

    如果作为输出,则使用使能控制,输出则把寄存器的值赋给inout,不输出则赋值z。表示输出高阻态,处于输入模式中。

    inout            io_sdio;//定义一个inout
    r_sdi_shift<={r_sdi_shift[6:0],io_sdio}; //采集数据
    assign io_sdio = r_oe_n ? 1'bz : r_sdo_shift[23] & (~o_csn); //输出

    三行代码解决一切问题。

     

    老版本不再使用,如下:

    如果你需要一个口既做输入端口也做输出端口,那么你就需要去描述一个双向的IO。

    1.电路框图:

    2.数据流向:

    当en=0的时候,三态门选通,dinout当输出口使用,数据从din到dinout。

    当en=1的时候,三态门关闭,dinout当输入口使用,输出呈现高阻态,数据从dinout到dout。

    3.代码:

    //************************************************
    //  Filename      : dual_io.v                             
    //  Author        : kingstacker                  
    //  Company       : School                       
    //  Email         : kingstacker_work@163.com     
    //  Device        : Altera cyclone4 ep4ce6f17c8  
    //  Description   : dual io,wwidth can be change;                             
    //************************************************
    module  dual_io #(parameter WIDTH = 8)(
    /*i*/   input    wire                  clk          ,
            input    wire                  rst_n        ,
            input    wire                  en           ,
            input    wire   [WIDTH-1:0]    din          ,
            inout    wire   [WIDTH-1:0]    dinout       ,
    /*o*/   output   wire   [WIDTH-1:0]    dout              
    );
    reg [WIDTH-1:0] din_reg;
    reg [WIDTH-1:0] dout_reg;
    always @(posedge clk or negedge rst_n) begin
        if (~rst_n) begin
            din_reg <= 0;
            dout_reg <= 0;
        end //if
        else begin
            if (~en) begin
                din_reg <= din;
            end    
            else begin
                dout_reg <= dinout;
            end
        end //else
    end //always
    assign dinout = (~en) ? din_reg : 8'hzz;
    assign dout = dout_reg;
    endmodule

    4.综合一下看看:三态门实现双端口。

    以上。

     

    展开全文
  • stm32的双向io口

    千次阅读 2018-03-15 22:15:00
    # stm的io设置为双向问题,将io端口模式配置为 open-drain mode  > 在io端口配置为输出模式时,输入通道上的施密特触发器一直是打开的,所以读取IDR是能检测到端口电平的  > 排除 push-pull mode 模式的...

     # stm的io设置为双向问题,将io端口模式配置为 open-drain mode

      > 在io端口配置为输出模式时,输入通道上的施密特触发器一直是打开的,所以读取IDR是能检测到端口电平的

      > 排除 push-pull mode 模式的依据是,推挽输出是强输出电流模式,在此模式下的输出通道上的推挽结构MOS管,属于强上拉和强下拉的,这会影响读取IDR时的值,强上拉意味着会将来自外部的低电平输入强制置高,强下拉意味着会将来自外部的高电平输入强制置低

      > 在 open-drain mode 模式下,要读取来自外部的输入信号前,须将输出端口设置为开漏结构,且输出高电平信号(即NMOS不导通),该结构下io端口方能准确反映来自外部的输入信号

      > 在复用模式下,暂未尝试,相信会有奇妙的发现

     

    转载于:https://www.cnblogs.com/skullboyer/p/8576735.html

    展开全文
  • I2C双向IO口总结

    千次阅读 2018-11-17 15:20:40
    SDA数据线是一个双向IO口,我之前想的是你要调用这个IO口那么你应该初始化它为输入输出,但是这样就说不通了,不可能啊 上网查了查发现别人说手册8.18在开漏模式时,对输入数据寄存器的读访问可得到IO状态,开漏...
  • 由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识。 ================================================= ...由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路。 在
  • 至于为什么没有选中的接口要置为高阻态,可以去查一下FPGA怎样使用双向IO口。 OK, SDA信号的输入搞定了,但是它的输出怎么办?也采用刚才的那种方法? 对头!不过还得加一些东西,首先我们需要定义一个SDA方向的...
  • MCS-51有4个双向并行IO口:P0、P1、P2、P3;其中,P0为三态双向口,其驱动能力比较大,可驱动高达8个TTL电路;P1、P2、P3为准双向口(作为输入时,口线需要被拉成高电平,故称准双向口),其负载能力比较低,只能驱动4个TTL电路;...
  • STM32没有既是输出又是输入的GPIO,做为通用I/O要么配置为输入要么配置为输出,STM32中没有所谓双向配置。
  • stm32的io口模拟i2c程序

    2018-09-20 00:37:43
    stm32的io口模拟i2c程序/已经测试通过有效,LIS3DH测试
  • 单片机准双向口IO详解

    千次阅读 2016-03-03 15:49:22
    单片机准双向口IO详解 ...在单片机学习、开发和应用中,IO口的配置对功能的实现起着重要的作用,下面介绍常见的四种配置,而现在很多单片机都兼有这四种配置,可供选择。   一.准双向口配置   如下图,当IO输
  • 下面介绍一种双向电路,即能输出又能输入,一般双向电路只能传信号,这种电路可以接断电器和电机等功率器件。 工作原理搜双向电平转换电路,这里加一个Q2 PNP三级管,目的是增加输出电流到1A,可以接继电器和小功率...
  • 本文介绍了51单片机IO口的准双向口、双向口之间的区别。
  • IO口详解

    千次阅读 2020-06-04 17:57:52
    文章目录IO口介绍IO口的状态 IO口介绍   IO即input output,是计算机种输入输出系统,用于cpu与外界进行信息交互,例如cpu读内存数据需要io系统,cpu输出数据到屏幕显示出来也需要io系统,信息在io系统上传输有...
  • 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路。 灌电流方式:LED正极接VCC,负极接IO口。IO为高电平是LED两极电平相同,没有电流,LED熄灭;IO为低...
  • STM32 IO口双向问题

    2018-04-11 00:02:00
    源: STM32 IO口双向问题 转载于:https://www.cnblogs.com/LittleTiger/p/8784821.html
  • 通过前面的输入输出的内容(LED控制与按键的使用),我们对控制I/O有了一个基本的了解。...双向I/O与准双向I/O 从P0~P3的内部结构图可以看出,P0内部没有上拉电阻。当用作I/O时,CONTROL输出为0,ADDRDAT...
  • 双向口与准双向口的区别主要是:准双向口I/O操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。 准双向口就是...
  • 51单片机双向口和准双向口有什么区别

    万次阅读 多人点赞 2018-07-28 09:52:57
    双向口与准双向口的区别主要是:准双向口I/O操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。 准双向口就是...
  • 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路。
  • 关于单片机IO口讲解

    2020-07-14 11:52:20
    在51单片机的P0口工作在普通IO口模式下,为准双向IO口。而工作在第二功能状态下时,则为标准的双向IO口。由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,209
精华内容 2,483
关键字:

双向io口