P2、寄存器

1. 访问被控单元

STM32地址总线为32位,寻址的最大空间数为4G(2^32 = 4G),地址范围:0x00000000 ~ 0xFFFFFFFF;

FLASH、SRAM、FSMC、片上外设和核内外设被有序组织在4G空间上,对其地址分配如下,通过对地址的读写即可访问被控单元;

Block0用于设计片内FLASH、Block1用于设计片内SRAM、Block2即用于片内外设

2. Block2

Block2用于设计片上外设,片上外设根据总线速度不同分别挂载在AHB、APB1、APB2上,Block2也被划分成三部分;

外设的行为与Block2上一个个内存单元绑定,通过操作这些内存单元就能驱动外设;

3. 寄存器

寄存器即Block2上的内存单元,STM32规定这些内存单元大小为4字节,针对内存单元对应的功能给其取名xxx寄存器;

以官方手册中的GPIOx_ODR寄存器为例:对Block2中某4个字节写入不同的值,将影响GPIO引脚pin0~pin15输出电平的高低,因此官方把这四个字节称为GPIOx_ODR(端口输出数据寄存器)

4. 寄存器地址

要操作寄存器,首先要明确寄存器对应的内存单元的地址,常常通过“基地址+偏移地址”的方式确定寄存器地址

(1)基地址与偏移地址

被动单元有序的组织在4G空间上,外设即在Block2上有序排列,假设第一个外设PERPH_0的地址为0xA,外设PERPH_1相对PERPH_0的偏移为0xB,那么0xA+0xB即PERPH_1的地址,这里0xA就是基地址,0xB就是偏移地址

(2)STM32外设地址偏移规律

Block2中按速度依次划分APB1、APB2和AHB总线区域,每个区域的基地址称为总线基地址;

APB1总线基地址就是Block2的起始地址,也叫做外设基地址,APB2相对APB1基地址偏移0x0001 0000,AHB相对APB1基地址偏移0x0001 8000

外设常按所属区域,即按所挂载总线的基地址设置区域内偏移;

寄存器按所属外设,设置相对外设基地址的偏移;

(3)举例

以GPIOx_ODR为例,在官方手册中其地址描述为:

GPIO挂载在总线APB2上,APB2总线基地址为0x4001 0000,GPIO分为A~E组,外设GPIOB相对APB2总线的地址偏移为0x0000 0C00,寄存器GPIOB_ODR相对外设GPIOB的地址偏移为0x0C,因此0x4001 0C0C即为寄存器GPIOB_ODR的地址

上述对基地址与偏移地址的说明是为了更好的理解STM32外设的地址划分,实际官方手册没有这么简略,手册中直接给出了外设的基地址,只需要用外设基地址+寄存器偏移即可:

5、编程实现

熟悉C语言的话,知道通过*解引用,即可对地址对应空间读写:

*(unsigned int *)(0x4001 0C0C) = 0xFF; // 对GPIOB_ODR的低16位赋值1

为增加代码可读性,可以优化:

#define GPIOB_BASE ((unsigned int)0x4001 0C00)
#define GPIOB_ODR *(unsigned int *) (GPIOB_BASE + 0X0C)

GPIOB_ODR = 0XFF; 

通过结构体,优化访问:

typedef struct{
    uint32_t CRL;
    uint32_t CRH;
    uint32_t IDR;
    uint32_t ODR;
    uint32_t BSRR;
    uint32_t BRR;
    uint16_t LCKR;
} GPIO_TypeDef;

#define GPIOB_BASE ((unsigned int)0x4001 0C00)
#define GPIOB ((GPIO_TypeDef *)GPIOB_BASE)

GPIOB->ODR = 0xFF;

为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值