STM32寄存器理解(学习笔记)

STM32的架构包括FLASH和SRAM,ICode总线用于取指令,DCode处理数据读取,System总线控制寄存器,DMA提高数据传输效率。总线矩阵解决仲裁问题,AHB总线管理外设时钟。每个外设如GPIOB有特定地址,通过操作寄存器实现功能,这是单片机的基本操作逻辑。
摘要由CSDN通过智能技术生成

STM32芯片架构

FLASH:程序存储器,用于存储程序代码。

SRAM:数据存储器,用于存储变量。

内核与外设的通信方式:

ICode总线与FLASH进行通信,I表示Instruction,即指令,专门用来取址。以此读取程序运行。

1、DCode既可读取FLASH,也可读取SRAM。FLASH存储常量,即烧写后不可改变的量,C语言中用code修饰以存储到FLASH。SRAM存储变量,在程序中所有的变量无论是局部变量还是全局变量都存储在SRAM中。

2、System用来读取寄存器数据,即对外设进行控制时数据的传输线。

3、DMA可以不通过CPU直接传输数据,当数据传输时CPU只需要发送一个指令即可使其数据不通过CPU发送,加快CPU的效率,某种程度上做到CPU双线运行。

4、总线矩阵用来仲裁,DMA与DCode都可以读取数据,避免两者读数冲突,于是用总线矩阵进行仲裁决定由谁来读取数据,相当于一个开关。

5、AHB总线:分为APB1和APB2两总线,分别挂载一部分外设,用于控制外设的时钟线,尤为重要。

 

 每一个外设在STM32中都会分配一个地址

以GPIOB为例

GPIOB整体地址为0x4001 0C00 ——04001 0FFF

ODR寄存器为端口的数据寄存器,控制GPIOB的16个引脚的数据输出,地址偏移为0CH

故要找到GPIOB_ODR寄存器,只需要用GPIOB的基地址加上ODR寄存器的偏移地址

//GPIOB端口全部输出高电平
*(unsined int*)(0x40010C0C) = 0xFFFF;
//(unsigned int*)表示为强制地址转换,即将这一串数字转换为地址。
//*取地址内容,如果学过汇编的话*(unsigned int*)相当于@;

 总结:对于单片机操控其实都是定位每个外设的地址,然后对地址里的内容进行操作,这便是寄存器操作,也是所有单片机的通用逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值