STM32学习第一天-搭建MDK5

学习第一天

STM32是目前最流行的单片机类型,相比之下,许多年前火热的C51单片机已经渐渐被市场淘汰。STM32这个名字有其自己的含义,ST:意法半导体,M:cortex-M内核,32:32位单片机。
STM32是用来做嵌入式系统的。那么,嵌入式系统是什么呢?嵌入式系统就是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。
嵌入式系统的硬件组成包括:MCU MPU LCD  ADC TIME USART IIC SPI等,我们需要了解的概念如下。
MCU:微控制器(单片机),它和MPU是一体的。
CPU:中央处理器
SoC:系统级芯片(片上系统)
嵌入式技术是一个概念广泛的词,包括单片机开发  STM32开发 、AVR开发、linux驱动开发等,简单来说,只要能编程操作硬件的开发都属于嵌入式开发。
在了解了STM32和嵌入式的基本概念之后,我们就需要知道,STM32可以用来做什么呢?STM32可以用来做智能机器人、无人机、平衡车、智能手环等。STM32对应的岗位有STM32工程师、单片机工程师、嵌入式开发工程师。
要学习STM32,首先要搭建好它的开发环境,就是Keil MDK 开发环境。

MDK5的搭建

1、下载keil v5软件,下载地址:https://www.keil.com/download/product/
2、下载STM32F407的开发软件包,下载地址:http://www.keil.com/dd2/pack/
3、安装keil v5:
双击安装程序,点击next,勾上同意使用协议,点击next。
keil v5安装程序图标
选择安装目录,这里以安装到D盘为例,点击next。
STM32学习第一天-搭建MDK5_第1张图片
(注意安装路径不能有中文)
点击下一步开始安装,安装完成后点击finish完成安装,这时安装程序可能会自动弹出Pack Installer的界面。
STM32学习第一天-搭建MDK5_第2张图片
这是更新芯片支持包的界面,选择你所需要的芯片支持包下载,若出现FIle dowmload failed的错误,关闭即可,支持包可在官网下载。http://www.keil.com/dd2/pack
本人所使用的是STM32F4的支持包,在官网上下载下来后双击运行即可。
STM32F4支持包图标
若出现双击支持包无法运行的情况,右键支持包选择打开方式在你的MDK5安装路径下找到UV4\PackUnzip程序,选择它来运行就好,我的路径是D:\Keil_v5\UV4\PackUnzip。
STM32学习第一天-搭建MDK5_第3张图片
STM32学习第一天-搭建MDK5_第4张图片
支持包安装完成后,上网下载一个keygen。
程序图标
我们要使用keygen.exe来对MDK进行破解:
打开MDK,点解File ------>Liscense Management 调出注册管理界面,复制CID号。
STM32学习第一天-搭建MDK5_第5张图片
STM32学习第一天-搭建MDK5_第6张图片
打开 keygen,粘贴CID号 ,Target选择ARM,点击Generate 获得并复制破解码。
STM32学习第一天-搭建MDK5_第7张图片
把破解码粘贴到下图File ------>Liscense Management中,点击Add LIC破解。
注意:步骤正常,若点击Add LIC没有反应,请用管理员权限打开MDK5在进行破解。
STM32学习第一天-搭建MDK5_第8张图片
至此MDK安装完毕。

程序模板的创建

  1. 在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。作为工程的根目录文件夹。
  2. 然后为了方便我们存放工程需要的一些其他文件,这里我们还新建下面 5 个子文件夹:CODE ,GECLIB,OBJ,SYSTEM,USER。至于这些文件夹名字,实际上是可以任取的,我们这样取名只是为了方便识别。STM32学习第一天-搭建MDK5_第9张图片
  3. 打开 Keil,点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹Template之下的USER子目录,工程的名字可以根据自己的要求设置。USER文件夹就用来存放工程的文件。之后创建一个新的工程 Project->New uVision Project。
  4. 处理器根据芯片的不同而选择,我的芯片是STM32F407ZE,所以选择的处理器为STMicroelectronics->STM32F4 series->STM32F407->STM32F407ZE,点击OK即可。
    STM32学习第一天-搭建MDK5_第10张图片
  5. 打开官方固件库包,定位到我们之前准备好的固件库包的目录:
    \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 GECLIB 文件夹下面。
    src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件
  6. 打开官方固件库包,定位到目录:
    \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 下面,将文件 startup_stm32f40_41xxx.s (启动文件)复制到 CODE 目录下面。
  7. 然后定位到目录:
    \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ , 将 里 面 的 四 个 头 文 件 :core_cm4.h 、core_cm4_simd.h 、core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CODE目录下面。此时CODE的文件应有
    List item
  8. 接下来我们要复制工程模板需要的一些其他头文件和源文件到我们工程。 首先定位到目录:
    STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面
    的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。这两个头文件是STM32F4 工程非常关键的两个头文件。
  9. 然后进入目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates ,
    将 目 录 下 面 的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,
    system_stm32f4xx.c 复制到 USER 目录下面。

