OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4303|回复: 3

关于GPIO的双向传输。。。

[复制链接]

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8036
金钱
8036
注册时间
2014-8-13
在线时间
1595 小时
发表于 2015-3-1 18:35:51 | 显示全部楼层 |阅读模式
5金钱

论坛上说GPIO双向传输使用OD模式,外部加上拉。

我有一个程序,需要GPIOF驱动地址线,GPIOC的低八位作为数据线,GPIOF是推挽模式,GPIOC是开漏模式,外加3.3K上拉电阻至3.3V,与之通讯的芯片也是3.3V的,程序大概如下:

/////////////////////////准备工作//////////////////////////////
    //PF:E_ADDR   推挽 0
    GPIOF ->CRH = 0x33333333;
    GPIOF ->CRL = 0x33333333;

    GPIOF ->ODR &= 0xFFFF0000;


    //PC0~7 E_DATA  开漏
  GPIOC ->CRL = 0x77777777;
 GPIOC ->ODR |= 0x000000FF;


然后读取数据过程大概如下:

//u16 addr;

//u8 data;

GPIOF ->ODR |= addr;

PEout(3) = 0;

data = (u8)(GPIOC ->IDR & 0x000000FF);

PEout(3) = 1;



//对芯片的写操作结束后,都有一个GPIOC ->ODR |= 0x000000FF;动作,所以读动作里没有这个操作


结果数据读取不到。外部拉阻换过2.2K  7.5K  4.7K  24K   都没有成功。

请问如果我要想GPIO双向通讯,需要做怎样的修改尝试呢? 


外部芯片已经确认是能正常通讯的,速度也够。STM32F103ZET6与外部芯片是pin to pin直接连接,没有任何转换、匹配芯片。




最佳答案

查看完整内容[请看2#楼]

楼主理解错了,双向IO不是指同时,而是分时!!比如A时刻做输出,B时刻做输入,这种设置我们例程很常见,比如DS18B20实验。参考我们例程吧 。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-1 18:35:52 | 显示全部楼层
楼主理解错了,双向IO不是指同时,而是分时!!比如A时刻做输出,B时刻做输入,这种设置我们例程很常见,比如DS18B20实验。参考我们例程吧 。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8036
金钱
8036
注册时间
2014-8-13
在线时间
1595 小时
 楼主| 发表于 2015-3-2 10:36:29 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我又看了下DS18B20例程,发现我的程序的确跟例程不一样。例程里,对读和写过程之前,都要设置IO口的工作模式,然后再获取数据,参考了论坛里一个关于双向IO的讨论,
错误地理解为在获取数据的时候不需要更改IO口工作模式。

我实际上写的动作是这样的:
   //写的过程
    GPIOC ->ODR &= 0xFFFFFF00;//数据字节清零
    GPIOC ->ODR |= data;//数据字节赋值
    GPIOF ->ODR = addr;//地址双字赋值
    Eout(4) = 0;//使能片外芯片的WRITE脚(低有效)
    Eout(4) = 1;//片外芯片WRITE脚上升沿锁存数据字节数据
    GPIOC ->ODR |= 0x000000FF;//OD置1,为“读”功能准备

可以看到,GPIOC的工作模式始终处于OD状态。
我本以为,在OD状态,输入数据寄存器是可以通过TTL肖特基触发器拾取IO口上电压状态的,原来还是要更改IO工作模式。


谢谢正点原子的指点。


在这里我还有一个疑问:
为什么要使用OD模式呢?   DS18B20例程里写动作是推挽,读动作是带拉阻(内外都上拉)的上拉输入,没有使用OD模式啊?   我使用并行接口与外部IC通讯,可否使用浮空输入+推挽输出模式呢?  外部不加拉阻。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-3 23:19:12 | 显示全部楼层
回复【3楼】mack13013:
---------------------------------
你可以自己测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 14:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表