STM32入门笔记(02):MDK Keil5 开发环境搭建及新建工程模板教程(SPL库函数版)


Keil5 开发环境搭建

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Keil uVision5 中点击 【Pack Installer 】查看支持包安装:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

芯片数据手册

STM32中文参考手册_V10/MPU9250_3轴加速度_陀螺仪_磁力计/STM32F103VET6芯片数据手册
STM32系列产品命名规则如下图所示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Mec 多功能智能小车底盘开发与使用手册

资料下载:多功能智能小车底盘开发与使用手册

机器人 STM32 控制器上的程序写法是基于 RTOS 系统,与中断控制的方式不同,RTOS 是任务形式轮流执行,优先级高的任务执行优先级更高(中断优先级高于任务优先级)。需要说明的是,如果某个任务有执行逻辑的错误的话,程序会卡在该错误处无法继续执行下去。例如:假如程序中有一个串口3 的发送任务,但是串口3没有初始化或者是初始化的代码出错,那么在执行串口3发送任务时,程序就会卡住。因此如果遇到调试过程中程序卡住无法正常执行,需要逐个任务排查是否有 bug 卡住了。

支持APP遥控、PS2 有线手柄、ROS(串口 3)控制、航模遥控控制、CAN 控制、串口控制这 6 种控制方式。控制方式显示在 OLED 显示屏的左下角,默认开机后使用ROS(串口3)控制的方式。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Mec 主控原理图

USB-Hub_四路USB集线器实物详解

在这里插入图片描述

在这里插入图片描述

主板详解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Mec STM32F103VET6集成主控板资源分配

在这里插入图片描述

在这里插入图片描述

Mec OLED 显示内容

在这里插入图片描述

注意:首先要将STM32主控器的物理使能开关拨在"ON"状态下。

在这里插入图片描述

如何给 STM32 控制器下载程序?

STM32 控制器可以通过串口或者 SWD 接口下载程序。串口是通过USB数据线下载,默认有赠送,SWD 接口建议使用金属外壳的 STlink 下载,需要自备。

串口下载

主板采用了一键下载电路,下载程序非常方便。只需一根MicroUSB 手机数据线就行了。

硬件准备

1.STM32 控制器
2.MicroUSB 手机数据线

软件准备
mcuisp 烧录软件 / FlyMcu附送的资料),相应的USB 转TTL 模块CP2102的驱动。(如果驱动安装实在困难,就下载个驱动精灵吧。)

在这里插入图片描述

安装成功后可以打开设备管理器看看,可以看到驱动已经安装成功,否则会有红色的感叹号。

串口下载程序的接线非常简单,数据线连接电脑和板子即可。打开【附送资料/7.软件与驱动】文件夹里面的 FlyMcu 软件,根据下图的操作顺序设置即可。

在这里插入图片描述

OK,一切准备就绪,然后点击开始编程,程序就可以下载了。因为勾选了编程后执行,所以程序下载完后,会自动运行。

实操:

1.打开Mcuisp软件
(如果为2021年9月后购买的ROS教育机器人系列客户,请使用 FlyMcu 软件进行烧录,
因为2021年9月后更新使用了性能更好的F4芯片,而Mcuisp烧录程序到F4容易失败)

2.连接单片机、电脑

3.设置串口、波特率、DTR低电平复位、RTS高电平进BL

4.选择HEX文件,开始下载

串口下载程序踩坑记录

参考下面两篇文章:

