stm32标准库编程模型

相对于使用c语言指针操作寄存器地址直接设置寄存器数据,标准库使用c语言结构体和函数对mcu外设进行了封装。由于c没有面向对象机制,所以只能使用结构体来封装 外设对象的属性,函数来实现对外设对象的行为操作。

对于GPIO每个外设一般都对应多个寄存器,如控制寄存器、数据寄存器、时钟寄存器等,每个寄存器最多32位,可实现很多种设置。因此采用了结构体 + 枚举 进行封装。

PPP_InitTypeDef 用来定义外设对象结构体和直接属性,每个属性对应一个寄存器枚举类型PPPxxx_TypeDef,属性(寄存器)枚举类型包含了对该寄存器的所有可能设置。

另外有些外设没有使用枚举的方式定义寄存器的可选值,而是采用定义多个常量宏方式,这时PPP_InitTypeDef 属性仍然对应一个寄存器可能的值。

所以,无论使用枚举还是宏的方式定义寄存器可选值,最终都通过PPP_InitTypeDef来设置外设寄存器。

实现对寄存器设置的函数为PPP_Init,设置好外设对象的结构体后,调用该函数即完成对 对象寄存器的初始化配置。

由于普通的IO(GPIO)是独立工作的,只需要控制其输出高低电平即完成工作,所以一般不需要其它操作,当然如果需要使用GPIO模拟其它功能,这时就需要标准库定义的其它函数,如读数据、写数据、设置复用功能等。

具体到stm32的外设,由于stm32 芯片的管脚除了电源、极少数独立功能引脚,剩下的都是GPIO,所有具体外设功能都是从这些GPIO复用而来,因此要想使用某功能,需要通过GPIO_PinAFConfig 设置该GPIO引脚要复用的功能。

另外,考虑到低功耗的设计,stm32的所有外设功能可以独立设置开启和关闭,对应外设的时钟也需要独立开启和关闭,如果该外设的时钟没有开启,无论怎样外设都不会工作。

对于其它外设,一般都需要遵守某个协议才能使用,如通信类的i2c、spi、UART管脚,需要先熟悉协议,了解是否需要时钟同步、数据收发的格式等其它协议规范,然后按照规范通过函数操作外设寄存器,实现具体外设功能。

无论使用什么外设,必须根据硬件原理图,确定具体使用的管脚才能进行开发。硬件的通信一般都是在特定时钟频率下发送一系列特定格式的帧(高低电平)来实现的。

具体到显示外设,则必须有基本的字库实现对ascii码的解析才能显示文字,中文还需要中文字库。

stm32标准库是对寄存器的封装及直接操作,如果不熟悉外设结构和外设寄存器或者相关外设的通信协议、原理,则没法使用相关函数。

转载于:https://my.oschina.net/assange/blog/686685

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值