野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19403|回复: 2

新手学习请教

[复制链接]
发表于 2019-7-12 21:42:43 | 显示全部楼层 |阅读模式
学习到自己构建库函数这里
ypedef unsigned int u32;
typedef unsigned short u16;
#define PERIPH_BASE                       ((unsigned int)0x40000000)
#define APB1PERIPH_BASE                    PERIPH_BASE
#define APB2PERIPH_BASE                    (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE                    (PERIPH_BASE + 0x20000)

#define RCC_BASE                           (AHBPERIPH_BASE +0x1000)
#define GPIOB_BASE                         ( APB2PERIPH_BASE +0x0C00)
//#define RCC_APB2ENR                        *(u32*)(RCC_BASE + 0x18)
/*
#define GPIOB_CRL                            *(u32*)(GPIOB_BASE + 0x00)
#define GPIOB_CRH                            *(u32*)(GPIOB_BASE + 0x04)
#define GPIOB_ODR                            *(u32*)(GPIOB_BASE + 0x0C)
*/

typedef struct
{
  u32 CRL;
u32 CRH;
u32 IDR;
u32 ODR;
u32 BSRR;
u32 BRR;
u32 LCKR;
} GPIO_TypeDef;
typedef struct
{
  u32 CR;
u32 CFGR;
u32 CIR;
u32 APB2RSTR;
u32 APB1RSTR;
u32 AHBENR;
u32 APB2ENR;
u32 APB1ENR;
u32 BDCR;
u32 CSR;
} RCC_TypeDef;
#define    GPIOB     ((GPIO_TypeDef*)GPIOB_BASE)
#define    RCC       ((RCC_TypeDef*)RCC_BASE)
结构体里是如何准确找到寄存器的地址的?一直理解不了。
原本以为是结构体里将地址区间等分的,可是把结构体里部分注释掉,还是可以点亮。

回复

使用道具 举报

发表于 2019-7-13 17:36:11 | 显示全部楼层
结构体是按类型的字节大小填充依次排下来的,你是怎么注释测试的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-15 09:25:47 | 显示全部楼层
WishWish 发表于 2019-7-13 17:36
结构体是按类型的字节大小填充依次排下来的,你是怎么注释测试的?

用 “//”注释的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 20:23 , Processed in 0.049231 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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