打印

谁来告诉我一下,GPIO_Mode的几个值是怎么来的???

[复制链接]
15844|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a34384750|  楼主 | 2012-4-27 20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef enum
{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;谁能告诉我,0x0 0x04 0x28 0x48....是怎么得来的???谢谢了

想问一下,0x0 0x04 0x28 等等是怎么得来的~~~
沙发
logokfu| | 2012-4-27 21:09 | 只看该作者
新手不要急,这个东西确实不是无缘无故来的。你看手册啊,手册上有寄存器介绍,这个相当于是给寄存器里面赋值的。

使用特权

评论回复
板凳
logokfu| | 2012-4-27 21:12 | 只看该作者
看这里


使用特权

评论回复
地板
gaochy1126| | 2012-4-27 22:10 | 只看该作者
这个都是需要从手册上查找的,这是利用的结构体定义的

使用特权

评论回复
5
王紫豪| | 2012-4-28 01:11 | 只看该作者
软件库是把双刃剑啊

使用特权

评论回复
6
logokfu| | 2012-4-28 08:31 | 只看该作者
软件库是把双刃剑啊
王紫豪 发表于 2012-4-28 01:11


我觉得用固件库可以顺便锻炼巩固下C语言结构体语法。:lol

使用特权

评论回复
7
宋业科| | 2012-4-28 08:58 | 只看该作者
设计的人想出来的。

使用特权

评论回复
8
a34384750|  楼主 | 2012-4-28 09:35 | 只看该作者
3# **kfu
这个图我看了,就是具体分析的时候感觉没想过来,比如下拉输入为什么就是0x28=0b0010 1000 这个是怎么在位上对应的?谢谢!

使用特权

评论回复
9
a34384750|  楼主 | 2012-4-28 09:37 | 只看该作者
5# 王紫豪
确实,有点自己不编搞不明白

使用特权

评论回复
10
a34384750|  楼主 | 2012-4-28 09:38 | 只看该作者
4# gaochy1126
手册看了~~~就是具体分析的时候感觉没想过来,比如下拉输入为什么就是0x28=0b0010 1000 这个是怎么在位上对应的?谢谢!

使用特权

评论回复
11
logokfu| | 2012-4-28 09:46 | 只看该作者
看来楼主问题确实很多啊。楼主用过51单片机吗

使用特权

评论回复
12
a34384750|  楼主 | 2012-4-28 15:13 | 只看该作者
11# **kfu 用过啊~
我不懂得是,你看,在输入模式下,CNF=10是上拉\下拉输入模式,首先这个上拉下拉是什么决定的呢?为什么0X28就是下拉输入呢?

使用特权

评论回复
13
logokfu| | 2012-4-28 16:06 | 只看该作者
你把转换成bcd码不就明白了吗

使用特权

评论回复
14
logokfu| | 2012-4-28 16:08 | 只看该作者
1个16进制数转换成4位bcd码

使用特权

评论回复
15
logokfu| | 2012-4-28 16:10 | 只看该作者
8个16 进制数刚好转换成32位bcd码,对应着表格啊

使用特权

评论回复
16
a34384750|  楼主 | 2012-4-28 16:35 | 只看该作者
13# **kfu
呃。。。我已经搞明白了,看了几遍GPIO的初始化程序。

下拉输入设置成0x28低四位转化成BCD码1000对照表是一样的,这个很简单,我知道。
但你还是没有解释出为什么还有前高四位的0010。

后来发现上下拉是由输出配置的,高四位是用在后面设置BSRR和BRR寄存器的,是通过输出寄存器来设置是上拉还是下拉的。

不过,还是谢谢你的耐心回复~

使用特权

评论回复
17
江苏大将| | 2013-1-12 17:06 | 只看该作者
a34384750 发表于 2012-4-28 16:35
13# **kfu
呃。。。我已经搞明白了,看了几遍GPIO的初始化程序。

楼主能说的更详细点吗,高四位0010究竟是怎么看的?谢谢

使用特权

评论回复
18
niwencui| | 2013-1-30 15:57 | 只看该作者
请问楼主最后的解释是什么意思,高位0010到底是什么意思

使用特权

评论回复
19
jerry_ls| | 2013-3-14 11:10 | 只看该作者
刚刚看了也有点不明白,低四位的高两位10表示IPD,低两位表示速度,那么高四位0010到底咋解释呢?

使用特权

评论回复
20
a34384750|  楼主 | 2013-6-26 09:57 | 只看该作者
江苏大将 发表于 2013-1-12 17:06
楼主能说的更详细点吗,高四位0010究竟是怎么看的?谢谢

不好意思,很久没上了。  

GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
这个两个的低位都是1000,高位一个是0010一个是0100,在GPIO的初始化中最后
        /* Reset the corresponding ODR bit */
        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
        {
          GPIOx->BRR = (((uint32_t)0x01) << pinpos);
        }
        else
        {
          /* Set the corresponding ODR bit */
          if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
          {
            GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
          }
        }

说明高位是用来区分设置的模式是IPU还是IPD,从而用来初始化IO端口的输出用的。
所以0010和0100只是用来决定初始化时IO端口的输出电平是高还是低用的,高位起得是一个区分作用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