史上最全的STM32介绍 + 环境搭建 任何人看了都懂

目录

第4章 单片机开发......................................................................................................... 2

4.1 初识STM32F407芯片......................................................................................... 2

4.1.1 单片机介绍.............................................................................................. 2

4.1.2 STM32F407芯片........................................................................................ 2

4.2 搭建开发环境..................................................................................................... 3

4.2.1 硬件平台.................................................................................................. 3

4.2.2 软件开发环境........................................................................................... 3

4.2.3 Keil MDK 软件的安装................................................................................. 3

4.2.4 Keil MDK 新建工程.................................................................................... 7

4.2.4 J-LINK驱动安装....................................................................................... 11

4.3 GPIO口操作...................................................................................................... 11

4.3.1 LED硬件原理图....................................................................................... 11

4.3.2 STM32F407的GPIO口介绍...................................................................... 11

4.3.3 STM32标准外设库................................................................................... 12

4.3.4 代码分析................................................................................................ 12

4.3.5 代码编译下载......................................................................................... 15

4.3.5 小节....................................................................................................... 17

 

第4章 单片机开发

嵌入式技术是整个物联网系统的关键核心技术之一。它相当于感知层大脑的,将感知层的传感器部分统一起来,实现具体的功能,是整个物联网的底层基础部分。

嵌入式的开发,最核心部分是芯片的开发。目前嵌入式开发主要有单片机、嵌入式linux等。其中单片机以其功能强大、性价比高,在物联网这一行业中占据了大半江山。

4.1 初识STM32F407芯片

本节介绍单片机和STM32F407芯片。

4.1.1 单片机介绍

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

4.1.2 STM32F407芯片

本书选用ST(意法半导体)推出的STM32F407系列芯片。它是ST(意法半导体)推出了以基于ARM Cortex™-M4为内核的高性能微控制器,其采用了90 纳米的NVM 工艺和ART(自适应实时存储器加速器,Adaptive Real-Time MemoryAccelerator™)。

根据市场相关统计,2017年STM32系列芯片出货为10亿颗。作为全球最大的半导体公司之一,ST拥有广泛的产品线,传感器、功率器件、汽车产品和嵌入式处理器解决方案,在物联网生态中起到重要作用。而其中MCU 是最重要的业务之一,官方数据显示,2017年,ST在通用微控制器市场份额约占据19%,公司拥有超过800款的STM32产品,超过50000个客户。

图4.1 STM32F407芯片

使用STM32F407作为开发主要是基于以下几点理由:

1)性价比高。

STM32F407VET6型号单颗采购价为13元左右,批量价格会更低一点。

2)市场大,开发资料多。

作为全球最受欢迎的芯片,目前市场上绝大部分公司都是基于STM32系列的芯片做开发,企业招聘也基本都要求会STM32。同时网上有很多成熟方案,相关论坛。

3)性能强大。

STM32F407提供了工作频率为168 MHz的Cortex™-M4内核(具有浮点单元)的性能。从Flash存储器执行时,STM32F407/417能够提供210 DMIPS/566 CoreMark性能,并且利用意法半导体的ART加速器实现了FLASH零等待状态。DSP指令和浮点单元扩大了产品的应用范围。

4)外设资源。丰富

2个USB OTG(其中一个支持HS)

音频:专用音频PLL和2个全双工I²S

通信接口多达15个(包括6个速度高达11.25 Mb/s的USART、3个速度高达45 Mb/s的SPI、3个I²C、2个CAN和1个SDIO)

模拟:2个12位DAC、3个速度为2.4 MSPS或7.2 MSPS(交错模式)的12位ADC

定时器多达17个:频率高达168 MHz的16和32位定时器

可以利用支持Compact Flash、SRAM、PSRAM、NOR和NAND存储器的灵活静态存储器控制器轻松扩展存储容量

基于模拟电子技术的真随机数发生器

4.2 搭建开发环境

开发环境主要分为硬件平台 和 软件开发环境两部分。

4.2.1 硬件平台

开发STM32F407,我们需要准备如下硬件平台:

  1. windows 电脑一台,配置推荐i5或者i5 以上。
  2. STM32F407ZTG6开发板一个。本书所有的代码将在STM32F407开发板上运行。
  3. J-LINK一个。主要用于下载程序使用。
  4. 路由器一个、网线两根。后面网络通信实验需要用到。
  5. 电源线,串口各一个,提供供电、串口调试。

