打印
[STM32F4]

新手,GPIO配置的问题

[复制链接]
1386|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
浪浪云|  楼主 | 2015-10-6 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触stm32,关于GPIO配置的问题,库函数操作 GPIO_OType_PP = 0x00;(0x00和0x03是要拆分成32位数据理解吗?)


要是对寄存器操作,赋值是32位的(并且可以看出直接哪一位)。。。

难道对整个GPIO配置就直接像手册那样说的两位就可以?  
写的有点乱,:lol多谢各位
沙发
小小财迷| | 2015-10-6 10:38 | 只看该作者
流程如下:举例PA5用作GPIO输出口
1.使能PA5作为GPIO功能(IO口一般都是复用,要选择用作GPIO)
2.配置PA5为输出功能(选择工作模式)
3。初始化该IO口。为0或为1.PA->DOUT |= (1<<5); 初始化为1;PA->DOUT &=~ (1<<5); 初始化为0
ARM内核都是32为指令集。PA5就是第5位,可以用1左移的方法(向高位移动)来表示

使用特权

评论回复
板凳
浪浪云|  楼主 | 2015-10-6 10:50 | 只看该作者
小小财迷 发表于 2015-10-6 10:38
流程如下:举例PA5用作GPIO输出口
1.使能PA5作为GPIO功能(IO口一般都是复用,要选择用作GPIO)
2.配置PA5 ...

这样配置GPIO的某一位可以,我的意思是为什么对整个gpio配置,输出,速率,什么的只有两位十六进制,像
  GPIO_OType_PP = 0x00,
  GPIO_OType_OD = 0x01,
GPIO_Speed_2MHz   = 0x00, /*!< Low speed */
  GPIO_Speed_25MHz  = 0x01, /*!< Medium speed */
  GPIO_Speed_50MHz  = 0x02, /*!< Fast speed */
  GPIO_Speed_100MHz = 0x03 ,
这样的”两位“的十六进制,要是寄存器进行这些操作就是32位的,

使用特权

评论回复
地板
浪浪云|  楼主 | 2015-10-6 11:15 | 只看该作者
小小财迷 发表于 2015-10-6 10:38
流程如下:举例PA5用作GPIO输出口
1.使能PA5作为GPIO功能(IO口一般都是复用,要选择用作GPIO)
2.配置PA5 ...

为什么是两位的?

使用特权

评论回复
5
小小财迷| | 2015-10-6 12:42 | 只看该作者
你是哪一款芯片?要认真看手册,上面说的很清楚的。

使用特权

评论回复
6
小小财迷| | 2015-10-6 12:48 | 只看该作者
STM32是吧。没有两位(你说的是16bit*2)?在ARM中一个字是32bit,一个字有4个字节(8byte),FLASH中的数据都是以字为单元保存的。16bit在系统中没有意义,要么就是字(32bit),要么就是字节(8bit)。举个例子如果是PA15定义输出为1,PA->DOUT |= (1<<15);

使用特权

评论回复
7
小小财迷| | 2015-10-6 12:49 | 只看该作者
而你说的16bit,一般mcu每个port,最多定义16个pin.如PA[15:0],其保存在FLASH的偏移地址中是以32bit保存的,由于只有16个引脚,32为的高16位默认为0,不予操作的。

使用特权

评论回复
8
戈卫东| | 2015-10-6 12:51 | 只看该作者
看文档。你的库的文档怎么说你就怎么用就可以了。

使用特权

评论回复
9
小小财迷| | 2015-10-6 12:52 | 只看该作者
关于系统的存储结构,建议你仔细的看一下手册。尤其是falsh及dataflash划分那一块,看了,就应该有个很清楚的印象。存储单元都是以4字节为单元进行的,而我们所熟悉的8位机(如51),是以1字节为单元存储的

使用特权

评论回复
10
小小财迷| | 2015-10-6 12:55 | 只看该作者
至于你说的对一个port的所有pin进行一次性操作,也很简单。只要对port口的基地址进行赋值操作就行了。你仔细找一下他的库文件,里面有各个模块的宏定义。你可以全工程收索GPIO,索引结果里有你想要的所有关于GPIO基地址和偏移地址的宏定义。

使用特权

评论回复
11
小小财迷| | 2015-10-6 12:59 | 只看该作者
学习任何一款新的MCU都不是简单地事情,你要你花足够的时间,总有一天你会把它吃透。关于ARM,无论是M0,M1,M4等等,只要你吃透了任何一款,其实在学习其他内核的都不是很难了,基本的东西是类似的。起码应用起来会很得心应手,至于那些去深挖其原理大可没有必要。有些芯片其实,原厂生产之后也不是很完美,实际应用时也会出现很多问题和bug,就譬如说STM32系列的,在EMC试验等级高是就不行了。其原厂对EMC设计能力有时候还很难满足我们国内的EMC试验等级。但是在大多数要求不高的场合STM32和STM8系列以其很高的性价比赢得了很大的市场占有率。加油,相信自己,GO on!

使用特权

评论回复
12
浪浪云|  楼主 | 2015-10-6 14:43 | 只看该作者
小小财迷 发表于 2015-10-6 12:59
学习任何一款新的MCU都不是简单地事情,你要你花足够的时间,总有一天你会把它吃透。关于ARM,无论是M0,M1 ...

恩明白了,谢谢

使用特权

评论回复
13
bgb719| | 2015-10-6 20:47 | 只看该作者
11

使用特权

评论回复
14
runningwzf| | 2015-10-6 21:14 | 只看该作者
0x00可以变成是32位的
常量赋值给变量,会进行类型转换

使用特权

评论回复
15
fanxsd| | 2015-10-6 21:22 | 只看该作者

看库函数使用指南啊!

使用特权

评论回复
16
加油吧小鱼儿| | 2015-10-7 13:35 | 只看该作者
多看库函数,多读读手册~

使用特权

评论回复
17
lefeng| | 2015-10-8 21:23 | 只看该作者
stm32是ARM内核,其中的一个字是32bit,一个字有4个字节

使用特权

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

本版积分规则

23

主题

99

帖子

2

粉丝