文档章节

stm32标准库编程模型

itviewer
 itviewer
发布于 2016/06/03 15:59
字数 841
阅读 95
收藏 0

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

© 著作权归作者所有

下一篇: 电路板焊接
itviewer
粉丝 20
博文 218
码字总数 44686
作品 0
海淀
技术主管
私信 提问
简化STM32的编程之eBox生态圈

STM32目前已经成为一款性价比相当高的单片机控制解决方案,由于STM32本身功能比较全面,备受大家的青睐,网络上有这相当全面的资料,不管是新手还是老鸟都可以通过一个开发板的学习来了解STM...

eBox生态圈
2015/09/24
5
0
stm32之Cube和CubeMX

单片机的开发一直都是很枯燥的,51直接操作寄存器,stm32的标准库不人性,和操作寄存器没啥区别,然而,对于一个mcu的外设来讲,管脚是确定的,功能是确定的,总得来说是有规律可循的,开发者...

心翔
2016/06/15
453
0
通俗易懂解析stm32 (一) HAL库 标准库 直接配置寄存器 三种开发方式的区别

通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行...

csdnpapa
2018/02/12
0
0
【转】浅析STM32中SysTick在3.5固件库中的应用

最近一直在忙STM32的学习,在学习中遇到了不少问题,也经过各种尝试解决问题,在这里我通过博文的形式写出来,也希望能够帮到遇见同样问题的人们。对于STM32系列的芯片,有一个好处就是官方给...

jerry2012cn
2013/06/23
2.1K
0
STM32时钟配置与SysTick配置_基于STM32F103

【一】前言 STM32前后台程序编程时,最基本的配置应当是对其时钟和系统定时器的配置,对标准库而言,调用SysTickInit ();。如果采用HAL库,首先还应该调用HALInit();初始化HAL库。 此处采用标...

u010834669
2018/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据教程Scala系列之样例类_Option_偏函数

  好程序员大数据教程Scala系列之样例类_Option_偏函数,在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None)。Some包装了某个值,None表示没有值。 ...

好程序员官网
5分钟前
0
0
zk中ServerCnxnFactory连接管理工厂

作为ServerCnxn的工厂抽象类 属性 ZOOKEEPER_SERVER_CNXN_FACTORY zookeeper.serverCnxnFactory secure 在ServerCnxnFactory中SSL是否启用 sessionMap session管理配置中信息(sessionId,Ser......

writeademo
6分钟前
0
0
【代码审计01】几种常见的漏洞种类以及代码审计工具

前言 代码审计是在经过黑盒测试完毕,也就是检查应用的基本功能是否符合产品业务需求下进行的。需要有一定的编码基础以及对漏洞形成原理的基本认知,通过工具或者经验检测中代码中可能出现的...

北桥苏
8分钟前
0
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

作者: OAM 项目负责人 导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open A...

阿里巴巴云原生
9分钟前
0
0
【进阶之定义函数】一个查询树结构数据的集合

1、基本定义 delimiter 自定义符号  -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略create function 函数名(形参列表) returns 返回类型  -- 注意是retru...

卯金刀GG
16分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部