stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)
很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE。虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末,补补课,以后用的时候也方便点。
ST推出的FW大大提高了单片机SW的开发效率,所以在新建工程前先来了解下这个SDK。我使用的是最新的v3.5固件库,这个固件库可以分为三个部分:
1、内核支持(..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport)
2、硬件系统支持(..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x)
3、外设支持(..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src)
4、评估板支持(..\STM32F10x_StdPeriph_Lib_V3.5.0\Utilities\STM32_EVAL)
下图为这个几个支持模块之间的关系
一、关于内核支持模块
这个模块由文件core_cm3.c和core_cm3.h构成。这部分代码完全由汇编写就,主要完成一些底层操作的基本功能,包括一些加减乘除,移位和拷贝等的一些基本运算。
二、关于硬件系统支持
这个模块的代码包括用于系统的启动代码(startup),和代码编译运行前的初始设置的代码(stm32f10x.h)
stm32f10x.h这个文件,定义了各个寄存器的地址,配置了我们使用的核心类型,是否使用固件库等信息,打开该文件,第95行代码如下
- #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
- #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
- #endif
这几行代码告诉我们,如果没有定义自己使用的芯片类型,将无法编译通过,我们可以通过修改第66行的代码定义自己的处理器,也可以通过开发环境设置自己定义的处理器。
该文件第8296行代码如下
- #ifdef USE_STDPERIPH_DRIVER
- #include "stm32f10x_conf.h"
- #endif
这三行的代码显示,如果我们使用固件库必须定义
- USE_STDPERIPH_DRIVER
这样他会把stm32f10x_conf.h文件包含进来。该文件包含了各个外设的头文件。
因此,假如我们在文件stm32f10x.h中定义了USE_STDPERIPH_DRIVER, 编写的源文件时,只需要通过包含stm32f10x.h这个文件,便可以方便使用固件库定义的方法访问和操作外设。
三、关于外设支持
每种外设对应了两个文件,一个头文件和一个源文件,他们定义和实现了外设操作的基本功能
四、关于评估板支持
ST应该是给出集中不同的评估板类型,不同的类型,只要是评估板上的资源不一样,这几个类型通过打开文件stm32_eval.h,查看58行开始的代码,便一目了然。
- =================================================================================================================+
- STM32 EVAL | LED | Buttons | Com Ports | LCD | IOE | sFLASH | sEE | TSENSOR | SD (SPI) | SD(SDIO) |
- =================================================================================================================+
- STM3210B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM3210E-EVAL | 4 | 8 | 2 | YES (FSMC)| NO | YES | NO | YES | NO | YES |
- -----------------------------------------------------------------------------------------------------------------+
- STM3210C-EVAL | 4 | 3 | 1 | YES (SPI) | YES | NO | YES | NO | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32100B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32L152-EVAL | 4 | 8 | 2 | YES (SPI) | NO | NO | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32100E-EVAL | 4 | 8 | 2 | YES (FSMC)| YES | YES | YES | YES | YES | NO |
- =================================================================================================================+
查看该文件的150行可看到如下代码
- #ifdef USE_STM32100B_EVAL
- #include "stm32f10x.h"
- #include "stm32100b_eval/stm32100b_eval.h"
- #elif defined USE_STM3210B_EVAL
- #include "stm32f10x.h"
- #include "stm3210b_eval/stm3210b_eval.h"
- #elif defined USE_STM3210E_EVAL
- #include "stm32f10x.h"
- #include "stm3210e_eval/stm3210e_eval.h"
- #elif defined USE_STM3210C_EVAL
- #include "stm32f10x.h"
- #include "stm3210c_eval/stm3210c_eval.h"
- #elif defined USE_STM32L152_EVAL
- #include "stm32l1xx.h"
- #include "stm32l152_eval/stm32l152_eval.h"
- #elif defined USE_STM32100E_EVAL
- #include "stm32f10x.h"
- #include "stm32100e_eval/stm32100e_eval.h"
- #else
- #error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"
- #endif
这几行代码告诉我们,如果我们定义不同的开发板类型,他将会包含不同的文件以适合你所选的开发板。
今天先简单的将FW简介下,想要深入了解,可以阅读它的源码,对于提高自己的嵌入式代码的质量是非常有帮助的。下章将介绍使用固件库新建工程。。。。。
stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)的更多相关文章
- stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用库函数使用GPIO引脚功能. 补充 本文章为多年前学习 ...
- stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入. STM ...
- 如何查看stm32固件库版本及MDK和keil uvision的关系
一.方法如上图: 本人的keil uvision4.12版本如下,晕倒! * Version : V2.0.1* Date : 06/13/2008 二.keil MDK和keil uvision的关 ...
- Java开发笔记(一百一十三)HttpClient实现下载与上传
前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- STM32开发笔记之——CMSIS DAP
都说开发stm32都是使用kail iar+jatg/swd的方式,然而arm公司已经开发出了CMSIS DAP的开源下载工具,全称是CoreSight Debug Access Port,网络上有大 ...
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...
- .Net开发笔记(二十一) 反射在.net中的应用
反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...
- 安卓开发笔记(十二):SQLite数据库储存(上)
SQLite数据库存储(上) 创建数据库 Android专门提供了一个 SQLiteOpenHelper帮助类对数据库进行创建和升级 SQLiteOpenHelper需要创建一个自己的帮助类去继承它并 ...
随机推荐
- codevs 1183 泥泞的道路 (二分+SPFA+差分约束)
/* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...
- MVC3中 ViewBag、ViewData和TempData的使用和区别(不是自己写的)
(网上抄的,并未消化)在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic) ...
- (转)Mac OS X中配置Apache
我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...
- L-value 和 R-value.
An L-value is something that can appear on the left side of an equal sign, An R-value is something t ...
- 三、改变struts.xml默认路径后web.xml如何配置
http://yanln.iteye.com/blog/2189816(文章很好)
- UIWebView执行JS语句
示例网页: http://m.dianping.com/tuan/deal/moreinfo/11507109 移除该网页的返回按钮, 购买链接, 最底部的友情链接 代码: NSMutableStri ...
- iPhone mobile safari fixed 元素滚动慢的问题处理
最近做一个手机阅读应用,抓取网站数据,做格式化后,适合手机浏览器以及电脑上阅读,不显示任何其他内容无关元素. Site:http://cbread.duapp.com/ 固定左侧边栏时,使用的CSS如 ...
- JS定义对象方法?
第一种:构造函数形式 把参数作为构造函数的参数传递,这样对于对象的初始化更灵活一点 <script language="javascript"><!-- /** ...
- phalcon的一些中文手册和帮助文档地址收集
1:中文官方网站:http://phalconphp.com/zh/ 挺好可以好好看文档 可安装http://bullsoft.org/phalcon-docs/这个去查找,这是个部分中文的手册! P ...
- Ubuntu完全教程,让你成为Ubuntu高手!
Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音.了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:) 大多数的美国人读 ubun ...