提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
点亮LED二:合封寄存器之结构体
前言
外设寄存器的地址都是基于外设总线基地址的偏移地址,都在在外设基地址上逐次增加的。每个寄存器占4个字节。首地址已知,其他的相邻的寄存器按照4个字节逐次增加。在C语言中,类似于结构体数据类型,在结构体中首个成员变量代表分配的首地址,其他的成员变量按照定义的数据类型依次增加。但结构体定义的过程中是有空间没有具体分配地址的,只有应用的时候才去分配具体地址。
一、基地址分析
二、结构体封装寄存器
分析上图的地址偏移量,每个寄存器的空间都是4个字节。GPIOA偏移量为0x00 8000挂在APB2下,基地址0x4000 0000;GPIOA的地址为0x4000 0000 +0x00 8000=0x4000 8000。
依次类推:
三、引用结构体
我们可以定义一种结构体,结构体的基地址=外设基地址,结构体成员=外设基地址寄存器。成员的排列顺序跟寄存器的顺序一样。这样我们操作寄存器的时候就不用每次都找到绝对地址,只要知道外设的基地址就可以操作外设的全部寄存器,即操作结构体的成员即可。