很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为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行代码如下

  1. #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)
  2. #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
  3. #endif

这几行代码告诉我们,如果没有定义自己使用的芯片类型,将无法编译通过,我们可以通过修改第66行的代码定义自己的处理器,也可以通过开发环境设置自己定义的处理器。

该文件第8296行代码如下

  1. #ifdef USE_STDPERIPH_DRIVER
  2. #include "stm32f10x_conf.h"
  3. #endif

这三行的代码显示,如果我们使用固件库必须定义

  1. USE_STDPERIPH_DRIVER

这样他会把stm32f10x_conf.h文件包含进来。该文件包含了各个外设的头文件。

因此,假如我们在文件stm32f10x.h中定义了USE_STDPERIPH_DRIVER, 编写的源文件时,只需要通过包含stm32f10x.h这个文件,便可以方便使用固件库定义的方法访问和操作外设。

三、关于外设支持

每种外设对应了两个文件,一个头文件和一个源文件,他们定义和实现了外设操作的基本功能

四、关于评估板支持

ST应该是给出集中不同的评估板类型,不同的类型,只要是评估板上的资源不一样,这几个类型通过打开文件stm32_eval.h,查看58行开始的代码,便一目了然。

  1. =================================================================================================================+
  2. STM32 EVAL | LED | Buttons | Com Ports | LCD | IOE | sFLASH | sEE | TSENSOR | SD (SPI) | SD(SDIO) |
  3. =================================================================================================================+
  4. STM3210B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
  5. -----------------------------------------------------------------------------------------------------------------+
  6. STM3210E-EVAL | 4 | 8 | 2 | YES (FSMC)| NO | YES | NO | YES | NO | YES |
  7. -----------------------------------------------------------------------------------------------------------------+
  8. STM3210C-EVAL | 4 | 3 | 1 | YES (SPI) | YES | NO | YES | NO | YES | NO |
  9. -----------------------------------------------------------------------------------------------------------------+
  10. STM32100B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
  11. -----------------------------------------------------------------------------------------------------------------+
  12. STM32L152-EVAL | 4 | 8 | 2 | YES (SPI) | NO | NO | NO | YES | YES | NO |
  13. -----------------------------------------------------------------------------------------------------------------+
  14. STM32100E-EVAL | 4 | 8 | 2 | YES (FSMC)| YES | YES | YES | YES | YES | NO |
  15. =================================================================================================================+

查看该文件的150行可看到如下代码

  1. #ifdef USE_STM32100B_EVAL
  2. #include "stm32f10x.h"
  3. #include "stm32100b_eval/stm32100b_eval.h"
  4. #elif defined USE_STM3210B_EVAL
  5. #include "stm32f10x.h"
  6. #include "stm3210b_eval/stm3210b_eval.h"
  7. #elif defined USE_STM3210E_EVAL
  8. #include "stm32f10x.h"
  9. #include "stm3210e_eval/stm3210e_eval.h"
  10. #elif defined USE_STM3210C_EVAL
  11. #include "stm32f10x.h"
  12. #include "stm3210c_eval/stm3210c_eval.h"
  13. #elif defined USE_STM32L152_EVAL
  14. #include "stm32l1xx.h"
  15. #include "stm32l152_eval/stm32l152_eval.h"
  16. #elif defined USE_STM32100E_EVAL
  17. #include "stm32f10x.h"
  18. #include "stm32100e_eval/stm32100e_eval.h"
  19. #else
  20. #error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"
  21. #endif

这几行代码告诉我们,如果我们定义不同的开发板类型,他将会包含不同的文件以适合你所选的开发板。

今天先简单的将FW简介下,想要深入了解,可以阅读它的源码,对于提高自己的嵌入式代码的质量是非常有帮助的。下章将介绍使用固件库新建工程。。。。。

stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)的更多相关文章

  1. stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用库函数使用GPIO引脚功能.   补充   本文章为多年前学习 ...

  2. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  3. 如何查看stm32固件库版本及MDK和keil uvision的关系

    一.方法如上图: 本人的keil uvision4.12版本如下,晕倒! * Version : V2.0.1* Date : 06/13/2008 二.keil MDK和keil uvision的关 ...

  4. Java开发笔记(一百一十三)HttpClient实现下载与上传

    前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...

  5. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  6. STM32开发笔记之——CMSIS DAP

    都说开发stm32都是使用kail iar+jatg/swd的方式,然而arm公司已经开发出了CMSIS DAP的开源下载工具,全称是CoreSight Debug Access Port,网络上有大 ...

  7. 在stm32开发可以调用c标准库的排序和查找 qsort bsearch

    在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...

  8. .Net开发笔记(二十一) 反射在.net中的应用

    反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...

  9. 安卓开发笔记(十二):SQLite数据库储存(上)

    SQLite数据库存储(上) 创建数据库 Android专门提供了一个 SQLiteOpenHelper帮助类对数据库进行创建和升级 SQLiteOpenHelper需要创建一个自己的帮助类去继承它并 ...

随机推荐

  1. codevs 1183 泥泞的道路 (二分+SPFA+差分约束)

    /* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...

  2. MVC3中 ViewBag、ViewData和TempData的使用和区别(不是自己写的)

    (网上抄的,并未消化)在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic) ...

  3. (转)Mac OS X中配置Apache

    我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...

  4. 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 ...

  5. 三、改变struts.xml默认路径后web.xml如何配置

    http://yanln.iteye.com/blog/2189816(文章很好)

  6. UIWebView执行JS语句

    示例网页: http://m.dianping.com/tuan/deal/moreinfo/11507109 移除该网页的返回按钮, 购买链接, 最底部的友情链接 代码: NSMutableStri ...

  7. iPhone mobile safari fixed 元素滚动慢的问题处理

    最近做一个手机阅读应用,抓取网站数据,做格式化后,适合手机浏览器以及电脑上阅读,不显示任何其他内容无关元素. Site:http://cbread.duapp.com/ 固定左侧边栏时,使用的CSS如 ...

  8. JS定义对象方法?

    第一种:构造函数形式  把参数作为构造函数的参数传递,这样对于对象的初始化更灵活一点 <script language="javascript"><!-- /** ...

  9. phalcon的一些中文手册和帮助文档地址收集

    1:中文官方网站:http://phalconphp.com/zh/ 挺好可以好好看文档 可安装http://bullsoft.org/phalcon-docs/这个去查找,这是个部分中文的手册! P ...

  10. Ubuntu完全教程,让你成为Ubuntu高手!

    Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音.了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:) 大多数的美国人读 ubun ...