图4.2 硬件平台

4.2.2 软件开发环境

1      电脑操作系统:windows

2      keil MDK软件。用于代码编写,编译,下载,仿真调试等。

3      jlink驱动。用于安装jlink驱动时使用,以便jlink能正常工作。

4      电脑串口调试软件。

5      TCPUDP测试工具。用于网络通信调试使用。

以上开发软件的下载可以见附录资料部分,会提供本书所有使用到的软件。方便读者安装到自己的电脑上。

4.2.3 Keil MDK 软件的安装

Keil MDK,也称MDK-ARM、Realview MDK、I-MDK、uVision4 等。Keil MDK是由三家国内代理商提供技术支持和相关服务。

MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。它提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

1)下载

keil MDK 的下载可以到官网:http://www2.keil.com/mdk5/ 。目前 keil MDK 是要收费的,读者也可以去网上找下其他版本。

2)安装

下载后,我们会得到一个mdk514.exe 的可执行文件,其中514 是版本号。双击运行,然后出现如下画面,点击Next>>

图4.3 安装引导界面

进入用户协议部分,把I agree to all the.... 勾选上,选择 Next>>

图4.4 用户协议界面

这里选择好软件的安装路径,点击Next>>

图4.5 安装路径选择界面

这里输入用户信息,包含用户姓名,邮箱等。

图4.6 用户信息界面

输入信息后,点击Next之后会进入安装界面,等待安装完成即可。

图4.7 安装过程界面

安装完成后,会弹出如下提示框,我们把Show Release Notes 不要勾选。点击Finish即可

图4.8 安装完成界面

安装完成后,我们找到安装路径G:\Keil_v5\UV4 点击 UV4.exe 运行即可。

图4.9 启动界面

4.2.4 Keil MDK 新建工程

安装完Keil MDK后,我们来新建我们的第一个工程。

1)安装STM32F407 pack包。

点击下图红色框内的图标。

图4.10 主界面

选择File —— import,导入Keil.STM32F4xx_DFP.2.13.0.pack。该文件可以去官网下载,由于网速较慢,本书附录也会提供国内的下载链接。

图4.11 pack install窗口

选择打开即可。

图4.12 选择pack界面

2)新建工程

点击 Project —— New uVision project

图4.13 新建工程界面

选择工程路径,然后输入文件名为demo01,点击保存。

图4.14 保存工程界面

弹出此界面,由于本书选择的开发板芯片型号是 STM32F407ZGT6,故而我们选择STMicrolectronics——STM32F407——STM32F407ZG——STM32F407ZGTx。读者需要根据自己的开发板芯片型号选择。

图4.15 芯片型号选择界面

之后弹出如下界面,我们直接选择OK即可。

图4.16 MRTE界面

至此,我们的工程创建完成。

4.2.4 J-LINK驱动安装

本书使用的仿真器是J-LINK,需要在电脑上安装J-LINK驱动。读者可以自己去网上下载相关驱动,也可以直接使用本书附录的驱动文件。

该驱动安装比较简单,点击运行Setup_JLinkARM_V434.exe后一路选择Next 即可安装完成。本书在此不做赘述,读者自行安装即可。

4.3 GPIO口操作

在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号。对设备的控制,使用传统的串口或者并口就显得比较复杂,所以,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。

4.3.1 LED硬件原理图

本章节将通过操作LED亮灭的方式,来实现对STM32F407的GPIO口操作。翻看开发板LED相关的硬件原理图,如图4.17所示。

图4.17 LED原理图

根据原理图以及LED灯的特性,我们可知:当LED0、LED1、LED2引脚输出低电平的时候,三个LED灯将会发光。反之输出高电平的时候,三个LED灯将熄灭。

而LED0、LED1、LED2三个引脚又分别对应到STM32F407芯片上的GPIOE_3、GPIOE_4、GPIOG_9。故而,LED的亮灭操作可以转化成STM32F407的引脚输出操作。

4.3.2 STM32F407的GPIO口介绍

1)分组

STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。

2GPIO的复用

STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。    比如说串口  就是GPIO复用为串口

3GPIO的输入模式

GPIO_Mode_IN_FLOATING 浮空输入

GPIO_Mode_IPU 上拉输入

