野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13568|回复: 9

stm32 地址位数相关问题疑惑,求大神指点!

[复制链接]
发表于 2015-3-18 11:47:51 | 显示全部楼层 |阅读模式
小弟最近对stm32的地址分配理解不了,很是疑惑,请大神指点~~~(我尽量把问题描述清楚哈)
如下为什么STM32官方库文件中摘取的一部分
问题1:STM32的中地址是按Bit,Byte,还是Word作为单位的?    例如0x8000000,它后面的单位是什么?
问题2:为什么有的地址是按照uint16_t,有的是按照uint32_t,这个是为什么?
问题3:如GPIOC和DMA1_Channel1,它们其实都是一个指针,按我的理解,在32位系统下,所有的指针都是占用4个Byte,那干嘛还需要区分 ((GPIO_TypeDef *) 类型指针和 ((DMA_Channel_TypeDef *)指针?
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */


#define FLASH_BASE             ((uint32_t)0x08000000) /*!< FLASH base address in the alias region */
#define SRAM_BASE              ((uint32_t)0x20000000) /*!< SRAM base address in the alias region */
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */


#define GPIOC                      ((GPIO_TypeDef *) GPIOC_BASE)
#define DMA1_Channel1       ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE)

回复

使用道具 举报

发表于 2015-3-18 13:36:14 | 显示全部楼层
所有指针本身是32位的,但它指向的变量不一定是32位的
回复 支持 反对

使用道具 举报

发表于 2015-3-18 15:37:59 | 显示全部楼层
编址当然是按字节编址了,0x8000000指向一个字节,后一个字节是0x8000001,只不过由于字节对齐,这些奇数地址不太常见而已。
回复 支持 反对

使用道具 举报

发表于 2015-3-18 15:43:22 | 显示全部楼层
一般单片机是16位总线,地址就按照16位格式写;32位的就按照32的格式。
回复 支持 反对

使用道具 举报

发表于 2015-3-18 16:07:11 | 显示全部楼层
Light_Gor 发表于 2015-3-18 15:37
编址当然是按字节编址了,0x8000000指向一个字节,后一个字节是0x8000001,只不过由于字节对齐,这些奇数地 ...

所以我们说52单片机内部RAM是256Byte
STM32内部RAM 64KB  硬盘容量500GB  内存条容量 2GB  单位是统一的
但访问时不一定都以字节为单位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-18 17:03:16 | 显示全部楼层
野草 发表于 2015-3-18 15:43
一般单片机是16位总线,地址就按照16位格式写;32位的就按照32的格式。

小弟请问大神:
就以16位单片机为例:“地址就按照16位格式写”是不是就是说:例如现在的地址是0x80,那它的下一个地址就是0x82(中间相差2个Byte,刚好16个Bit),是这个意思吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-18 17:07:29 | 显示全部楼层
Light_Gor 发表于 2015-3-18 15:37
编址当然是按字节编址了,0x8000000指向一个字节,后一个字节是0x8000001,只不过由于字节对齐,这些奇数地 ...

小弟请问大神:(就以这个为例)
我想知道它的1Byte的地址能包含多少数据量?
是不是16位的单片机,它的1Byte地址能包含16Bit的数据?
回复 支持 反对

使用道具 举报

发表于 2015-3-19 12:55:35 | 显示全部楼层
liuchang 发表于 2015-3-18 17:03
小弟请问大神:
就以16位单片机为例:“地址就按照16位格式写”是不是就是说:例如现在的地址是0x80,那 ...

不是这样,单片机内部总线是并行的,一般多少位的单片机,内核寻址总线就是多少位的,直观的理解就是有多少条线。如8位单片机,就是8位总线,寻址空间也就是2^8(256字节),初始地址0x00;16位单片机,就是16位总线,初始地址为0x0000,寻址空间2^16(64K);一个字节就是8位数据,这是计算机科学的规定,跟任何硬件都无关。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 16:50:48 | 显示全部楼层
Light_Gor 发表于 2015-3-19 12:55
不是这样,单片机内部总线是并行的,一般多少位的单片机,内核寻址总线就是多少位的,直观的理解就是有多 ...

谢谢大神指点~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 16:51:30 | 显示全部楼层
Light_Gor 发表于 2015-3-19 12:55
不是这样,单片机内部总线是并行的,一般多少位的单片机,内核寻址总线就是多少位的,直观的理解就是有多 ...

谢谢大神指点~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-7 02:52 , Processed in 0.044443 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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