很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为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中断优先级void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
推荐阅读最新更新时间:2024-11-06 09:00
设计资源 培训 开发板 精华推荐
- 具有集成升压和捕捉二极管的 LT3470HDDB 微功率降压稳压器的典型应用电路
- 显示升压配置的典型应用,带有输入断开开关以防止 A8519 LED 驱动器的 Vout 对地短路
- LT3091HFE 正输出电流监视器的典型应用
- 【训练营】立创EDA小灯-692962A
- LTC3851IMSE-1 高效同步降压转换器的典型应用电路
- LTC4367IMS8-1 过压电源保护控制器选择两个电源之一的典型应用
- STEVAL-ISA050V1,基于 PM6641 单片 VR 的演示板,用于芯片组和用于超移动 PC (UMPC) 应用的 DDR2/3 电源
- LTC3526LBEDC-2 1 节电池至 1.8V 升压转换器的典型应用电路,最大高度小于 1mm
- 使用 RP40-11015SFR DC/DC 转换器并根据 EN55022 B 类(110Vin 双输出)进行 EMC 滤波的典型应用
- IBU通用接口电机控制和IPS通用接口