打印

新手对stm32f外设的寄存器都通过结构体包裹的疑问与理解,

[复制链接]
2706|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kgp0213|  楼主 | 2008-10-27 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从STM32F提供的库来看,每个外设的寄存器都通过结构体包裹,结构体的实体被分配到该组寄存器的基地址,这样所有组内的寄存器就都有了定位,我的理解如下(初学者,问题可能比较低级),举例如下:
//#ifdef _GPIOC
  #define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
//#endif /*_GPIOC */

GPIOC被指向到 GPIO_TypeDef类型的一个地址(GPIOC_BASE),
map.h 中可以看到:
typedef struct
{
  vu32 CRL;
  vu32 CRH;
  vu32 IDR;
  vu32 ODR;
  vu32 BSRR;
  vu32 BRR;
  vu32 LCKR;
} GPIO_TypeDef;

我的理解为在上面的GPIO_TypeDef结构中 CRL CRH IDR 等结构成员按顺序排列,占据的实际地址要看编译器的选择,比如iar中要做如下图所示的设定

如附图所示设置即可以保证上述结构成员偏移量(地址差值)相差为4,
即可令 结构成员 CRL 对应到GPIOC_BASE偏移量为0的位置,IDR 对应到偏移量为8的位置。从而可以对应到 在实际上地址存在的GPIOx_CRL  GPIOx_CRH  GPIOx_IDR  GPIOx_ODR 等一组寄存器,
以上为我的理解,不知对否?纯属菜鸟,请指正
沙发
HWM| | 2008-10-27 18:24 | 只看该作者

这样有助于base+offset寻址。

使用特权

评论回复
板凳
kgp0213|  楼主 | 2008-10-28 08:38 | 只看该作者

看的人那么多,那么我的理解到底对不对呢

使用特权

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

本版积分规则

9

主题

71

帖子

0

粉丝