GPIO_Mode_IPD 下拉输入

GPIO_Mode_AIN 模拟输入

4GPIO的输出模式

GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)

GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

4GPIO的最大输出速度

2MHZ  (低速)

25MHZ  (中速)

50MHZ  (快速)

100MHZ  (高速)

4.3.3 STM32标准外设库

STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少开发者开发使用片内外设的时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。同时,STM32官方还给出了大量的示例代码以供学习。

STM32标准外设库可以到ST官网下载,也可以直接使用本书附录部分提供的下载好的STM32标准外设库。

使用keil MDK编写代码时,我们需要将STM32标准外设库添加到工程中去。这里推荐读者直接使用附录已经添加好的工程文件。

4.3.4 代码分析

1)工程文件结构

使用keil MDK的new project选项,打开LED demo代码的工程文件——01_demo.uvprojx

图4.18 LED工程代码

左边是工程的代码文件。

common —— 整个工程的公共代码部分,主要是实现delay函数等。

main         —— 工程的main函数部分,程序启动后的入口函数。我们从main.c 文件开始分析。

startup_config —— 汇编启动代码部分,我们后续再讲解。

stm32f4_fwlib —— STM32F407的标准外设库文件部分。

user                   —— 用户编写的代码部分。

2main函数分析

打开main.c文件,可以看到如下代码内容:

图4.19 main.c文件

void delay(int ms) 函数:通过使用两个for循环,实现延时等待。

int main(void) 函数:程序启动后的入口函数,调用LED_Init()函数实现GPIO口的初始化。

之后进入 while 循环,调用GPIO_WriteBit 使引脚输出高低电平。

其中,GPIO_WriteBit 是STM32标准外设库里面的函数,其函数原型如下:

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

参数列表:

GPIO_TypeDef* GPIOx            ——对应STM32F407的GPIO口分组,可填参数有GPIOA ~ GPIOG

uint16_t GPIO_Pin                   ——具体引脚编号,可填参数有GPIO_Pin_0 ~ GPIO_Pin_16。

BitAction BitVal                        ——控制引脚输出的状态,可填参数有Bit_SET 表示输出高电平,Bit_RESET 表示输出低电平。

3LED初始化部分

打开led.c文件,可以看到如下代码内容:

图4.20 led.c 文件

该文件直接使用STM32标准外设库的函数去初始化GPIO口。具体每一行代码如下:

GPIO_InitTypeDef  GPIO_InitStructure;      ——定义GPIO_InitTypeDef结构体的局部变量,用于后面的初始化GPIO引脚。

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOG, ENABLE);  

——打开GPIOE、GPIOG时钟。

以下代码的含义是将GPIOE 这一组的 3、4引脚设置为 输出模式、推挽输出、100MHz速度、上拉输出。对应了STM32F407的GPIO口介绍 这一小节。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;        

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;               

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;           

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                  

GPIO_Init(GPIOE, &GPIO_InitStructure);                        

GPIO_SetBits(GPIOE, GPIO_Pin_3 | GPIO_Pin_4); ——使用STM32标准外设库函数,设置GPIOE这一组的 3、4 引脚输出高电平。

4.3.5 代码编译下载

1)编译

点击下图红色框的build按钮,开始编译。

图4.21 编译代码

编译结束后,可以看到下面的Build Output输出信息,则表示编译成功。

 

图4.22 编译成功

2)代码下载

代码下载需要使用j-link把开发板和电脑连接起来。之后点击keil MDK中的Options for Target按钮。

图4.23 Options for Target按钮

点击Debug,在下拉菜单中选择J-LINK/J-TRACE Cortex。之后点击右边的Setting按钮。

图4.24 Debug界面

 

弹出来的界面中,选择Flash Download,如果 Progamming algorithm内容是空的。则点击Add按钮。

图4.25 Flash Download界面

选择STM32F407xx Flash ,点击Add 即可。之后点击确认、OK,退出Options for Target回到keil MDK主界面。

点击红色框的download按钮即可下载程序到开发板运行。

图4.25 下载按钮

4.3.5 小节

本节通过使用LED灯的例子,讲解了STM32的GPIO口操作,同时介绍了STM32标准外设库文件的使用。让读者第一次接触STM32的代码开发,程序下载等操作。

 

发布了151 篇原创文章 · 获赞 57 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/aa120515692/article/details/104225027