F407标准库之基础知识

STM32的结构体封装包括对底层寄存器的封装和外设参数的封装。寄存器结构体直接映射固定地址,而参数结构体用于初始化设置,如GPIO_InitTypeDef。在使用中应注意不同结构体的区别,以便正确操作外设和配置参数。
摘要由CSDN通过智能技术生成

关于STM32的结构体封装

在STM32中,有两种容易弄混的结构体封装。

第一种是系统对底层寄存器的封装

结构体类型定义好之后,是不会分配地址空间的,此时只是个类型定义,之后使用的时候,通常会先定义一个结构体变量,这时候就有了一个对应的结构体变量的地址,然后获取这个变量的地址,就是个对应的结构体指针。在STM32的寄存器结构体定义中,就省去了定义结构体变量这一过程,这是因为寄存器的地址都是固定的,不需要像变量一样分配地址空间,只需要将结构体的首元素的地址强行转换成对应结构体类型指针,就能得到该结构体的指针,之后用这个指针去访问相应的寄存器即可。这点需要注意。

这样,通过外设名称和对应的寄存器名称就可以直接操作寄存器了。

这是对寄存器的封装,另外,在标准库中,还有另一种结构体,就是对某外设需要做哪些设置进行封装,也就是参数的封装,这个是因为要传入参数的不应该过多,所以封装成一个结构体,然后传入对应的初始化函数,初始化函数里取这些数据,然后放入对应的寄存器中。后续如果想要再设置某个单独的参数,可以直接操作寄存器。

这两种结构体的名称一般也很像,比如寄存器的封装叫做GPIO_TypeDef,要初始化的数据结构体封装叫做GPIO_InitTypeDef,不要搞错了。一般,我们写自定义外设时,写的都是XXX_InitTypeDef

一般初始化时,会指定这两个结构体的指针,然后内部再取值处理,比如:

更多基础内容详见正点原子参考手册。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值