学习笔记三(STM32串口程序下载&新建工程模板)_stm32串口助手下载-程序员宅基地

技术标签: stm32  学习  单片机  

STM32串口程序下载

STM32F4 的程序下载有多种方法:USB、串口、JTAG、SWD 等,这几种方式,都可以用来给STM32F4下载代码。

利用串口给STM32下载程序

STM32 的串口下载一般是通过串口 1 下载的,但探索者 STM32F4 开发板,不是通过 RS232 串口下载的,而是通过自带的 USB 串口来下载。看起来像 是 USB 下载的,实际上,是通过 USB 转成串口,然后再下载的。

首先要在板子上设置一下,在板子上把 RXD 和 PA9(STM32 的 TXD),TXD 和 PA10(STM32 的 RXD)通过跳线帽连接起来,这样我们就把 CH340G 和 MCU 的串口 1 连接上了。这里由于我们的开发板自带了一键下载电路,所以我们并不需要去关心 BOOT0 和 BOOT1 的状态,但是为了让下下载完后可以按复位执行程序,应该把 BOOT1 和 BOOT0 都设置为 0。

Stm32启动模式

STM32直接通过两个引脚Boot0和Boot1设置启动模式

启动模式选择引脚

启动模式

说明

BOOT1

BOOT0

x

0

主闪存存储器

主闪存存储器被选为启动区域

0

1

系统存储器

系统存储器被选为启动区域

1

1

内置SRAM

内置SRAM被选为启动区域

STM32下载的标准方法

  1. 把 B0 接 V3.3(保持 B1 接 GND)。
  2.  2, 按一下复位按键。 通过这两个步骤,我们就可以通过串口下载代码了,下载完成之后,如果没有设置从 0X08000000 开始运行,则代码不会立即运行,此时,你还需要把 B0 接回 GND,然后再按一次复位,才会开始运行刚刚下载的代码。

一键下载方法

一键下载电路,则利用串口的 DTR 和 RTS 信号,分别控制 STM32 的复位和 B0,配合上位机软件flymcu,设置:DTR 的低电平复位, RTS 高电平进 BootLoader,这样,B0 和 STM32 的复位,完全可以由下载软件自动控制,从而实现一键下载。 接着我们在 USB_232 处插入 USB 线 并接上电脑,打开flymcu。

 

 用 flymcu 软件打开 OBJ 文件夹,找到对应的 hex 文件 Template.hex,打开并进行相应设置 后,如图所示,Stm32F4对于高的波特率下载成功率低所以应该将波特率设置不超过76800,在如图的bps处设置,然后点击“开始编程(P)“这个按钮,一键下载代码到 STM32 上了。

