自己写库—构建库函数雏形

1、什么是 STM32 函数库

以上所说的软件库是指“STM32 标准函数库”,它是由 ST公司针对 STM32提供的函数接口,即 API (Application Program Interface),开发者可调用这些函数接口来配置 STM32的寄存器,使开发人员得以脱离最底层的寄存器操作;

实际上,库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。

库开发方式与直接配置寄存器方式的区别见图 8-1!!!!!!!

2、为什么采用库来开发及学习?

、、、、、、、

现在 STM32F1 系列和 STM32F4 系列各有一套自己的函数库,但是它们大部分是兼容的,F1 和 F4 之间的程序移植,只需要小修改即可。要想修炼 C 语言,就从 ST的库开始吧。所以在以后的章节中,使用软件库是我们的重点,而且我们通过讲解库 API去高效地学习 STM32的寄存器,并不至于因为用库学习,就不会用寄存器控制 STM32芯片。

3、构建库函数锥形

1)修改寄存器地址封装

2)定义访问外设的结构体指针

乍一看,除了最后一部分,把 BSRR 寄存器分成 BSRRH 和 BSRRL两段,其它部分跟直接用绝对地址访问只是名字改了而已,用起来跟上一章没什么区别。这是因为我们现在只实现了库函数的基础,还没有定义库函数。

定义位操作函数

3)定义初始化结构体GPIO_InitTypeDef

4)定义引脚模式的枚举类型

5) 定义 GPIO初始化函数

6)全新面貌,使用函数点亮 LED灯

完成以上的准备后,我们就可以自己定义的函数来点亮 LED 灯了,见代码清单 8-15。

总结

时间: 2024-10-29 12:44:28

自己写库—构建库函数雏形的相关文章

第8章 自己写库-构建库函数雏形—零死角玩转STM32-F429系列

第8章 ????自己写库-构建库函数雏形 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx 中文参考手册>.<STM32F429规格书> 虽然我们上面用寄存器点亮了 LED,乍看一下好像代码也很简单,但是我们别侥幸以后就可以一直用寄存器开发.在用寄存器点亮 LED 的时候,我们会发现 STM32 的寄存器都是 32 位的,每次

STM32-构建库函数雏形

构建库函数雏形 修改寄存器地址封装 代码清单 8-1 封装寄存器列表 //volatile 表示易变的变量,防止编译器优化 #define __IO volatile typedef unsigned int uint32_t; typedef unsigned short uint16_t; /* GPIO 寄存器列表 */ typedef struct { __IO uint32_t MODER; /*GPIO 模式寄存器 地址偏移: 0x00 */ __IO uint32_t OTYPER

Autolisp程序“版本库”构建(初稿)

由于AutoCAD自带的IDE并不支持类似与其他语言的“import”语句 .当程序复杂到一定程度或由多个开发人员进行协作,“版本库”的重要程度也不断提高. 目前我自己在做一个采矿专业的辅助设计软件(AutoCAD二次开发),软件有一些公用函数会被多个子功能的调用.多个子功能的编写和维护可能同时进行,此过程中可能对公用函数进行修改. 国外的牛人也遇到了这个情况,人家写入个软件实现了类似C语言的include语句 ( 详见:http://www.theswamp.org/index.php?top

(016)给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树(keep it up)

给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树. 由于数组是递增有序的,每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; void newNode(TreeNode*& vNode, int vData) { vNode = new TreeNode; vNode->data = vData; vNode->leftChi

数据库写库基础组件设计思想与实现

码农一定会遇到写库的繁琐操作,字段少的话数据访问层的SQL语句封装还好实现,可是字段一旦多起来,比如十多个二十多个字段的话,SQL的封装将会是一个巨大的难题,并不是说难度有多大,而是这样的操作很繁琐,况且极容易出错,SQL语句一旦出错很难排查.我也是在开发中遇到了相同的问题,这样的问题总会浪费很多不必要的时间,所以我就想能不能提供一个公共的基础组件来实现繁琐的底层SQL语句操作,我们只需要调用一些简单的借口就能实现数据库的快捷的写库.首先,写库时必要的信息包含:要写入的列名,还有就是数据实体.(

WinCE 调试某手写输入法时遇到的加载手写库失败的问题

调试某手写输入法时遇到的加载手写库失败的问题 在 WinCE6.0 下使用此手写输入法 SDK 做了一个单独的手写输入程序A(MFC Dialog 框架).正常情况下,可以正常使用. 此 A 程序,采用 LIB 方式加载此的手写 SDK. 在运行某一带手写输入的程序 B 后,A 程序无法运行.首先怀疑 B 程序中也使用了此手写 SDK,导致加载冲突. 但仔细想想程序 B 和程序 A 应该运行在不同的进程空间,且最后确定程序 B 并未使用此手写. 进一步测试发现,如果程序 A 先运行,再程序 B 

为什么用C++写库 但是导出接口时 却定义了C的接口(李大哥告诉我的,我还没有理解,先记着吧。为以后查询方便,哈哈)

导出C接口 使其拥有使用范围最广的接口 和多方式支持.比如操作系统,用C++写,但是接口申明了#ifdef C plus plus,判断如果是C++代码 就导出C接口,windows 下微软的几乎所有接口都是这样导出的,linux也一样.举例说明,我们导出一个C++接口 接口函数如下:KERNEL_USER_API int UserLogin(LPCTSTR lpszUserName,LPCTSTR lpszPassword);   假设这是一个内核库 封装了所有方法   然后提供给界面程序调用

WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日志咱还是得记录则个.总不能上线后报bug了让自己手足无措吧,虽然不管有木有错误日志报bug都是件很头疼的事... 我们知道webAPI也有好几个Filter,上篇文章我们做token与权限用到了ActionFilterAttribute,这次我们用ExceptionFilterAttribute来做

新手写AIDL构建失败:...aidl.exe&#39;&#39; finished with non-zero exit value 1

最近学习aidl,写demo后编译报错,跟着<Android开发艺术探索>以及网上的一些aidl详解博客敲完后一直编译不过,错误日志如下: Process 'command 'C:\Users\DELL\AppData\Local\Android\Sdk\build-tools\27.0.3\aidl.exe'' finished with non-zero exit value 1 打开详细错误后很多,但也没有有效信息: Caused by: org.gradle.process.inter