找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5442|回复: 0
打印 上一主题 下一主题
收起左侧

关于STM32的固件库

[复制链接]
跳转到指定楼层
楼主
ID:72008 发表于 2015-1-12 19:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
为什么会有固件库
对于51核的8位单片机我们在进行开发时,我们是直接进行配置单片机的寄存器,控制芯片的工作方式。只要我们明白寄存器各位的功能和设置方法,直接进行赋值就可以了。
不存在固件库的问题。那么使用ARM 32位 CORTEX -M3核心的STM32芯片为什么有固件库呢?
当然在使用STM32时也可以像51那样脱离固件库,自己进行配置开发。
对于SMT32因为其外设资源非常的丰富,必然带来寄存器的数量十分庞大并且比较复杂,这时直接配置寄存器方式的就会带来:
开发速度慢
程序可读性差
这两个缺陷会直接影响开发效率,程序的维护和交流。而库开发方式能很好的弥补这两个缺陷。
两种思路的对比:
相对于库开发的方式,直接配置寄存器的方式生成的代码量的确会少一点,但是SMT32有充足的资源,权衡库的优势与不足,绝大部分时候,我们愿意牺牲一点资料,选择库开发。
一般只在对代码运行时间要求极其苛刻的地方,才使用直接配置寄存器的方式替代。如频繁调用中断服务程序。
STM32结构及库层次关系
基于CORTEX的某系列芯片采用的内核都是相同的,区别是核外的片上外设的差异,这些差异导致软件在同内核,不同外设的芯片上移植的困难。为解决不同芯片厂商生产的CORTEX微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准。即
Cortex MicroController software Interface Standard ;CORTEX 微控制器软件接口标准
CMSIS包括了:
内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供。
设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
CMSIS层位于硬件层与操作系统或用户层之间,提供了芯片生产商无关的硬件抽象层,可以为借口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是有极大的好处的。
STM32的库,就是按照CMSIS标准建立的。
固件库主要文件说明:
-htmresc: LOGO
Libraries :   驱动库的源代码及启动文件
Project :用驱动库写的例子个一个工程模板
Utilities:基于STM官方开发板的例子
Release_Notes.html:库版本更新说明
stm32f10x_stdperiph_lib_um.chm:库帮助文件
Core_cm3.c和core_cm3.h
作用:为采用CORTEX—M3核的芯片商设计的芯片外设提供一个进入M3内核的接口。
     只要是采用了M3的核,不同公司的芯片的这两个文件是相同。
这两个文件在我们的工程文件是不可缺少的。
System_stm32f10x.c文件
是由ST公司提供的。功能是设置系统时钟和总线时钟。M3比51单片机复杂的多,它不像51直接接一个8M的晶振就可以工作了,我们还要通过M3核的核内寄存器对8M的时钟进行倍频、分频,或者使用芯片内部的时钟。所有的外设都与时钟的频率相关,所以这个文件的时钟配置是很关键的。
在实现系统时钟的时候要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来进行访问的,所以该文件中包含了stm32f10x.h这个头文件。
Stm32f10x.h文件
是一个很重要很底层的文件
所有的处理器厂商都会将对内存的操作封装成一个宏,即我们通常说的寄存器,并且把这些实现封装成一个系统文件,包含在相应的开发环境中。这样在开发自己的应用程序时只要将这个文件包含进来就可以了。
启动文件
Libraries/CMSIS/core/CM3/startup/arm文件夹下由汇编编写的系统启动文件,不同的文件对应不同的芯片型号。
文件名的英文缩写的意义如下:
Cl:互联型产片,STM32F105/107系列
Vl: 超值型产品,STM32F100系列
Xl: 超高容量产品,STM32F101/103系列
Ld: 低密度产品,FLASH小于64K
Md: 中密度产品,FLASH=64 or 128K
Hd: 高密度产品,FLASH大于128K
启动文件是任何处理器在上电复位后最先运行的一段汇编程序。在我们编写的C代码开始运行之前,需要由汇编语言为C语言的运行建立一个合适的环境,接下来才能运行我们的程序。所以要把启动文件添加进我们的工程中去。
启动文件的作用:
1、初始化堆栈指针SP;
2、初始化程序计数器指针PC;
3、设置堆、栈的大小
4、设置异常向量表的入口地址
5、配置外部SRAM作为数据存储器
6、设置C库的分支入口___main
7、在3.5版本的启动文件中还调用了在system_stm32f10x.c文件中的SystemIni()函数配置系统时钟,在旧的版本中需要用户进入main函数自己调用这个函数。
Inc和src
位于libraries/STM32F10X_StdPeriph_Driver文件夹下,inc即include的缩写,src即source的缩写。属于CMSIS的设备外设函数部分。这些外设是芯片制造商在M3核外加进去的。
在src和inc文件夹中是ST公司针对每个STM32外设编写的库函数文件,每个外设对应一个.c和.h文件。在进行开发时,可以用到那个模块就将那两个文件包含到工程中。
还有一个很特别的misc.c文件,这个文件提供了外设对内核的NVIC(中断向量控制器)的访问函数 ,在配置中断时,必须把这个文件添加到工程中。
Stm32f10x_it.c 和 stm32f10x_conf.h文件
Stm32f10x_it.c ,专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常的接口,其他的普通中断服务函数由我们自己添加。这些中断函数的入口不是我们随意可以定的,可以去汇编启动文件中找到。
stm32f10x_conf.h,这个文件被包含进stm32f10x.h文件。用来配置使用了什么外设的头文件,用这个头文件可以很方便的增加或删除外设驱动函数库。
库文件之间的关系
库文件直接包含进工程即可,有些文件则需要我们根据使用到的功能进行配置。
各个文件在库工程中的层次或关系
stm32f10x_stdperiph_lib_um.chm:库帮助文件
库函数就是STM32的库文件中为我们编写好的函数接口,我们只要调用这些库函数,就能对STM32进行配置,达到控制的目的。
调用函数式必须知道:函数的功能、可传入的参数及其意义和函数的返回值。
库函数提供的函数的数量也是极其庞大的,这时就需要好好的利用这个库帮助文件,进行查找。同时由于每个函数和数据类型都是按照“见名知义”的原则编写的,这样名称比较长,在进行输入时很容易出错,也可以在开发软件时,在用到库函数的时候,直接把帮助文件中的函数复制到工程文件中,避免出错。
以上内容节选至《野火》,感谢分享。
看了STM32的库才发现,原来嵌入式C语言程序应该这样来编写,可以如此的简洁流畅与优美。对一个系统架构的构思,对每个细节表达,对指针,变量,函数,纯熟的应用。对库的编写者深深折服,看到了大师的风范。相见恨晚。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表