等待下载成功后打开串口调试助手XCOM ,根据情况选择串口,设置波特率为 115200,会有开发板发回来的信息,接收到的数据和我们期望的是一样的,证明程序没有问题。至此,说明我们下载代码成功 了,并且从硬件上验证了我们代码的正确性。


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

  1. 先建立一个工程的根目录文件夹Template,以后工程的其他文件都在这个文件夹里;然后在这个文件夹下建立5个文件夹,建议命名为“USER、OBJ、SYSTEM、FWLIB、CORE”。
  2. 接下来,打开 Keil,点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚 才建立的文件夹 Template 之下的 USER 子目录,同时,工程取名为 Template 之后点击保存,我们的工程文件就都保存到 USER 文件夹下面。
  3. 接下来会出现一个选择 Device 的界面,选择我们的芯片型号,这里我们定位到 STMicroelectronics 下面的 STM32F407ZG(探索者的板子选这个)。我们选择 STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZG,然后点击OK,然后会有一个对话窗不用管直接关闭。
  4. 将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。 打开官方固件库包: \STM32F4xx_DSP_StdPeriph_Lib_V1.0\Libraries\STM32F4xx_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件。
  5. 将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。 打开官方固件库:\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templat es\arm 下面,将文件 startup_stm32f40_41xxx.s 复制到 CORE 目录下面。然后定位到目录 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ , 将 里 面 的 四 个 头文件 : core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下 面。
  6. 复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录: STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面 的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。这两个头文件是 STM32F4 工程非常关键的两个头文件。然后 进入目录\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 目录下面。
  7. 下面我们将 这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items。
  8. Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后选择需要添加文件的 Group,比如选 择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\FWLIB\src 下面,将里 面所有的文件选中,然后点击 Add,然后 Close.(如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用 GPIO,只用添加 stm32f4xx_gpio.c 而其他的可以不用添加。全部添加进来是为了后面方便,不用每次添加,这样的坏处是工程太大,编译起来速度慢。)这里有个文件 stm32f4xx_fmc.c 比较特殊。这个文件是 STM32F42 和 STM32F43 系列才用到, 所以要把它删掉。
  9. 用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 startup_stm32f40_41xxx.s(默认添加的时候文件类型为.c,也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,需要选择文件类型为 All files 才能看得到这个文件 ),USER 目录下面需要添加的文件为 main.c,stm32f4xx_it.c, system_stm32f4xx.c。 这样需要添加的文件已经都添加到我们的工程中去了,最后点击 OK, 回到工程主界面。
  10. 接下来我们要在 MDK 里面设置头文件存放路径。这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错 头文件路径找不到。首先点击工程主界面第三行工具栏中像魔术棒一样的图标,然后有一个弹窗,点击 C/C++ 选项,然后单击 Include Paths 后面的三个点按钮,然后有一个弹窗,点击方框按钮再点击下面三个点按钮,开始添加头文件路径。这里我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。然后点击OK,接下来要添加一个全局宏定义标识符,在 Define 输入框输入: STM32F40_41xxx,USE_STDPERIPH_DRIVER 然后点击OK。
  11. 接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。 方法是点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”, 然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上。点击Ok。
  12. 我们要将 USER 分组下面的 stm32f4xx_it.c 文件内容清空。或者删掉其中的 32 行对 main.h 头文件的引入以及 144 行 SysTick_Handler 函数内容。
  13. 到这里,一个基于固件库 V1.4 的工程模板就建立完成,同时在工程的 OBJ 目录下面生成了对应的 hex 文件。

  14. 系统时钟的配置,这在我们的系统时钟章节 4.3 会详 细讲解,这里我们要修改 System_stm32f4xx.c 文件,把 PLL 第一级分频系数 M 修改为 8,
     这样达到主时钟频率为 168MHz。同时,我们要在 stm32f4xx.h 里面修改外部时钟 HSE_VALUE 值为 8000000Hz,因为我们的外部高速时钟用的晶振为 8M。
  15. 实际上经过前面的步骤,工程模板已经建立完成。ALIENTEK 提供 的实验中,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay, 存放的是我们每个实验都要使用到的共用代码,该代码是由ALIENTEK 编写,引入到工程中, 方便后面的实验建立工程。首先,打开任何一个固件库的实验,可以看到下面有一个 SYSTEM 文件夹,比如我们打开我们的实验 0 Template 工程模板的工程目录如下:可以看到有一个 SYSTEM 文件夹,进入 SYSTEM 文件夹,里面有三个子文件夹分别为 delay,sys,usart,每个子文件夹下面都有相应的.c 文件和.h 文件。我们将 SYSTEM 文件夹和里面 的三个子文件夹复制到我们工程根目录中。接下来要将这三个目录下面的源文件加入到我们工程,同时将头文件路径加入到 PATH 中。

至此工程模板已经全部建立完成。


基于寄存器新建工程模板

  1. 和基于固件库新建工程模板前三个步骤一样。
  2. 从我们的寄存器版程序源码找一个实验的USER文件夹下找到启动文件startup_stm32f40_41xxx.s 复制到我们新建的USER下面,在USER下新建一个text.c文件。然后将对应的SYSTEM文件夹下的文件复制到我们的文件夹,然后将这些文件添加到我们的工程中。并设置头文件路径。具体步骤和上面一样。
  3. 点击魔术棒,打开 Target 选项卡,在 Code Generation 里面,选择 Use FPU,MDK 默认 STM32F4 外部晶振为 12M,我们板子用的 8M,所以这里设置为 8Mhz。
  4. 接下来要添加一个全局宏定义标识符,在 Define 输入框输入: STM32F40_41xxx 然后点击OK。
  5. 点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”, 然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上。点击Ok。
  6. 其他步骤和上面的步骤基本一样。

至此我们的工程模板已经基本完成。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_64531765/article/details/125009781

智能推荐

基于Kepler.gl 和 Google Earth Engine 卫星数据创建拉伸多边形地图-程序员宅基地

文章浏览阅读965次,点赞18次,收藏21次。现在我们有了 2021 年和 2023 年的 NDVI 数据帧,我们需要从 2021 年的值中减去 2023 年的值以捕获 NDVI 的差异。该数据集包括像素级别的植被值,我们将编写一个自定义函数来根据红色和绿色波段的表面反射率计算 NDVI。在我的上一篇文章中,我演示了如何将单个多边形分割/镶嵌为一组大小均匀的六边形。现在我们有了植被损失数据,让我们使用 Kepler.gl 可视化每个六边形的植被损失。将地图保存为 HTML 文件,在浏览器中打开 HTML 以获得更好的视图。现在我们将调用该函数并使用、

Echarts绘制任意数据的正态分布图_echarts正态分布图-程序员宅基地

文章浏览阅读3.3k次,点赞6次,收藏5次。正态分布,又称高斯分布或钟形曲线,是统计学中最为重要和常用的分布之一。_echarts正态分布图

Android中发送短信等普通方法_android bundle.get("pdus");-程序员宅基地

文章浏览阅读217次。首先要在Mainfest.xml中加入所需要的权限:[html] view plain copyprint?uses-permission android:name="android.permission.SEND_SMS"/> uses-permission android:name="android.permission.READ_SMS"/> _android bundle.get("pdus");

