目录

  • Keil5 开发环境搭建
  • 芯片数据手册
    • Mec 多功能智能小车底盘开发与使用手册
  • Mec 主控原理图
  • Mec STM32F103VET6集成主控板资源分配
  • Mec OLED 显示内容
    • 如何给 STM32 控制器下载程序?
      • 串口下载
        • 串口下载程序踩坑记录
      • SWD 下载
  • 新建基于STM32F4xx固件库的MDK5工程模板
    • MDK5的基本操作
    • 准备工作—SPL固件库下载
    • 新建一个基于 V1.9 版本固件库的` STM32F4xx` **工程模板**
  • 参考资料

Keil5 开发环境搭建

  • Keil MDK µVision 5 下载安装及破解教程

  • Keil 5 需要安装支持包下载:https://www.keil.com/dd2/pack/#!#eula-container (下载完成后,保存在keil安装路径下,双击文件安装即可)(CSDN下载)


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文件,开始下载

串口下载程序踩坑记录

参考下面两篇文章:

  • C8T6最小系统板的烧录

  • 【强烈推荐】flyMcu给STM32串口烧录失败踩坑、总结及注意事项

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

SWD 下载

实操:

1.安装对应芯片pack包

2.安装STlink驱动

3.查看是否连接STlink

4.打开STM32工程文件

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

6.开始下载

资料下载:

  • 1.驱动以及STlink 下载程序教学视频资料下载地址

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

MDK5的基本操作

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

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

准备工作—SPL固件库下载

  • 开发环境:MDK5

  • 固件库友情链接:ST官网 的 STM32F4xx DSP and standard peripherals library ( 或 @naiva CSDN下载) (百度经验:如何在ST官网下载STM32单片机标准固件库?)


选择固件库版本: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】。

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

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的错误

资料下载:

  • 1.STM32F10x_工程模板
  • 2.STM32F4xx_工程模板
  • 3. MDK5 Software Packs

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

学习资料:

  • 1.B站:STM32开发板实验教程-新建工程模板-基于固件库
  • 2.基于MDK编译时出现:关于core_cm3.c的错误
  • 3.注意 STM32F103 和 STM32F407 的区别:引脚,flash,电源电路等。

参考资料

  • [1] B站 |【正点原子】STM32开发板实验教程(F103)
  • [2] CSDN | STM32新手入门教程
  • [3] CSDN @ Naisu Xu | STM32系列微控制器入门介绍

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

  1. 【S32K】S32K144入门笔记(1) 从零开始进行开发环境搭建

    0.目录 文章目录 0.目录 1. 起因 2. 开发环境 2.1 软件开发环境选择 2.2 S32DS 2.2.1 下载&安装 2.2.2 Demo工程 2.3 硬件开发板选择 2.3.1 硬 ...

  2. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  3. 【官方搭建入门】JEEWX 捷微开发环境搭建必读

    [官方搭建入门]JEEWX 捷微开发环境搭建必读 下载地址: http://git.oschina.net/jeecg/jeewx 1. 标准开发环境:eclipse + maven + jdk7 + ...

  4. JEECG_3.7开发环境搭建与代码生成器入门级教程-张代浩-专题视频课程

    JEECG_3.7开发环境搭建与代码生成器入门级教程-3088人已学习 课程介绍         针对入门级同学,清晰讲解JEECG开发平台本地环境搭建步骤,针对jeecg的代码生成器做专题使用讲解, ...

  5. Dart Server开发环境搭建及新建运行项目

    Dart Server开发环境搭建及新建运行项目 开发环境的搭建 1. 下载Dart SDK 2. 下载开发工具 3. 创建Dart Server项目 Dart除了可以使用Flutter进行移动应用开 ...

  6. Python入门 Linux 下 Python Web开发环境搭建笔记

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 之前写过 ...

  7. 学习笔记Hadoop(十三)—— MapReduce开发入门(1)—— MapReduce开发环境搭建、MapReduce单词计数源码分析

    一.MapReduce MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归纳)&qu ...

  8. 【Android基础笔记01】Android开发环境搭建和HelloWorld

    最近手头项目3.0版本要上线了, 没有那么多工作压力了, 抽空看了看之前在云笔记上做的笔记 都是一些基础知识 给大家分享出来吧 一.什么是Android?[了解 ] Android(中文俗称安卓)是一 ...

  9. 树莓派开发笔记(一) 开发环境搭建

    开发环境搭建 开发环境搭建 硬件准备 系统烧录 系统配置 基本配置 其他配置 安装开发软件 开发环境搭建 硬件准备 SD-Card 树莓派(本人使用的英国版 RS 3B) 5V 2A 供电 Windo ...

最新文章

  1. python知道答案_Python程序设计基础知道章节测试答案
  2. C#非泛型集合类-ArrayList数组集合类
  3. 介绍十种数据恢复的软件工具
  4. 21天舞动西浦报名失败的教训:先下手为强
  5. win下配置的ES中的数据在哪里可以看到?三种方式你看那种更加高大上!!!(win_Elasticsearch)
  6. 数据结构 - 栈(链表实现栈的入栈出栈)
  7. Codeforces 402 and 403 (Div. 2 and 1)
  8. 白话 Golang pprof
  9. working-with-php-and-beanstalkd
  10. SpringBoot2.x 官方墙裂推荐的缓存框架,竟然不是Redis!
  11. Android Key Hash的生成
  12. 计算机毕业设计、实战项目之 [含论文+答辩PPT+任务书+中期检查表+源码等]基于S2SH的医院在线挂号[包运行成功]
  13. 黑群晖文件服务器,折腾NAS,入手黑群晖
  14. 如何创建一个基本的魔兽全图外挂 HowTo create a basic Maphack by Chaotic
  15. m_sequencer和p_sequencer
  16. JVM——GC算法原理
  17. 小红书去水印源码算法
  18. 超短激光与金属材料相互作用的Comsol双温模型(激光烧蚀)
  19. Nimbus线上AMA内容记录-第四期
  20. maven项目中,使用pom文件引入自定义jar包

热门文章

  1. collection.get:fail -502005 database collection not exists. [ResourceNotFound] Db or Table not exist
  2. 微信蓝牙设备服务器,微信又更新了 支持连接蓝牙设备
  3. 提高电脑性能增加fps的方法
  4. 手机cpu性能天梯图2022 手机cpu性能排行2022 手机cpu哪个好
  5. 快速完成会议记录的智慧之选,讯飞智能录音笔SR502表现出色
  6. 三维实景地图智慧园区3D可视化物联商迪3D网平台制作
  7. iis让支持webp文件
  8. IT程序员吃得起涪陵榨菜吗?
  9. 播放器实战07 av_read_frame与av_seek_frame
  10. DSP28379D_双核启动简介