学习笔记三(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下载的标准方法
- 把 B0 接 V3.3(保持 B1 接 GND)。
- 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 工程模板
- 先建立一个工程的根目录文件夹Template,以后工程的其他文件都在这个文件夹里;然后在这个文件夹下建立5个文件夹,建议命名为“USER、OBJ、SYSTEM、FWLIB、CORE”。
- 接下来,打开 Keil,点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚 才建立的文件夹 Template 之下的 USER 子目录,同时,工程取名为 Template 之后点击保存,我们的工程文件就都保存到 USER 文件夹下面。
- 接下来会出现一个选择 Device 的界面,选择我们的芯片型号,这里我们定位到 STMicroelectronics 下面的 STM32F407ZG(探索者的板子选这个)。我们选择 STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZG,然后点击OK,然后会有一个对话窗不用管直接关闭。
- 将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。 打开官方固件库包: \STM32F4xx_DSP_StdPeriph_Lib_V1.0\Libraries\STM32F4xx_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件。
- 将固件库包里面相关的启动文件复制到我们的工程目录 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 目录下 面。
- 复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录: 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 目录下面。
- 下面我们将 这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items。
- 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 系列才用到, 所以要把它删掉。
- 用同样的方法,将 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, 回到工程主界面。
- 接下来我们要在 MDK 里面设置头文件存放路径。这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错 头文件路径找不到。首先点击工程主界面第三行工具栏中像魔术棒一样的图标,然后有一个弹窗,点击 C/C++ 选项,然后单击 Include Paths 后面的三个点按钮,然后有一个弹窗,点击方框按钮再点击下面三个点按钮,开始添加头文件路径。这里我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。然后点击OK,接下来要添加一个全局宏定义标识符,在 Define 输入框输入: STM32F40_41xxx,USE_STDPERIPH_DRIVER 然后点击OK。
- 接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。 方法是点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”, 然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上。点击Ok。
- 我们要将 USER 分组下面的 stm32f4xx_it.c 文件内容清空。或者删掉其中的 32 行对 main.h 头文件的引入以及 144 行 SysTick_Handler 函数内容。
- 到这里,一个基于固件库 V1.4 的工程模板就建立完成,同时在工程的 OBJ 目录下面生成了对应的 hex 文件。
- 系统时钟的配置,这在我们的系统时钟章节 4.3 会详 细讲解,这里我们要修改 System_stm32f4xx.c 文件,把 PLL 第一级分频系数 M 修改为 8,
这样达到主时钟频率为 168MHz。同时,我们要在 stm32f4xx.h 里面修改外部时钟 HSE_VALUE 值为 8000000Hz,因为我们的外部高速时钟用的晶振为 8M。 - 实际上经过前面的步骤,工程模板已经建立完成。ALIENTEK 提供 的实验中,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay, 存放的是我们每个实验都要使用到的共用代码,该代码是由ALIENTEK 编写,引入到工程中, 方便后面的实验建立工程。首先,打开任何一个固件库的实验,可以看到下面有一个 SYSTEM 文件夹,比如我们打开我们的实验 0 Template 工程模板的工程目录如下:可以看到有一个 SYSTEM 文件夹,进入 SYSTEM 文件夹,里面有三个子文件夹分别为 delay,sys,usart,每个子文件夹下面都有相应的.c 文件和.h 文件。我们将 SYSTEM 文件夹和里面 的三个子文件夹复制到我们工程根目录中。接下来要将这三个目录下面的源文件加入到我们工程,同时将头文件路径加入到 PATH 中。
至此工程模板已经全部建立完成。
基于寄存器新建工程模板
- 和基于固件库新建工程模板前三个步骤一样。
- 从我们的寄存器版程序源码找一个实验的USER文件夹下找到启动文件startup_stm32f40_41xxx.s 复制到我们新建的USER下面,在USER下新建一个text.c文件。然后将对应的SYSTEM文件夹下的文件复制到我们的文件夹,然后将这些文件添加到我们的工程中。并设置头文件路径。具体步骤和上面一样。
- 点击魔术棒,打开 Target 选项卡,在 Code Generation 里面,选择 Use FPU,MDK 默认 STM32F4 外部晶振为 12M,我们板子用的 8M,所以这里设置为 8Mhz。
- 接下来要添加一个全局宏定义标识符,在 Define 输入框输入: STM32F40_41xxx 然后点击OK。
- 点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”, 然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上。点击Ok。
- 其他步骤和上面的步骤基本一样。
至此我们的工程模板已经基本完成。
学习笔记三(STM32串口程序下载新建工程模板)相关推荐
- STM32学习笔记(三) STM32的GPIO的深入学习
STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置.STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32 ...
- 使用CH340串口模块对STM32进行程序下载
使用CH340串口模块对STM32进行程序下载 一.接线 二.利用FlyMcu进行STM32程序下载 1.STM32配置 2.FlyMcu配置 一.接线 CH340 STM32 VCC VCC GND ...
- 从零开始学习STM32(一)—— 新建工程模板
从零开始学习STM32(一)-- 新建工程模板 前言 准备工作 软件下载 必要文件下载 新建工程 结语 前言 从零开始学习STM32系列将由浅入深,和大家一起走进STM32的世界. 本系列的学习是基于 ...
- 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 个重要概念 ...
- python3常用模块_Python学习笔记三(常用模块)
Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...
- Spring框架学习笔记(三)(AOP,事务管理)
Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...
- MySQL学习笔记(三)查询
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...
- 【AngularJs学习笔记三】Grunt任务管理器
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
- 10-1Python学习笔记 10-2C语言学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识
10-1 Python学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识, 其中每一行都以"In Python you can"打头. 将这 ...
最新文章
- 解决pip安装报错:is not a supported wheel on this platform
- Linux文件内容查看相关命令
- 【转载】x86和x64
- 51.1AP!单阶段检测器的新纪录,TOOD:即插即用的检测器换头术,显著提升性能
- 03_Android项目中读写文本文件的代码
- Fat Jar Eclipse Plug-In Tutorial
- Chrome 开发者工具 live expression 的用法
- chrome主题_谷歌Chrome将很快允许用户创建自定义主题
- linux+应用程序高级编程,linux-----shell高级编程----grep应用
- Spark提交任务到集群
- 限行查询API_路帮网
- 【数据分析】单因素方差分析(含MATLAB和Python实现)
- 飞塔(FortiGate)配置IPSec
- 苹果企业证书发布ipa,使用gitee存放plist文件
- 记录一下NotImplementedError: Cannot convert a symbolic Tensor的解决办法
- 王力宏 谭维维-缘分一道桥 【超品质MP3】
- Algorithm Problem:Greed
- 关于商商城商品表设计(二)
- 【1191】流感传染
- 拥有Adobe国际认证证书,能闯出一个怎样的未来?