STM32固件库

发布者:SereneNature7最新更新时间:2024-10-18 来源: cnblogs关键字:STM32  固件库  开发效率 手机看文章 扫描二维码
随时随地手机看文章

       很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE。虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末,补补课,以后用的时候也方便点。

       ST推出的FW大大提高了单片机SW的开发效率,所以在新建工程前先来了解下这个SDK。我使用的是最新的v3.5固件库,这个固件库可以分为三个部分:

1、内核支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport)

2、硬件系统支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x)

3、外设支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrc)

4、评估板支持(..STM32F10x_StdPeriph_Lib_V3.5.0UtilitiesSTM32_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  固件库  开发效率 引用地址:STM32固件库

上一篇:STM32如何确定执行哪个中断函数
下一篇:STM32中断优先级void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

推荐阅读最新更新时间:2024-11-06 09:00

stm32 嵌入式开发 中ADC独立多通道DMA传输数据实验总结
主要知识点: DMA 数据传输 串口传输 通道引脚初始化 (一)、DMA 数据传输            1、外设到存储器传输            2、存储器到外设传输            3、存储器到存储器传输     外设一般为:ADC、SPI、I2C等。 存储器一般为:片内SRAM、外部存储器、片内FLASH等   DMA功能框图:8个流通道(DMA_SxCR ),每个流通到对应8个外设请求(CHSEL )     DMA 请求映射:分两种 DMA1请求映射、DMA2请求映射    特点:每一个外设请求只占用一个数据流通道,相同的外设请求可以占用不同的通道请求。       当该数据流通道
[单片机]
<font color='red'>stm32</font> 嵌入式<font color='red'>开发</font> 中ADC独立多通道DMA传输数据实验总结
STM32开发笔记40: Keil链接时”No section matches selector“解决方法
单片机型号:STM32F070F6P6 首先指明,此问题是STM32CubeMX升级时造成的,我现在STM32CubeMX的版本是4.27.0,原先的版本生成的程序在Keil中打开是不报错的。 这个问题是链接错误,仔细查看工程目录就可以看见4.27.0版本生成的程序,在工程目录中缺少启动的汇编文件startup_stm32f070x6.s,只需将此文件加载到工程中,再重新生成,此问题就可以解决。
[单片机]
stm32专题二十:扩展SRAM
STM32 控制器芯片内部有一定大小的 SRAM 及 FLASH 作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在 STM32芯片的外部扩展存储器了。注意,STM32F103VET6是不支持外扩SRAM的,因为引脚数量不够,而ZET6可以。 这里以IS62WV51216BLL为例: 芯片引脚图如下(40引脚来驱动): 结构框图如下: 引脚说明(要注意UB和LB,也就是高字节和低字节): 读操作时序要求: 可以看到,当给出地址后,最少要经过tAA的时间,才能去读取数据,以及输出时能后,要经过tODE的时间。只有满足这些时间要求,读到的数据才是正确的。 具体的时间参数: 同样的,写操作时
[单片机]
<font color='red'>stm32</font>专题二十:扩展SRAM
科学家模仿磷虾游泳开发效率极高的水生机器人
虽然我们大多数人可能只是认为磷虾是鲸鱼的食物,但是这种微小的甲壳类动物是非常善于游泳的,以至于科学家们现在已经开发了一个受磷虾启发的机器人平台,希望有一天能够创造出成群的海洋探索游泳机器人。 磷虾身长约两英寸(51毫米),通过所谓的异时节律方式在水中移动。 像虾和小龙虾这样的节肢动物也采用这种运动方式,这种运动方式包括通过动物底部的一排 游泳腿 (又称褶足或游泳头)发出连续的运动波。它的效果很好,因为磷虾能够快速加速和停止,并执行尖锐的快速转弯。 为了更好地了解元游动的力学原理,罗德岛布朗大学的研究人员与墨西哥国立自治大学的同事合作,创造了受磷虾启发的Pleobot机器人平台。 Pleobot比单个磷虾大10倍
[机器人]
科学家模仿磷虾游泳<font color='red'>开发</font>出<font color='red'>效率</font>极高的水生机器人
ST推出与96Boards消费者版本兼容的STM32传感器板
2016年2月1日,横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST)已开始向主要客户提供新款的基于STM32微控制器的96Boards消费者版本)开发平台子板测试样品。96Boards开放式平台技术可简化智能手机、嵌入式家电或数字家电的开发。 作为市场上首批符合96Boards CE消费者版本子板规范的板卡,B-F446E-96B01A有助于简化情景感知功能的开发。该子板集成性能强大且高能效的基于ARM Cortex -M4F内核的意法半导体STM32F446微控制器和智能通信外设,以及MEMS加速度计、磁强计、陀螺仪、压力传感器和麦克风。Arduino Uno和Seee
[物联网]
ST推出与96Boards消费者版本兼容的<font color='red'>STM32</font>传感器板
关于STM32 DMA的使用
1.DMA的使用范围: DMA(直接存储器存取)提供在外设与存储器之间或者存储器和存储器之间的高速数据传输使用。注意这里的外设指的是32的外设,比如spi、usart、iic、adc等基于APB1 、APB2或AHB时钟的外设,而这里的存储器包括32自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问的源或者目的、 注意外部存储设备其自身在这就是外设了,配置时属于外设,不要与配置寄存器的存储设备混淆 2.以目前嵌入式为例,DMA和CPU两者怎么实现分时使用内存: 通常采用以下三种方法:(1)停止CPU访内存;(2)周期挪用;(3)DMA与CPU交替访问内存. 停止CPU访问内存 当外围设备要求传送一批
[单片机]
关于<font color='red'>STM32</font> DMA的使用
效率嵌入式程序开发
摘  要 :嵌入式系统对应用软件的质量要求很高,在嵌入式开发中须注意对代码进行优化,尽可能地提高代码效率。虽然C编译器都提供了一定程度的代码优化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大小的平衡,不可能使程序既快又小,因而必须在编写程序时采取必要的措施。本文针对高效率嵌入式程序开发提供了一些编程技巧,对实际系统开发具有重要作用。 关键词 :编译器; 程序开发; 代码优化 引言     在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤
[嵌入式]
STM32中GPIO的8种工作模式
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总
[单片机]
<font color='red'>STM32</font>中GPIO的8种工作模式
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved