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. 其他步骤和上面的步骤基本一样。

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

学习笔记三(STM32串口程序下载新建工程模板)相关推荐

  1. STM32学习笔记(三) STM32的GPIO的深入学习

    STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置.STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32 ...

  2. 使用CH340串口模块对STM32进行程序下载

    使用CH340串口模块对STM32进行程序下载 一.接线 二.利用FlyMcu进行STM32程序下载 1.STM32配置 2.FlyMcu配置 一.接线 CH340 STM32 VCC VCC GND ...

  3. 从零开始学习STM32(一)—— 新建工程模板

    从零开始学习STM32(一)-- 新建工程模板 前言 准备工作 软件下载 必要文件下载 新建工程 结语 前言 从零开始学习STM32系列将由浅入深,和大家一起走进STM32的世界. 本系列的学习是基于 ...

  4. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  5. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  6. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  7. MySQL学习笔记(三)查询

    写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...

  8. 【AngularJs学习笔记三】Grunt任务管理器

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  9. 10-1Python学习笔记 10-2C语言学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识

    10-1 Python学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识, 其中每一行都以"In Python you can"打头. 将这 ...

最新文章

  1. 解决pip安装报错:is not a supported wheel on this platform
  2. Linux文件内容查看相关命令
  3. 【转载】x86和x64
  4. 51.1AP!单阶段检测器的新纪录,TOOD:即插即用的检测器换头术,显著提升性能
  5. 03_Android项目中读写文本文件的代码
  6. Fat Jar Eclipse Plug-In Tutorial
  7. Chrome 开发者工具 live expression 的用法
  8. chrome主题_谷歌Chrome将很快允许用户创建自定义主题
  9. linux+应用程序高级编程,linux-----shell高级编程----grep应用
  10. Spark提交任务到集群
  11. 限行查询API_路帮网
  12. 【数据分析】单因素方差分析(含MATLAB和Python实现)
  13. 飞塔(FortiGate)配置IPSec
  14. 苹果企业证书发布ipa,使用gitee存放plist文件
  15. 记录一下NotImplementedError: Cannot convert a symbolic Tensor的解决办法
  16. 王力宏 谭维维-缘分一道桥 【超品质MP3】
  17. Algorithm Problem:Greed
  18. 关于商商城商品表设计(二)
  19. 【1191】流感传染
  20. 拥有Adobe国际认证证书,能闯出一个怎样的未来?

热门文章

  1. Mysql第三章:存储引擎(MyISAM和Innodb)
  2. CG 超写实眼球 maya 制作
  3. 双亲委派模型为什么要打破双亲委派模型
  4. layui laydate设置最小时间为当前时间,不能选择今天之前的时间
  5. idea整合MBG插件
  6. 陕西省语言文字计算机测试题,陕西省计算机辅助普通话水平测试评分细则(试行)...
  7. 拍马屁是一种学问,更是一种生存方式
  8. 【Python绘图】turtle库乌龟绘图官方文档详细整理
  9. Ubuntu系统下截屏快捷键
  10. 【sfu】ffplay http-flv 拉流测试