注意:使用串口下载前,设置为烧录模式:BOOT0=1(高电平),BOOT1=0(低电平),下载完后,可以设置回原来那样都接低电平。(我就犯了这个错误,纠结一个多小时~~)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多学一招
STM32的BOOT0引脚用于决定微控制器启动时应该从哪个存储器启动。BOOT0引脚主要有两种状态,分别是高电平低电平
当BOOT0接低电平(0V)时,微控制器从Flash存储器启动。在这种模式下,STM32的程序会从内部Flash存储器中开始执行。这通常是我们使用的启动模式,因为应用程序通常都储存在内部的Flash存储器中。
当BOOT0接高电平(通常时VDD电平)时,微控制器进入系统存储器启动模式。在这种情况下,STM32从内部的系统存储器启动,该存储器包含一个预先配置的程序(又称为BOOTLOADER),其允许您通过特定的通信协议(例如USART、SPI、I2C等)进行固件更新。
所以,BOOT0引脚的状态决定了STM32微控制器在上电复位后从哪个存储器启动。通常,开发和测试时,我们会将BOOT0设置为低电平,以便直接运行存储在Flash中的应用程序。在需要更新固件的特殊情况下,可以将BOOT0设置为高电平,以便启动预先配置的BOOTLOADER。


SWD 下载

多学一招你了解JLink、ST-Link、ULink、JTAG、SWD、SWIM的区别吗?

在这里插入图片描述

在这里插入图片描述

实操:

1.安装对应芯片pack包

2.安装STlink驱动

3.查看是否连接STlink

4.打开STM32工程文件

5.STlink连接单片机(A14-SWCLK A13-SWDIO)

6.配置 ST-Link Debugger

在这里插入图片描述
7.开始下载

资料下载:


新建基于STM32F4xx固件库的MDK5工程模板

MDK5的基本操作

【B站@野火_firege】STM32 HAL库开发实战指南 , 零基础入门CubeMX+HAL库 第2讲 KEIL的安装和使用1~2

  • *.hex 文件保存在【OBJ】目录下
  • 【USER】下打开带 Keil uVision5 图标的工程文件 【工程名称.uvprojx】从而打开工程。
    在这里插入图片描述

在这里插入图片描述

准备工作—SPL固件库下载

在这里插入图片描述
选择固件库版本:V1.4(F4专用)
在这里插入图片描述

固件库包简介

在这里插入图片描述


新建一个基于 V1.9 版本固件库的 STM32F4xx 工程模板

1、在建立工程之前,建议用户咋点按哦的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为 【Template】 (文件名可任取)。

2、点击 MDK 的菜单: Project - New Uvision Project ,然后将目录定位到刚才建立的文件夹目录 【Template】之下,在这个目录下面建立子文件夹【USER】(代码工程文件都存放在这个目录),很多人喜欢新建 “Project” 也是可以的,根据跟人喜好命名),然后定位到【USER】目录夏敏,我们的工程文件就都保存在这里,工程名字为Template,点击保存。

在这里插入图片描述

在弹出的对话框中【Select Device for Target ‘Target1’…】窗口中选择 【STMicroelectronics 】- 【STM32F407VETx】型号的芯片。

在这里插入图片描述

在这里插入图片描述
3、点击【OK】后 MDK会弹出Manage Run-Time Environment的对话框,点击【Cancel / 取消】关闭窗口即可。
在这里插入图片描述

这是MDK5 新增的一个功能,在这个界面,我们可以天极爱自己需要的组件吗,从而方便构建开发环境,不过这里不做介绍。所以直接点击 Cancel 即可。得到如下工程界面。

在这里插入图片描述

4、 现在看看【USER】目录下的包含 3 个文件夹和 2 个文件。在这里插入图片描述

这里的3 个文件夹是 MDK自动生成的,可以删掉或者直接不用管。【Template.uvprojx】是工程文件,不能删除!

5、接下来,在【Template】工程目录下面,新建 3 个文件夹 CORE,OBJ,以及STM32F4xx_FWLib

  • 【CORE】 用来存放核心文件启动文件 ;
  • 【OBJ】 用来存放编译过程文件以及hex文件;
  • 【STM32F4xx_FWLib】用来存放ST官方提供的库函数源码文件;

【USER】除了存放工程文件之外,还用来存放 主函数文件 main.c ,以及其他包括 system_stm32f10x.c等等。

