如何识别芯片
芯片四周是引脚,左下角的小圆点表示1脚,然后从1脚起按照逆时针的顺序排列,如果没有小圆点,则代表从左边最上方逆时针开始计数
芯片里面构成
如下图所示:
总线矩阵:
总线之间交叉的时候如果有个圆圈则表示可以通信,没有圆圈则表示不可以通信。
内核与外设之间要同通信要通过I\S\D总线。需要总线矩阵来冲裁I/S/D冲突的情况。
下面我总结一下STM32里面包含了什么,首先是内核用于控制片上外设,这个内核是ARM公司开发的,而ST设计的是片上外设,外设要与ARM内核通信,需要通过总线,即总线矩阵。
什么是存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商,给存储器分配地址的过程就称为存储器映射。
给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。
通过绝对地址发访问内存单元:
ox40021 c14在我们看来是GPIOH端口ODR的地址,但是在编译器看来这只是一个普通的变量,想让编译器也认识为是一个指针,我们得进行强制类型转换,把它转换成指针。(unsigned int *)0x40021c14 ,然后在对这个指针进行 * 操作。
下面,我来睡一下,(unsigned int *)(0x40021c14)代表将0x40021c14转换为一个指针(也就是一个地址),再取 * 就代表给此地址赋值
寄存器
给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的就叫做寄存器映射。
下面来深入的讲解一下STM32的寄存器映射
如果一个一个去找外设寄存器的地址,那么将会是非常麻烦,我们可以有一个非常简单的方法,我们可以先确定每一条总线的地址,然后,在总线的地址上找到外设的地址。
首选取找总线的地址:
这个可以从芯片手册上查看。
上面查看的是STM32F76xxx
使用结构体来封装寄存器列表
补充复习C语言
指针
在C语言中,允许一个变量来存放指针,这种变量称为指针变量,指针变量的值就是某份数据的地址。
在定义指针变量p_a的同时对它进行初始化,并将变量a的地址赋予它。通过&来获取a的地址。
通过指针变量来取得数据:
运行结果都为15
总的来讲,我们只需要知道&是代表获取地址,*代表获取数据
结构体
结构体就是一种自定义的数据类型,相当于是一种聚合类型。
如上图所示,代表了2个结构体,stu1和stu2
结构体指针
获取结构体成员