[其他ST产品] STM32寄存器地址映射和寄存器映射原理及LED闪烁实验

[复制链接]
 楼主| 高级安全大使 发表于 2023-1-29 17:21 | 显示全部楼层 |阅读模式
寄存器是什么?
寄存器是中央处理器内的组成部分。 寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。简单来说,寄存器就是存放东西的一个空间器物。寄存器可能存放的是指令、数据或地址。

二、寄存器地址映射和寄存器映射原理
寄存器地址映射
地址映射:由百度词条可知为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。

 楼主| 高级安全大使 发表于 2023-1-29 17:24 | 显示全部楼层
寄存器映射原理
由于32位的STM32最大寻址能力位32位,那么2^32为4GB,于是只要拿到这个内核进行外设的时候内存均不能超过4GB。并且在这4GB内,ARM已经进行了分类:
2382363d63b4b11fe6.png
在存储器的区域单元中,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好**还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
 楼主| 高级安全大使 发表于 2023-1-29 17:25 | 显示全部楼层
LED流水灯设计
要求:
假设你手中已有 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿LED,并搭建了电路,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。
 楼主| 高级安全大使 发表于 2023-1-29 17:27 | 显示全部楼层
GPIO端口的初始化
1、时钟配置
本次实验采用GPIOA、B、C三个端口。由下图分析得,该三个端口都属于APB2总线。
3066363d63be76c44b.png
 楼主| 高级安全大使 发表于 2023-1-29 17:27 | 显示全部楼层
找到时钟使能寄存器映射基地址、
7942763d63c18ca12c.png

 楼主| 高级安全大使 发表于 2023-1-29 17:30 | 显示全部楼层
找到端口偏移地址以及对应端口所在位置
1136963d63ca94dc24.png
 楼主| 高级安全大使 发表于 2023-1-29 17:31 | 显示全部楼层
定义宏使得使能对应端口时钟
  1. //----------------APB2使能时钟寄存器 ---------------------
  2. #define RCC_APB2ENR                *((unsigned volatile int*)0x40021018)

  3.         RCC_APB2ENR|=1<<2|1<<3|1<<4;                        //APB2-GPIOA、GPIOB、GPIOC外设时钟使能       

 楼主| 高级安全大使 发表于 2023-1-29 17:49 | 显示全部楼层
输入输出模式设置
我们这次实验采用通用推挽输出模式,最高输出时钟频率2Mhz。分别用到A5、B9、C14三个引脚。其中A5属于端口配置低寄存器偏移地址为0x00,B9、C14属于端口配置高寄存器偏移地址为0x04。
 楼主| 高级安全大使 发表于 2023-1-29 17:49 | 显示全部楼层
端口配置低寄存器
5768063d6412f9533d.png
 楼主| 高级安全大使 发表于 2023-1-29 17:50 | 显示全部楼层
端口配置高寄存器
3374963d6414322039.png
 楼主| 高级安全大使 发表于 2023-1-29 17:52 | 显示全部楼层
找到GPIOx的基地址
7270563d641f38fe2d.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

445

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部