工程目录预览如下图所示:
在这里插入图片描述

6、将官方的固件库包里面的源码文件复制到我们的工程目录文件夹【STM32F4xx_FWLib】下面。

打开官方固件库包,定位到之前准备好的 V1.9 固件库包的目录:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 路径下。将目录下的 src ,inc 两个文件复制到刚刚建立的 【STM32F4xx_FWLib】文件目录下。src 是存放固件库的 .c 文件;inc 是存放对应的 .h 文件。

在这里插入图片描述

7、将固件库包里面的相关启动文 复制到我们工程目录【CORE】之下。

打开官方固件库包,定位到STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Include 文件路径。找到 core_m4.h 文件复制到 【CORE】。

在这里插入图片描述

然后,进入\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 路径下, 找到 startup_stm32f40_41xxx.s 文件复制到【CORE】。

在这里插入图片描述

问题关于stm32 f4系列中的stm32 core_m4.c 的问题 ,release notes 文件内有说明。

解决:在库函数的保存目录 \CMSIS\Include…,早期的是.c,现在已经都升级为.h文件了,叫 core_m3.h 、 core_m4.h等。

原来Core_cm3.c里有一些汇编关键字的宏定义,支持不同的编译器,还提供了访问内核寄存器的函数。在CMSIS升级到2.0版本时CMSIS的软件结构做了一些调整,去掉了core_cm3.c。ST的固件库也相应做了修改。在新的版本里只需要包含core_cm3.h,core_cmFunc.h,core_cmInstr.h,不需要core_cm3.c文件了。

8、【USER】目录。

固件包 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 下的 stm32f4xx.h 和 system_stm32f4xx.h 2个文件复制到【USER】目录。

在这里插入图片描述

进入固件包 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates路径。

然后将 main.c 、main.h、 stm32f4xx_conf.h 、stm32f4xx_it.c 、stm32f4xx_it.h 以及 system_stm32f4xx.c 6个文件复制到【USER】目录。

在这里插入图片描述

9、前面的 8 个步骤,将需要的固件库文件复制到了工程目录【Template】对应的文件夹下,接下来将这些文件加入到工程中去。

右键点击 【Target1】 - 【Manage Projec Items】。

在这里插入图片描述

10、 接着上一步,再对话框的 Project Targets一栏,将 Target 修改为 Tempalte , 然后再 Groups 一栏 删掉 Source Group1, 建立三个Groups: USER,CORE ,FWLIB。然后点击【OK】,可以看到我们的Target 名称已经修改。

在这里插入图片描述
在这里插入图片描述

11、将之前复制到对应目录的文件添加进工程中。

右键【FWLIB】 -【Manage Projec Items】 后,Group 一栏选中 FWLIB ,接着点击右下角 Add Files… 按钮 进入【STM32F4xx_FWLib】- 【src】全选添加。

在这里插入图片描述
在这里插入图片描述
同样的方法,Group 定位到 USER 下面添加【USER】需要的文件。
在这里插入图片描述

【CORE】目录添加文件时,需要注意选择“所有文件类型” 。
在这里插入图片描述

在这里插入图片描述
点击【OK】回到工程界面,点击目录前面的“+”号,查看添加的文件。
在这里插入图片描述

13、接下来要编译工程,在编译之前首先要选择编译中间文件后存放目录,也就是垃圾文件。方法时点击魔术棒,然后选择【Ouput】选项下面的 “ Select folder for objects…”,然后选择目录为我们上面新建的【OBJ】目录。

注意:如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK自动生成的 Objects 目录和 Listings 目录。

勾选 【Great HEX File】
在这里插入图片描述

垃圾文件存放在【OBJ】目录。

在这里插入图片描述

14、配置 头文件路径。

点击 MDK 主界面左上角的 编译 按钮。

报错:头文件路径找不到。
在这里插入图片描述
点击魔术棒,选择 【C/C++】选项下的 Include Path 右侧的三个点,点击进去,添加头文件。