2021-07-26 WSL2 的安装和联网_wsl2 联网-程序员宅基地

文章浏览阅读2.6k次。0、说明最近在学习 Data Assimilation Research Testbed (DART) 相关内容,其软件是在 Unix/Linux 操作系统下编译和运行的 ,由于我的电脑是 Windows 10 的,DART 推荐可以使用 Windows Subsystem For Linux (WSL) 来创建一个 Windows 下的 Linux 子系统。以下的内容主要介绍如何安装 WSL2,以及 WSL2 的联网。1、如何在 Windows 10 下安装WSL具体的安装流程可以在 microso_wsl2 联网

DATABASE_LINK 数据库连接_添加 database link重复的数据库链接命-程序员宅基地

文章浏览阅读1k次。DB_LINK 介绍在本机数据库orcl上创建了一个prod_link的publicdblink(使用远程主机的scott用户连接),则用sqlplus连接到本机数据库,执行select * from scott.emp@prod_link即可以将远程数据库上的scott用户下的emp表中的数据获取到。也可以在本地建一个同义词来指向scott.emp@prod_link,这样取值就方便多了..._添加 database link重复的数据库链接命

云-腾讯云-实时音视频:实时音视频(TRTC)-程序员宅基地

文章浏览阅读3.1k次。ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC)支持跨终端、全平台之间互通,从零开始快速搭建实时音视频通信平台1.返回顶部 1、腾讯实时音视频(Tencent Real-Time Communication,TRTC)拥有QQ十几年来在音视频技术上的积累,致力于帮助企业快速搭建低成本、高品质音视频通讯能力的完整解决方案。..._腾讯实时音视频 分享链接

随便推点

用c语言写个日历表_农历库c语言-程序员宅基地

文章浏览阅读534次,点赞10次,收藏8次。编写一个完整的日历表需要处理许多细节,包括公历和农历之间的转换、节气、闰年等。运行程序后,会输出指定年份的日历表。注意,这个程序只是一个简单的示例,还有很多可以改进和扩展的地方,例如添加节气、节日等。_农历库c语言

FL Studio21.1.1.3750中文破解百度网盘下载地址含Crack补丁_fl studio 21 注册机-程序员宅基地

文章浏览阅读1w次,点赞28次,收藏27次。FL Studio21.1.1.3750中文破解版是最优秀、最繁荣的数字音频工作站 (DAW) 之一,日新月异。它是一款录音机和编辑器,可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊。为方便用户,FL Studio 21提供三种不同的版本——Fruity 版、Producer 版和签名版。所有这些版本都是独一无二的,同样具有竞争力。用户可以根据自己的需要选择其中任何一种。FL Studio21.1.1.3750中文版可以说是一站式综合音乐制作单位,可以让您录制、作曲、混音和编辑音乐。_fl studio 21 注册机

冯.诺伊曼体系结构的计算机工作原理是,冯 诺依曼型计算机的工作原理是什么...-程序员宅基地

文章浏览阅读1.3k次。冯诺依曼计算机工作原理冯 诺依曼计算机工作原理的核心是 和 程序控制世界上不同型号的计算机,就其工作原理而言,一般都是认为冯 诺依曼提出了什么原理冯 诺依曼原理中,计算机硬件系统由那五大部分组成的 急急急急急急急急急急急急急急急急急急急急急急冯诺依曼结构计算机工作原理的核心冯诺依曼结构和现代计算机结构模型 转载重学计算机组成原理 一 冯 诺依曼体系结构从冯.诺依曼的存储程序工作原理及计算机的组成来..._简述冯诺依曼计算机结构及工作原理

四国军棋引擎开发(2)简单的事件驱动模型下棋-程序员宅基地

文章浏览阅读559次。这次在随机乱下的基础上加上了一些简单的处理,如进营、炸棋、吃子等功能,在和敌方棋子产生碰撞之后会获取敌方棋子大小的一些信息,目前采用的是事件驱动模型,当下完一步棋界面返回结果后会判断是否触发了相关事件,有事件发生则处理相关事件,没有事件发生则仍然是随机下棋。1.事件驱动模型首先定义一个各种事件的枚举变量,目前的事件有工兵吃子,摸暗棋,进营,明确吃子,炸棋。定义如下:enum MoveE..._军棋引擎

STL与泛型编程-第一周笔记-Geekband-程序员宅基地

文章浏览阅读85次。1, 模板观念与函数模板简单模板: template< typename T > T Function( T a, T b) {… }类模板: template struct Object{……….}; 函数模板 template< class T> inline T Function( T a, T b){……} 不可以使用不同型别的..._geekband 讲义

vb.net正则表达式html,VB.Net常用的正则表达式(实例)-程序员宅基地

文章浏览阅读158次。"^\d+$"  //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$"  //负整数"^-?\d+$"    //整数"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0..._vb.net 正则表达式 取html中的herf