6.STM32标准库的引入

转自 https://edu.csdn.net/lecturer/505 朱老师物联网大讲堂
第一部分、章节目录
3.6.1.为什么会有标准外设库
3.6.2.外设库的结构介绍和之后的学习方法1
3.6.3.外设库的结构介绍和之后的学习方法2
3.6.4.标准库对硬件信息的封装方式
3.6.5.使用结构体方式访问寄存器的原理
3.6.6.使用结构体方式访问寄存器的实践
3.6.7.使用标准库重写LED的程序1
3.6.8.使用标准库重写LED的程序2
3.6.9.RCC模块的标准库全解析1
3.6.10.RCC模块的标准库全解析2
3.6.11.RCC模块的标准库全解析3
3.6.12.RCC模块的标准库全解析4
3.6.13.RCC模块的标准库全解析5
3.6.14.使用库重写时钟设置函数1
3.6.15.使用库重写时钟设置函数2
3.6.16.GPIO模块的标准库全解析1
3.6.17.GPIO模块的标准库全解析2
3.6.18.使用GPIO库函数来点亮LED
3.6.19.标准库中的面向对象思想

第二部分、章节介绍
3.6.1.为什么会有标准外设库
本节从单片机软件开发的方式讲起,目的是让大家明白外设库诞生的原因和他的意义。
3.6.2.外设库的结构介绍和之后的学习方法1
本节介绍标准外设库的下载解压和SourceInsight工程建立,然后源码目录结构和各个文件夹文件分别是干嘛的。
3.6.3.外设库的结构介绍和之后的学习方法2
本节重点介绍后续标准外设库的学习思路和方法。
3.6.4.标准库对硬件信息的封装方式
本节重点讲解标准外设库对硬件信息的封装方式,让大家看到别人是怎么实现一个库的。
3.6.5.使用结构体方式访问寄存器的原理
本节讲解结构体方式访问寄存器的原理,实质上都是C语言访问内存的那些东西。
3.6.6.使用结构体方式访问寄存器的实践
本节通过实践,将之前自己写的LED点亮的代码修改为结构体式访问寄存器,让大家初步体会标准库使用的这种技巧。
3.6.7.使用标准库重写LED的程序1
本节加入标准库源码并建立一个正式工程,然后使用标准库中预先定义好的各种结构体变量来访问GPIO点亮LED
3.6.8.使用标准库重写LED的程序2
本节加入标准库源码并建立一个正式工程,然后使用标准库中预先定义好的各种结构体变量来访问GPIO点亮LED
3.6.9.RCC模块的标准库全解析1
本节开始讲解标准库中RCC模块的源码,通过源码分析让大家掌握标准库的语法技巧及编程思路,以此来彻底掌握标准库。
3.6.10.RCC模块的标准库全解析2
本节接着讲解标准库的源码分析。
3.6.11.RCC模块的标准库全解析3
本节接着讲解标准库的源码分析。
3.6.12.RCC模块的标准库全解析4
本节接着讲解标准库的源码分析。
3.6.13.RCC模块的标准库全解析5
本节接着讲解标准库的源码分析。
3.6.14.使用库重写时钟设置函数1
本节使用标准库中RCC模块的函数来重写原来用寄存器写过的Set_SysClockTo72M函数。
3.6.15.使用库重写时钟设置函数2
本节进行实践并测试结果,证明库的使用没有错。
3.6.16.GPIO模块的标准库全解析1
本节开始全面解读标准库中GPIO模块,因为有前面分析RCC模块的经验所以GPIO分析起来很快,也感觉没那么难了。
3.6.17.GPIO模块的标准库全解析2
本节继续解读GPIO模块的标准库源码。
3.6.18.使用GPIO库函数来点亮LED
本节使用标准库中GPIO模块的封装API对GPIO进行操作以点亮LED,让大家通过练习全面掌握标准库中GPIO的标准使用方法
3.6.19.标准库中的面向对象思想
本节初步引入面向对象的概念,并且让大家意识到标准库的编程方法是使用了面向对象的思想和编程模型的。为大家之后学习面向对象编程打下一定基础。

第三部分、随堂记录
3.6.1.为什么会有标准外设库
3.6.1.1、传统单片机软件开发方式
(1)芯片厂商提供数据手册、示例代码、开发环境
(2)单片机软件工程师面向产品功能,查阅数据手册,参考官方示例代码进行开发
(3)硬件操作的方式是用C语言对寄存器进行读写以操作硬件
(4)主要工作量分2块:一是调通各种外设,二是实现产品功能
(5)在简单单片机(如51单片机)上这一套工作的很好,但是随着单片机变复杂就带来一些问题
3.6.1.2、外设库有什么价值
(1)外设库其实就是以前芯片公司提供的示例代码的标准化产物
(2)外设库简化了我们开发产品的2大工作量的第一个
(3)外设库以源码方式提供,这个源码本身写的很标准,可以用作学习素材
3.6.1.3、学习和使用外设库的难点
(1)要有规范化编程的意识和能力
(2)C语言功底要过关
(3)要有一定的框架和层次认识
(4)要会没有外设库时直接C语言操作寄存器的方式(看原理图、查数据手册、位操作等)
3.6.1.4、再次强调
(1)外设库只是帮助我们简化编程,简化的主要是劳动量
(2)外设库一定程度上降低了编程难度,但是只会库、离了库就不会编程、库函数调用出了问题就束手无策这种还是没戏。(难度降低是对所有人的,你并不能从中得到好处)