完成以上步骤后,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们需要把这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items,在Project Targets一栏, 我们将Target名字修改为Template,然后在Groups一栏删掉一个SourceGroup1,建立三个 Groups:USER,CODE,GECLIB。然后点击 OK,可以看到我们的 Target名字以及 Groups。添加需要的文件选择 GECLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\GECLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。
(1、对于添加的文件说明:例如只用到GPIO的配置,可以只选择stm32f4xx_gpio.c这样可以减少工程的代码量,提高编译的速度。2、有个文件 stm32f4xx_fmc.c 比较特殊。这个文件STM32F42 和 STM32F43 系列才用到,以我们这里要把它叉掉(注意是 stm32f4xx_fmc.c 要叉掉,不要直接叉掉stm32f4xx_fsmc.c)。)
按同样的办法,添加CODE和USER的文件。 CODE 下面需要添加的文件为 startup_stm32f40_41xxx.s( 注意,默认添加的时候文件类型为.c, 也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,你需要选择文件类型为 All files件 才能看得到这个文件),USER 目录下面需要添加的文件为 main.c,stm32f4xx_it.c,system_stm32f4xx.c。添加完成后,我们要在 MDK 里面设置头文件存放路径。也就是告诉 MDK 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。 如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。
接下来我们需要设置头文件路径和添加宏定义等,流程如下:
STM32学习第一天-搭建MDK5_第11张图片
2. 这里我们需要添加的头文件路径包括:\CODE, \USER\以及\GECLIB\inc。STM32学习第一天-搭建MDK5_第12张图片
STM32学习第一天-搭建MDK5_第13张图片
4.STM32F40 系列的工程,还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符 STM32F40_41xxx和 USE_STDPERIPH_DRIVER, 他们之间是用英文的逗号隔开的,请大家注意。
STM32学习第一天-搭建MDK5_第14张图片
5.在做编译工程之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面的 新建的 OBJ 目录。,然后再OBJ目录下就可看到我们需要的程序.hex文件了
STM32学习第一天-搭建MDK5_第15张图片
至此第一个工程搭建完成,直接编译后错误修改如下:
1.将main.c的代码全部删除,然后添加以下代码
#include “stm32f4xx.h”
int main(void)
{
return 0;
}

2.删除stm32f4xx_it.c 第32行代码(删除头文件main.h)

3.删除stm32f4xx_it.c第144行代码(删除头文件main.h)

注意
1、win10要以管理员权限运行
2、安装路径不能是中文
3、使用keygen.exe破解软件keil v5
4、双击安装支持包:Keil.STM32F4xx_DFP.1.0.8.pack(D:\GZ1927\17STM32\STM32F40器件支持包)
5、使用安装好的支持包搭建第一个工程,编译后错误修改:
a.将main.c的代码全部删除,然后添加以下代码
#include “stm32f4xx.h”
int main(void)
{
return 0;
}

b.删除stm32f4xx_it.c 第32行代码

c.删除stm32f4xx_it.c第144行代码

至此,STM32环境搭建基本完成,之后还需要根据芯片使用手册里的时钟树最高频率对时钟配置代码进行修改,环境搭建才算彻底完成。

时钟树与时钟配置代码修改

打开STM32F4xx中文参考手册第6.3节图13可以看到官方给出的芯片时钟树,图片如下。
STM32学习第一天-搭建MDK5_第16张图片
为什么要说起时钟呢,因为它在芯片运行的过程中起到了非常重要的作用。
芯片的时钟作用:芯片的时钟是由晶振提供或者振荡电路提供,时钟是由高低电平组成脉冲方波,CPU想要正常工作,必须得有时钟,时钟类似人的心脏。晶振提供的脉冲波正常,芯片才能正常工作。

时钟频率:
1GHZ = 1000MHZ = 1000 000KHZ = 1000 000 000HZ
1HZ 1秒产生一个脉冲方波

上图时钟树图中有几个重要的时钟,其中文意思为:
LSIRC 32KHZ 内部低速RC振荡时钟
LSEOSE32.768KHZ 外部低速晶振时钟
16MHZ HSI RC 内部高速RC振荡时钟
4-26MHZ HSE OSC 外部高速晶振时钟

由上图时钟树图画红圈部分可得知,系统时钟的频率为168MHZ,而产生时钟的部件并不能产生这么高的频率,那么这么高的系统时钟频率是怎么来的呢?它是通过上图左下角的锁相环(PLL),也叫倍频器来放大的。

锁相环放大频率的公式为:
f(VCO 时钟) = f(PLL 时钟输入) × (PLLN / PLLM)
f(PLL 常规时钟输出) = f(VCO 时钟) / PLLP
由上面公式可得
f(PLL 常规时钟输出) = (f(PLL 时钟输入) × (PLLN / PLLM))/PLLP
168MHZ 8MHZ 336 8 2
(PPL时钟输入已经确定,PLLN、PLLM和PLLP由个人设置,最终结果为168MHZ即可)
由此得到系统时钟频率168MHZ。
对照公式,我们就可以相应的修改时钟配置的代码:
(根据个人情况修改,我的代码里是PLLM不符合公式,所以配置的是PLLM)
1、ststem_stm32f4xx.c第316行修改如下
#define PLL_M 8
2、stm32f4xx.h第123行修改如下
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
至此,MDK的搭建就完成了。
根据我的板子的实际情况,后期我用到的系统时钟一般只有以下几个,在此处记录一下备忘:
SYSCLK 168MHZ
HCLK 168MHZ
AHB1 168MHZ
APB1 42MHZ
APB2 84MHZ

你可能感兴趣的:(STM32)