一、STM32寄存器简介及GPIO端口的初始化设置三步骤
1、STM32寄存器简介及找寻寄存器地址
寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 存放数据的寄存器是最好理解的,如果你需要读取一个数据,直接到这个寄存器所在的地方来问问他,数据是多少就行了。问寄存器这个动作,叫做访问寄存器。不同的数据会存放在不同的寄存器,例如引脚PA2与PB8的高低电平数据(1或0)肯定放在不同的寄存器里,那么怎么区分不同的寄存器呢?通过地址,不同的寄存器有不同的地址,就像老张行李寄存处在101号店铺,老王行李寄存处在258号店铺。
指令、地址寄存器与数据寄存器类似,里边存放的都是0和1,毕竟单片机也只认识机器码,机器码都是0或1,只是特别的规定下,数据寄存器里面存放的0和1表示数据,指令寄存器里存放的表示指令。
找寻寄存器地址需要查看数据手册,但是手册中没有直接给出所有的寄存器的地址,需要读者稍加计算。STM32给不同的寄存器分配了不同的地址,有点像划分了片区。在《STM32中文参考手册_V10》的第28页,有不同寄存器的地址范围。
例如,我们想要读取PB3引脚的电平,分为以下几步:
- 找到GPIOB的基地址
也就是找到GPIOB的小区。结论是,所有GPIOB相关的寄存器,都住在0x4001 0C00到0x4001 0FFF范围内。
- 找到端口输入寄存器的地址偏移
找到存储数据的那个屋子,结论是0x4001 0C00+8 = 0x4001 0C08
- 找到知道数据的那个人
PB3的数据位于从右往左数第4个。
而这个寄存器的位数是32位(虽然高16位没有用到),这就是32位的单片机的意思。每个寄存器都占据4字节,32位。而CPU的总线一次可以操作32位,所以比8位单片机厉害一点。
经过这三步查找,我们可以做出以下结论:
PB3的输入数据位于0x4001 0C08这个地址上,这个地址上存放数据的右起第4个位就是PB3引脚对应的高低电平。
参考文献:https://blog.csdn.net/geek_monkey/article/details/86291377
2、GPIO端口初始化
GPIO端口的初始化设置可以大致分三步骤:时钟配置、输入输出模式设置、最大速率设置。本次实验中的STM32的点灯则需要通过使能外设GPIO时钟,发出指令给外设GPIO,外设GPIO收到指令后,着手配置自己的寄存器,然后给IO口模式,让其实现各种功能。
其过程可表示为:CPU给指令—>GPIO收到指令—>配置内部寄存器—>配置IO口模式—>控制LED亮灭。
二、用STM32F103点亮流水灯
1、工程模板的建立
工程模板的建立对我们编写程序来说非常重要,但是我们自己来建立可能对入门者比较困难。我们可以在网上选择现成的工程模板文件,这些程序都是编写组织好的,将不同的功能文件做了区分,放在了不同的文件夹中,逻辑非常