3.6.2_3.外设库的结构介绍和之后的学习方法1_2
3.6.2.1、外设库的结构介绍
(1)最新版本库的下载和解压 en.stsw-stm32054.zip
(2)建立SourceInsight工程 参考《2.3.6.SourceInsight的基本使用》
(3)文件夹结构和主要文件的作用
CMSIS(STM32内部ARM核心相关内容)
CM3(Cortex-M3)
CoreSupport
内核相关的一些设置的寄存器集合及其封装
DeviceSupport
ST
STM32F10x
startup(起始文件)
stm32f10x.h
system_stm32f10x.c
system_stm32f10x.h
STM32F10x_StdPeriph_Driver(外设驱动)
inc(include,头文件,.h)
src(source,源文件, .c)
3.6.2.2、后续的学习方法
(1)先搞清楚库对STM32这个硬件的封装和表达方式
(2)再彻底理解库中使用的结构体式访问硬件寄存器的方式
(3)初步建立起面向对象式编程的概念并且去体会
(4)以模块为单位去研究这个模块的库函数,并且用库函数去编程,并且实验结果,并且分析代码,去体会去熟悉库函数使用的方法
(5)最终达到什么程度?眼里有库心中无库。用人话说就是:思维能够穿透库函数直达内部对寄存器的操作。

3.6.4.标准库对硬件信息的封装方式
3.6.4.1、寄存器地址的封装
3.6.4.2、寄存器位定义的封装
3.6.4.3、外设操作的封装

3.6.5.使用结构体方式访问寄存器的原理
(1)C语言访问寄存器的本质是C语言访问内存,本质思路是:定义一个指针(临时变量)指向这块内存,然后*p = xx这种方式去解引用指针从而向目标内存中写入内容。
(2)缺陷:当寄存器多了之后每一个寄存器都要定义一套套路,很麻烦。
(3)解决思路:就是打包,批发式的定义,用结构体(想一下为什么不用数组?)的方式进行打包。具体做法是:把整个一个模块的所有寄存器(地址是连接的)打包在一个结构体中,每个寄存器对应结构体中的一个元素,然后结构体基地址对应寄存器组的基地址,将来就可以通过结构体的各个元素来访问各个寄存器了。
(4)结构体方式来访问寄存器和指针式访问寄存器,本质上其实是一样的,区别是C语言的封装不同。

3.6.6.使用结构体方式访问寄存器的实践

3.6.7_8.使用标准库重写LED的程序1_2
3.6.7.1、分析标准库自带的工程模板
3.6.7.2、自己建立工程
3.6.7.3、使用标准库方式操作点亮LED

3.6.9_10.RCC模块的标准库全解析1_2

3.6.11.RCC模块的标准库全解析3
assert叫断言,assert机制是C语言里用来判断一个东西是对的还是错的,并且如果是对的那就直接忽略过去,如果是错的就以某种方式告诉我们(warrning error)让我们去改。
断言机制使用最多的就是:库函数中用断言来检查用户调用该库函数时传参到底对不对?

3.6.12.RCC模块的标准库全解析4

3.6.13.RCC模块的标准库全解析5

3.6.14_15.使用库重写时钟设置函数1_2

3.6.16_17.GPIO模块的标准库全解析1_2

3.6.18.使用GPIO库函数来点亮LED

3.6.19.标准库中的面向对象思想
3.6.19.1、面向对象介绍
(1)一种编程思想(面向过程、面向对象)
(2)什么是对象
(3)面向对象三大特征:封装、继承、多态
(4)面向对象编程思想和面向对象语言是两码事
3.6.19.2、标准库的面向对象特征
(1)各种数据类型结构体就是一种封装
(2)标准库是为了被复用
(3)GPIO的编程模式是典型的面向对象式编程
典型面向对象的编程模式:
第1步:先构建对象(可以理解为定义一个结构体类型)
第2步:用对象构造实例(可以理解为用结构体类型来定义结构体变量)malloc
第3步:填充实例(其实就是给结构体的各个元素赋值)
第4步:使用实例(其实就是把结构体变量作为参数传给某个函数使用)
第5步:销毁实例(其实就是把前面第2步定义的机构体变量给销毁掉)free

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值