STM32入门(二)----寄存器

STM32是什么样的

在这里插入图片描述
丝印:明显的STM32F103ZET6
下面的是产地、批号等
在这里插入图片描述
可以在左下角看到一个小圆点,从此开始按逆时针顺序就是1~144的脚位。

芯片里面有什么

在这里插入图片描述在这里插入图片描述
这个图是真的复杂,看不懂,学完之后再来会会它。
ICode总线
ICode中的I表示Instruction,即指令,我们写好的程序编译之后都是一条条指令存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指令的。
Dcode总线
DCode中的D表示Data,即数据,这条总线是用来取数据的。我们在写程序的时候,数据有常量和变量两种,变量就是固定不变的,用C语言中的const关键字修饰,是放到内部的FLASH当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被DCode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的

存储器映射

在这里插入图片描述

存储器本身不具有地址信息,它的地址是由芯片厂商或者用户分配,给存储器分配地址的过程就称为存储器映射

给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。
在这里插入图片描述

寄存器映射

给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

Q:如何让GPIO的16个端口全部输出高电平?
1、在STM32中文参考手册中找到2.3存储器映像,在这里找到GPIOB的初始地址0x40010c00。
在这里插入图片描述
2、在STM32中文参考手册中找到8.2.4端口输出数据寄存器(GPIOx_ODR)在这里插入图片描述
它的地址偏移是0xc0所以GPIOB_ODR的初始地址就是0x40010c0c
3、*(unsigned int*)(0x40010c0c)=0xffff
解释:
(unsigned int*)(0x40010c0c)将(0x40010c0c)强制转换为一个unsigned int的指针;
*(unsigned int*)(0x40010c0c)是取得这个指针指向的位置的值;
*(unsigned int*)(0x40010c0c)=0xffff则是将这个指针指向的值赋值0xffff,即16位全是高位。

变1:

#define GPIOB_ODR (unsigned int*)(0x40010c0c)
*GPIOB_ODR =0xffff;

变2:

#define GPIOB_ODR *(unsigned int*)(0x40010c0c)
GPIOB_ODR =0xffff;

变3:
在这里插入图片描述

#define PERIPH_BASE      ((unsigned int)0x40000000)
#define APB2PERIPH_BASE  (PERIPH_BASE + 0x00010000)
#define GPIOB_BASE       (APB2PERIPH_BASE + 0x0C00)
#define GPIOB_ODR        *(unsignedint*)(GPIOB_BASE+0x0C)

// PB0输出输出低电平
GPIOB_ODR &= ~(1<<0);

// PB0输出输出高电平
GPIOB_ODR |= (1<<0);

变4:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值