学习笔记三(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. 其他步骤和上面的步骤基本一样。

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值