问题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比特无符号型整数。