OpenEdv-开源电子网

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

问一个关于IO口的小问题,大家来看下

[复制链接]

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2013-12-14 00:24:50 | 显示全部楼层 |阅读模式
 小弟最近在调试一个液晶的程序,后来在网上移植了一个,是可以用的,但是以下几行代码不是很懂,首先是液晶管脚的初始化,其中T6963_D_L和 T6963_D_H 以及T6963_D0什么的都是宏定义,我想问的是,为什么已经设置了IO口为输入但是还能调用 GPIO_SetBits 函数呢,还有,我的一个小伙伴说,好像设置IO口为开漏输出,却还是可以读出IO口的电平,这是为什么呢?希望原子哥和各位能解答下。

       GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin  = T6963_D0 | T6963_D1 | T6963_D2 | T6963_D3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(T6963_D_L, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin  = T6963_D4 | T6963_D5 | T6963_D6 | T6963_D7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(T6963_D_H, &GPIO_InitStructure);
GPIO_SetBits(T6963_D_L, T6963_D0 | T6963_D1 | T6963_D2 | T6963_D3);
GPIO_SetBits(T6963_D_H, T6963_D4 | T6963_D5 | T6963_D6 | T6963_D7);

半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-14 00:57:03 | 显示全部楼层
回复【楼主位】东北小辉辉:
---------------------------------
你好好了解下stm32的IO口.
你这代码设置为上下拉输入,然后是通过ODR寄存器设置0还是1,来决定是下拉还是上拉.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
 楼主| 发表于 2013-12-14 01:23:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不对呀 原子哥 
我是用库函数来设置的
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
这句话不是已经决定了IO口是上拉输入了吗?
并且,我用led做实验,
发现设置IO口为上拉输入的时候,调用GPIO_SetBits函数后,led还是可以亮的,只是亮度较低,请问这是问什么呢?
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-14 10:08:40 | 显示全部楼层
回复【3楼】东北小辉辉:
---------------------------------
确实,

GPIO_SetBits(T6963_D_L, T6963_D0 | T6963_D1 | T6963_D2 | T6963_D3);
GPIO_SetBits(T6963_D_H, T6963_D4 | T6963_D5 | T6963_D6 | T6963_D7);
这两行可以去掉。

至于你的上拉方式LED还可以量,你看看电路有没有其他地方有外部的上拉电阻?
内部上拉一般是50K欧姆以上,很难点亮一个LED了。
你可以测量下LED的电流是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2013-12-14 15:51:37 | 显示全部楼层
回复【楼主位】东北小辉辉:
---------------------------------
建议楼主根据这个问题好好看看资料研究研究IO结构和各个寄存器
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 16:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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