理论教育 基于物联网的STM32单片机应用-入门实例

基于物联网的STM32单片机应用-入门实例

时间:2023-11-09 理论教育 版权反馈
【摘要】:本教材使用的是支持STM32F1xx系列的Keil.STM32F1xx_DFP.1.0.5版本芯片支持包。图4.6整理后的STM 32标准外设库结构ASM文件夹:存放\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSu pport\ST\STM32F10x\startup\arm文件夹下所有汇编文件。stm32f10x_it文件夹:存放STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPe riph_Template文件夹下的stm32f10x_it.c、stm32f10x_it.h文件,主要是与中断相关的函数和头文件。System文件夹:存放STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSup port文件夹下的core_cm3.c、core_cm3.h及\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.文件,一般称为系统文件。

基于物联网的STM32单片机应用-入门实例

对于嵌入式开发的初学者,关键是如何入门。本教材以GPIO输出为嵌入式开发最基础的知识点,其入门就从IO输出为嵌入点,学习通过对例程的分析、理解,结合数据手册、参考手册、库函数手册等技术资料的相关知识,逐步学会嵌入式开发的各种技能。

4.1.4.1 准备工作

(1)下载安装开发工具。STM开发工具很多,目前国内使用较多的是Keil ARM的MDK-ARM和IAR的EWARM。实际上各种开发工具都有个人的特点,采用那种开发工具只是自己的偏好,本教材使用的是国内普及最多的Keil ARM的KeilμVision5版本。

(2)下载安装和添加芯片支持包(pack)。Keil软件并不是支持所有芯片的,需要根据使用的芯片系列下载对应的芯片支持包。本教材使用的是支持STM32F1xx系列的Keil.STM32F1xx_DFP.1.0.5版本芯片支持包。

(3)下载和整理固件库。根据所使用的芯片系列,下载对应的固件库。本教材使用的芯片是STM32F103VE,选择STM32F10x_StdPeriph_Lib_V3.5.0版本,这也是目前使用得较多的STM32标准外设库版本。

解压缩下载的固件库(最好保留一个备份),里面包含网络链接文件、标准外设库说明文档以及四个文件夹。各个文件夹功能如下所述。

_htmresc:ST的logo。

Libraries:包含CMSIS和STM32F10x_StdPeriph_Driver两个子文件夹,CMSIS是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度。STM32F10x_StdPeriph_Driver则包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project:包含大量外设的例程和各个软件版本的评估版工程模板。

Utilities:评估版的相关文件。

为了方便使用,一般把常用的文件整理出来,整理方法可以根据个人习惯和理解任意整理。网上常用的整理的结构如图4.6所示。

图4.6 整理后的STM 32标准外设库结构

ASM文件夹:存放\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSu pport\ST\STM32F10x\startup\arm文件夹下所有汇编文件。

Lib文件夹:存放STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver文件夹下的两个文件夹,主要是外设库函数和头文件。

stm32f10x_it文件夹:存放STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPe riph_Template文件夹下的stm32f10x_it.c、stm32f10x_it.h文件,主要是与中断相关的函数和头文件。

System文件夹:存放STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSup port文件夹下的core_cm3.c、core_cm3.h及\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.文件,一般称为系统文件。

使用固件库时,直接将上述四个文件夹拷贝到工程目录下即可。

相关知识:

以上工具和资料最好在http://www.keil.com/(arm KEIL英文网)或https://www.stmcu.org.cn/(意法半导体 STM8/STM32技术社区)或 https://www.stmcu.com.cn/(意法半导体STM8/STM32中文网)下载,也可上网搜索得到。

以上内容的安装、使用详见第3章3.4工程建立章节。

4.1.4.2 应用实例——使用固件库循环点亮LED

如图4.7所示,完成LED1、LED2、LED3循环闪亮。

图4.7 LED硬件原理图

1.电路设计与分析

LED亮:GPIO(PB5、PD6、PD3)输出为0

LED灭:GPIO(PB5、PD6、PD3)输出为1

电阻R为限流电阻,保证发光二极管在允许的电流下工作。(www.daowen.com)

2.软件设计

安装好了开发环境和了解标准库文件之后,使用库建工程的步骤较多,我们一般建立一个空工程,作为工程模板,以后直接复制工程模板,在它之下进行开发,见第3章3.4工程建立,可以直接使用该模板。为了使工程条理更清晰,在工程模板文件夹下再建立一个Led文件夹,放置与LED控制、初始化、头文件等,方便以后的移植。

编程要点:

(1)用于初始化GPIO所有信息的GPIO_InitTypeDef类型的结构体定义方法。

(2)使能GPIO端口时钟。

(3)初始化GPIO目标引脚为推挽输出模式。

(4)编写简单测试程序,控制GPIO引脚输出高、低电平,完成LED1、LED2、LED3循环闪亮。

3.代码分析

【例4.1】编程方式1

在工程模板主函数下直接编写,完整代码如下。

说明:

由于篇幅的关系,本书没有详细讲述有关库函数如何使用。要详细理解程序中有关固件库函数的使用,可下载《STM32固件库使用手册》,在手册中找到相关内容对照例程分析,便很容易理解库函数的使用方法。

本书使用STM32F1大黄蜂(M3内核)开发板,电路及相关资料可在https://yun.baidu.com/s/1hsi8AO0#下载。

从上述的程序可以看出,虽然完成了指定功能,但缺乏条理性,不便于移植。为此,将上述主程序整理为多个文件,分别存储,方便今后的移植、复用。

【例4.2】编程方式2

为了使工程条理更清晰,在工程模板文件夹下再建立一个Led文件夹,放置与LED控制、初始化、头文件等,方便以后的移植。

(1)LED引脚宏定义。在编写应用程序的过程中,要考虑更改硬件环境的情况,例如LED的控制引脚与当前的不一样,我们希望程序只需要做最小的修改即可在新的环境正常运行。这个时候般把硬件相关的部分使用宏来封装,若更改了硬件环境,只修改这些硬件相关的宏即可。这些定义一般存储在头文件,即本例子中的led.h文件中,代码如下。

为了也移植到其他工程中使用,建立led.c文件,并添加到工程Led文件夹中,用于编写LED初始化、控制程序,源程序如下。

为了方便移植使用,将led.h、led.c文件保存在Led文件夹中。由于增加了新的头文件,使用魔术棒设置,在C/C++选项中的Include Path添加路径。并将led.c文件添加到工程中。

程序代码2看似程序结构比程序代码1相对复杂,但只要将Led文件夹拷入其他工程中,按上述方法添加上“.c”文件和头文件编译路径,就可以使用它的相关函数。这是一种很流行的编程方法,移植特别方便。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