OpenEdv-开源电子网

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

请教STM32 IO口的上下拉怎样设置

[复制链接]

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2011-6-11
在线时间
0 小时
发表于 2012-2-22 21:56:35 | 显示全部楼层 |阅读模式

 STM32 IO口设置成输入模式的时候,好像可以设置上下拉,但是仔细看了数据手册,没有找到相关说明

而原子例程,通过设置ODR寄存器来设置上下拉,ODR不是输出数据寄存器吗   怎么编程了上下拉设置了,而且数据手册上也没说啊

把原子按键初始化代码最后两句注释掉程序也按键检测一样的,说明后两句没用

void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入08 KEY_UP
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15; //PA15上拉
}

 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2012-2-22 22:14:04 | 显示全部楼层
对于输入来说,ODR就是设置上下拉的;
回复 支持 反对

使用道具 举报

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2011-6-11
在线时间
0 小时
 楼主| 发表于 2012-2-22 23:10:52 | 显示全部楼层
回复【2楼】螃蟹爱虫:
---------------------------------
你确定么   我在数据手册上没有看到相关说明
而且我把1改成零(按理说就设置成下拉了吧),这样按键就不能正常工作了吧  但是事实是它照常工作  问题还木有解决啊

GPIOA->ODR|=0<<13;    //PA13上拉,PA0默认下拉
GPIOA->ODR|=0<<15;    //PA15上拉
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-22 23:28:41 | 显示全部楼层
你要看看你的外部电路,有没有上拉电阻下拉电阻什么的?或者接了其他外设.
内部上下拉相当于100K左右的电阻.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2011-6-11
在线时间
0 小时
 楼主| 发表于 2012-2-23 08:56:06 | 显示全部楼层
硬件我用的就是你的MIN STM32开发板,看了你的原理图,外部是没有上下拉电阻的,
软件是在你的按键测试程序的基础上改
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-23 11:47:10 | 显示全部楼层
PA13,15就是KEY0,KEY1,key0接了10K的上拉.
KEY1接了10K的下拉.
另外你的设置有问题,设置为1是或,为0,则需要与了.
GPIOA->ODR|=0<<13;    //PA13上拉,PA0默认下拉 
GPIOA->ODR|=0<<15;    //PA15上拉
所以这两句话,其实是不对的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
发表于 2012-7-19 11:03:06 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
请问,如果要同时设置多个IO口上拉,用什么语句,比如:
void Init_LED()
{
             RCC->APB2ENR|=1<<2;
GPIOA->CRH&=0X000F0FFF;//PA11,PA13,PA14,PA15设置成输出
GPIOA->CRH|=0X33303000;
GPIOA->ODR|=1<<11;
GPIOA->ODR|=1<<13;
GPIOA->ODR|=1<<14;
GPIOA->ODR|=1<<15;
}

最后四句话,都是上拉,可以用什么语句一句话就解决啊?
STM32
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-19 11:21:51 | 显示全部楼层
GPIOA->ODR|=0XF<<11;
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
发表于 2012-7-19 11:40:39 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
哦。明白了。。。
STM32
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2013-9-26
在线时间
0 小时
发表于 2014-5-11 13:21:55 | 显示全部楼层
好   看了这个贴子终于明白了
回复 支持 反对

使用道具 举报

7

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-2-11
在线时间
14 小时
发表于 2014-5-27 17:10:25 | 显示全部楼层
回复【7楼】jj123paopao:
---------------------------------
输出有上拉下拉么?
为可睡懒觉,而奋斗终身!
回复 支持 反对

使用道具 举报

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
发表于 2014-6-19 10:05:08 | 显示全部楼层
回复【11楼】爱睡懒觉:
---------------------------------
一般是不设置上下拉的
STM32
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-11-27
在线时间
3 小时
发表于 2014-12-1 10:49:40 | 显示全部楼层
芯片片内设有上下拉电阻,在设计硬件电路的时候,什么情况下需要在外部设计上拉或下拉电阻啊 ?
只用芯片内部上下拉可以吗?
记忆如此美好,值得灵魂为之粉身碎骨。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2013-9-23
在线时间
0 小时
发表于 2015-3-17 15:33:15 | 显示全部楼层
受益匪浅,明白了一些。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2013-9-23
在线时间
0 小时
发表于 2015-3-17 16:04:59 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
初学者,有点疑问,ODR与IDR都是32位数据寄存器,ODR输出,IDR输入,为什么可以用ODR(输出)来设置输入的上拉与下拉,输出与输入不是矛盾吗???还是仅仅在输入的时候,ODR才有上拉与下拉功能???不设置ODR的时候,属于默认值,那么ODR的默认值是多少???为什么不用IDR,看了原子大哥的资料,对于IDR还是不明白,可否举个例子。在此先谢谢原子大哥,小弟真的很需要你的指导!!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-17 23:16:57 | 显示全部楼层
回复【15楼】可欣:
---------------------------------
好好看我们教程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2012-7-20
在线时间
9 小时
发表于 2015-4-7 12:59:34 | 显示全部楼层
你好,以下代码是"STM32不完全手册-寄存器版_V3.0"的P107页,按键的输入检测这章的。我的疑问就是:为什么在IO口配置位输入模式时,通过置位或者清0 ODR位,就可以设置IO为上拉输入或下拉输入,这是为什么呢?手册或者什么资料哪里有说明吗?我确实没有看到!
回复 支持 反对

使用道具 举报

8

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2012-7-20
在线时间
9 小时
发表于 2015-4-7 13:00:17 | 显示全部楼层
你好,以下代码是"STM32不完全手册-寄存器版_V3.0"的P107页,按键的输入检测这章的。我的疑问就是:为什么在IO口配置位输入模式时,通过置位或者清0 ODR位,就可以设置IO为上拉输入或下拉输入,这是为什么呢?手册或者什么资料哪里有说明吗?我确实没有看到!




谢谢:在中文手册中确实找到了,不过真的不明显!!!!



回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 19:50:10 | 显示全部楼层
回复【17楼】winter1970:
---------------------------------
106页,表17,最后一栏,好好看下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-4-20
在线时间
0 小时
发表于 2016-4-23 10:34:53 | 显示全部楼层
原子哥,输入输出上下拉的设置依据是什么?是不是说接的外设如果有上拉电阻就设置为下拉,外设没有接带上拉的就设置为上拉?教程里面Led实验LED0低电平有效则设置为下拉,蜂鸣器实验,高电平有效(蜂鸣器响)也设置为下拉。我上百度和教程查了很久都没有解释,关于IO口输出模式那一章也看了,都没有找到,请原子哥给个设置原则。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 16:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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