CORE
USER
STM32F4xx_FWLib\ inc
在这里插入图片描述
注意:
1.这里的路径是定位到 inc 目录下面,不要弄错。
2.工程中所有引用到了的头文件路径必须在这里包含。并且是包含到最后一级目录。
在这里插入图片描述

16、接下来,再来编译工程,又有很多同样的错误。这是为什么呢?
这是因为库函数在配置和选择外设的时候通过宏定义来选择的,所有需要配置一个 全局的宏定义变量。

填写 STM32F40_41xxx,USE_STDPERIPH_DRIVER 到 Define 输入框内,然后点击 【OK】。

Template

重要的预编译全局宏定义标识符:

STM32F40_41xxx,USE_STDPERIPH_DRIVER 中间要用逗号“,”隔开。

这个宏定义标识符是干嘛的?

这是因为库函数在配置和选择外设的时候通过宏定义来选择的,所有需要配置一个 全局的宏定义变量。

启动文件不要选错 : startup_stm32f40_41xxx.s

对于其他芯片,
STM32F429/439: startup_stm32f429_439xx.s
STM32F427/437: startup_stm32f427_437xx.s

常见报错:

"no source": Error: command-line: #992: invalid macro definition: STM32F40_41xxx.USE_STDPERIPH_DRIVER

答案:STM32F40_41xxx,USE_STDPERIPH_DRIVER ; 宏定义标识符错误,输入要正确,逗号隔开。

..\FWLIB\src\stm32f4xx_usart.c(1038): warning: #223-D: function "assert_param" declared implicitly
答案:宏定义标识符“USE_STDPERIPH_DRIVER”书写错误。

..\USER\stm32f4xx.h(102): error: #35: #error directive: "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)“
答案:宏定义标识符“STM32F40_41xxx”书写错误。

stm32f4xx.h(9136): error: #5: cannot open source input file "stm32f4xx_conf.h": No such file or directory
答案:起先添加【USER】内文件的时候,漏掉了 “stm32f4xx_conf.h” 文件!!!

..\FWLIB\src\stm32f4xx_fmc.c(144): error: #20: identifier "FMC_Bank1" is undefined
答案:工程文件 \FWLIB\src 下移除 stm32f4xx_fmc.c 文件。参考正点原子论坛的帖子

..\OBJ\NewProject.axf: Error: L6218E: Undefined symbol TimingDelay_Decrement (referred from stm32f4xx_it.o).
答案:进入 【USER】目录下的“ stm32f4xx_it.c” 文件下,点击MDK 菜单栏 【Edit】- 【Find】查找 “ TimingDelay_Decrement” 这个函数,然后注释掉它即可。

在这里插入图片描述—说明:按照参考资料1:B站视频正点原子的教学视频做,可以完成 STM32F10x 的工程新建,但是 STM32F40x 的却不行,报错太多!
报错:main.c(23): error: ‘stm32_eval.h’ file not found

在这里插入图片描述

可以根据B站视频里介绍的方法解决,也可以删除【USER】目录的 main.c 文件中的代码,替代成如下代码:

#include "stm32f10x.h"

 int main(void)
 {	
/*
   ??????????
*/	 
		while(1)
	{
  /*
		??????????
  */
	}
 }

报错:../CORE/core_cm3.c(445): error: non-ASM statement in naked function is not supported uint32_t resu

解决:参考文章-- 基于MDK编译时出现:关于core_cm3.c的错误

资料下载:

提示:实验资料上传CSDN是为了资料存放方便以后查找,另外顺便赚点积分。没有积分的朋友,建议直接去正点原子资料下载中心找找看,通常"新建工程模板"在【标准例程-库函数版本 】-【标准例程-库函数版本】-【实验0 Template工程模板】文件夹内。
在这里插入图片描述

学习资料:


参考资料

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naiva

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值