当前位置: 代码迷 >> 单片机 >> stm32 数据与地址的懂得
  详细解决方案

stm32 数据与地址的懂得

热度:682   发布时间:2016-04-28 14:45:04.0
stm32 数据与地址的理解
问题1:请问大神:stm32单片是32位的,那它地址是按多少位存储的?例如:如果地址A=ox000000000,那0x00000001与0x00000000之间是相差1个WORD,还是1个Byte?
问题2:如程序注释部分,为什么需要将地址强制转换成32位?
小弟愚钝,恳请大神不惜赐教~~~
#include "adc.h"
#define ADC1_DR_Address ((u32)0x40012400+0x4c);//这里的地址为什么要强制转换成32位的?
__IO uint16_t  ADC1_ConvertedValue;

void ADC1_Init(void)
{
~~~
DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC1_ConvertedValue;
~~~

------解决思路----------------------
绝大多数的单片机和微控制器(arm,x86),地址空间都是以字节为单位的,也就是说一个地址是一个字节,目前我所知道的处理器中,只有DSP的地址空间是以16比特为单位的。所以在STM32上,一个地址就是一个字节。

代码中转成u32,我理解是因为DMA_PeripheralBaseAddr成员参数时u32的,即使没有那个u32的强制转换,也不会错。

关于地址的强制转换,你可以比较一下下面有什么不同

u8 *pchar = ((u8 *)0x40012400)+1;
u16 *pshort = ((u16 *)0x40012400)+1;
u32 *pint = ((u32 *)0x40012400)+1;

备注:u8位8比特无符号整数,u16位16比特无符号型整数,u32位32比特无符号型整数。