文档章节

stm32标准库编程模型

itviewer
 itviewer
发布于 2016/06/03 15:59
字数 841
阅读 80
收藏 0
点赞 0
评论 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
粉丝 15
博文 217
码字总数 44472
作品 0
海淀
技术主管
stm32之Cube和CubeMX

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

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

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

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

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

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

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

u010834669
05/05
0
0
硬件开发之mcu

架构 做嵌入式硬件开发,要以某个控制器为核心,引出其它外围器件。主流上可以按功能强弱分类为 51系列8位mcu——cortex Mx系列32位mcu——cortex A系列 SoC,其中51是x86指令,cortex是arm...

心翔
2016/06/14
47
0
基于STM32(ARM Cortex M3)的Arduino——Spurce (支持Eclip...

很多电子专业的学生,或者刚刚入行的电子工程师都有一个困惑。电子行业范畴这么大,这么多细分行业,不知该如何抉择。诸如硬件、软件、Layout 、单片机、 ARM ……这么多名词让人眼花缭乱,职...

soliddigi
2011/09/18
0
0
C语言程序设计之STM32,在这里轻松学习嵌入式编程

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/25
0
0
stm32环境搭建

MDK http://www.keil.com/arm/mdk.asp MDK-ARM(Microcontroller Development Kit) 是功能强大和常用的cortex-mx 开发环境。 其包含 µVision4 IDE,最新版本需要根据mcu的系列下载不同的p...

心翔
2016/05/23
43
0
第二章:STM32MxCube配置串口

基于上一次将第一章:STM32MxCube 基本使用方法,本章直接讲叙述STM32配置串口2的。 查看STM32F407电路图:可得USART2接在PA2、PA3。 下面新建STM32MxCube工程,开始配置。这里我们配置IO(定...

xuquanlin_1680
05/29
0
0
MicroPython:STM32 上 的 Python 开发

bodasisiter
2016/12/28
6.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
3分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
3分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
4分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
9分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
9分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
25分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
33分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
54分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
137
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部