STM32 >> 论直接对地址(寄存器)进行数据读取的操作方法

版权声明:如需转载请标注 https://blog.csdn.net/weixin_40973138/article/details/86678594

设对板上的ADC 数据寄存器进行直接数据读取,其地址为基地址0x4001 2000 加上偏移地址 0x4C


方法一是利用结构体封装对寄存器进行数据读取:

(由于该寄存器只有低16位是有效的,故在此只读取16位的数据。若需读取32位数据,则将u16 改为u32)

(u16) ADC1->DR

其封装结构体为:

#define ADC1                ((ADC_TypeDef *) ADC1_BASE)


#define ADC1_BASE             (0x40012000)


typedef struct
{
...
...
  __IO uint32_t JDR4;   /*!< ADC injected data register 4,                Address offset: 0x48 */
  __IO uint32_t DR;     /*!< ADC regular data register,                   Address offset: 0x4C */
} ADC_TypeDef;


二是直接对寄存器地址进行数据读取:

(由于该寄存器只有低16位是有效的,故在此只读取16位的数据。若需读取32位数据,则将u16 改为u32)

* (u16*)(0x40012000 + 0x4C)

在该语句中,先将0x4001204C 这一16进制数据强制转化为指向16位无符号整型数据的指针,然后再利用* 将指针所指地址的16位数据取出。

猜你喜欢

转载自blog.csdn.net/weixin_40973138/article/details/86678594