Keil(STM32)开发环境-(5)烧写测试程序

本文详细介绍了STM32程序的烧写过程,包括使用Keil的三种编译模式:Translate、Build和Rebuild。重点讲解了ST-Link下载器的使用,以及通过SWD接口进行程序下载的方法,强调了正确连接开发板和下载器的重要性,并提供了驱动安装及下载程序的步骤。
摘要由CSDN通过智能技术生成

5、 烧写测试程序

5.1、编译目标文件

在烧写程序之前,需要对目标工程进行编译链接,这里keil有三种编译模式。
分别是【Translate】、【Build】、【Rebuild】。

38.png
图 -1 按钮在界面中的位置

(1)【Translate】

编译当前源文件,这个过程中会进行语法错误的检查,但是不生成可执行文件,一般在修改.c文件后,点击这个按钮,用来查看修改后的程序是否有语法错误。
因为只是编译当前的单个文件,所以编译速度快。

(2)【Build】(最常用)

编译工程中的目标文件,目标文件通常指上次修改的文件以及其他依赖于这些修改过的文件的模块,同时重新链接生成可执行文件。如果工程之前没有编译链接过,它会直接调用【Rebuild】进行全部工程所以文件的编译链接。

(3)【Rebuild】

重新编译工程中所有源文件,于上次编译的结果无关,不管工程的文件之前有没有编译过,都会对所有文件重新进行编译并生成可执行文件。
因此花费时间较长,平时使用较少。

5.2、程序下载/烧写程序

(1)ST-LINK V2下载器介绍

ST-Link是用于STM8和STM32微控制器的在线调试器和编程器,也就是下载器。ST-Link具有SWIM、JATG/SWD等通信接口。

  • SWIM:Single Wire Interface Module,单线接口模块。
  • JATG:Joint Test Action Group,联合测试工作组,是一种国际标准测试协议。
  • SWD:Serial Wire Debugging,串行调试接口。
    其中我们使用SWD方式进行程序下载与调试。

39.png
图 5-2 ST-Link下载器正视图
值得注意的是,在正面的接口标识层有一个白色实心框,这对应着后面的引脚,可以通过这种方法确定引脚位置和名称(如下图)。

40.png
图 5-3 ST-Link下载器侧视图

(2)开发板下载接口介绍

在下图中框选的位置就是利用ST-Link下载器下载程序的4个引脚。

41.png
图 5-4 开发板正视图
其中各自的名称在旁边的电路板丝印已经被写明,为了更加直观,在下图中为大家标注出来。

42.png
图 5-5 开发板上的SWD下载引脚

(3)开发板与下载器连接方法

连接方法就是使用杜邦线,与双方引脚对应连接。

  • 下载器的SWDIO引脚 --连接-- 开发板的SWDIO引脚
  • 下载器的GND引脚 --连接-- 开发板的GND引脚
  • 下载器的SWCLK引脚 --连接-- 开发板的SWCLK引脚
  • 下载器的3.3V引脚 --连接-- 开发板的VCC引脚
    值得注意的是,他们的引脚并不是一一对应的,所以需要打乱杜邦线的顺序进行连接,为了避免引起歧义,就不放上图片进行展示。
    一定要正确连接,错误连接可能导致开发板或下载器烧毁!
(4)安装st-link驱动
  1. 右键计算机,查看本系统是64还是32

43.png
图 5-6 查看本机系统
2. 下载的st-link驱动安装包,双击安装

44.png
图 5-7 ST-Link驱动安装程序
3. 如果安装成功,完成电脑-下载器-开发板连接后,下载器上的红色指示灯会常亮。如果安装失败,下载器上的红色指示灯会闪烁,请尝试重新安装。

(5)在Keil软件中点击下载

连接完毕后,即可点击下载按钮进行下载。

45.png
图 5-8 按钮在界面中的位置
出现此提示说明下载成功。

46.png
图 5-9 程序下载成功

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主要内容: 一楼: 一. 简单原理介绍 二楼: 一. 复制代码, 建立并配置工程 二. 修改部分代码 三. 测试结果 (看不到图片的可以下载4楼的word文档, 移植成功的程序代码在6楼) 前段时间发了这个教程: http://www.armbbs.net/forum.php?mod=viewthread&tid=10423 把标题定为教程实在是我自夸了点, 其实应该算是我学习的总结吧, 写份文档, 自己以后忘了也有个参考, 又可以帮助和我卡在同一个问题的新手, 其实我也是新手, 新手教新手, 不知道会不会误导大家了... 一. 简单原理介绍 那个教程里面主要讲了一些简单的配置, 原理没有仔细介绍, 其实当时我也不太懂, 当时看重的是实际效果, 原理嘛, 在我们从SB到NB的过程会慢慢理解的, 现在稍微理解了一点, 在写这篇教程之前简单介绍一下之前的存储器的地址配置的问题吧, 也和等会移植的内容有关啦, 耐心看吧: TQ2440开发板算起来应该是有3个片外存储器吧, 一个是 nand flash, 一个是 nor flash, (这两个应该算是ROM了), 还有一个SDRAM (就是RAM啦, SDRAM是个什么东西, 还没学数电...不知道...) 首先,2440的程序代码是可以存放在SDRAM里面运行的.从汇编上讲, 就是程序指针(PC指针, 程序计数器, 各种称呼, 指向一下条要执行的程序代码 的一个寄存器)可以指到SDRAM的内存单元. 然后再说nor flash, 2440的程序也可以在nor flash里执行, 原因我不清楚. 从nor flash启动的时候, PC指向的0地址就是nor flash的首地址, 就是说nor flash 的首地址映射到内存的0地址, 对比一下SDRAM, SDRAM在2440是映射到0x3000 0000 地址 然后是nand flash, nand flash 也是映射到了 0地址, 为样就和nor flash有冲突了, 所以就有了从nor 启动和从nand启动的区别了, 然后我又想说, 其实nand本身是不能运行程序的(这里的意思是说, 因为nor flash本身为了容量大和本身的接口, 是不能向CPU不断的快速的输送指令的, 我的理解就是这样, 大家可以去参考nor 和 nand 的区别的资料), 既然我说nand不能运行程序, 那个地址映射有什么意义? 是这样的, 2440从nand启动的时候, 它内部的nand flash控制器会把前4k的代码复制到内部的缓存去执行, 而这些缓存就是对应地址的0单元开始. (其实这个直接去参考2440 datasheet 上的地址映射会比看我在这里瞎说的强...) 刚才说了从nand启动的时候是把前4k的代码复制到内部的缓存去执行的, nand flash的容量远远远远大于4K呀, 不充分利用就太浪费了...如果你的程序超过4K了怎么办? 很简单, 你在前4K的程序里, 利用什么for啊while之类的把剩下的代码复制到SDRAM里面去, 复制完了以后后再用一条汇编指令 ldr (用来跳转到绝对地址的, 类似C语言的goto, 但有点区别) 跳到SDRAM里面继续执行, (因为前4K的代码在内部缓存运行的时候对应的地址是从0-4K的, SDRAM是的地址是从0x30000000开始的, 你不跳, 就等着系统崩溃吧). 刚才说的这些工作你可以自己写代码, 也可以移植个boot loader来帮你做, 操作系统就是从boot loader开始的...这部分我没学, 不说了... 那么ldr指令是怎么跳转的? 在2440init.s里有这两句, ldr pc, =copy_proc_beg copy_proc_beg 类似C语言的 goto copy_proc_beg copy_proc_beg: 注意, 我说的是类似, 从汇编层面是讲, 是有很大的不同的, 我比较懒, 就不详细解释了 上面的ldr 的作用就是: 你的工程最后生成可执行的代码里面, copy_proc_beg 对应的地址(绝对地址, 就是说应该放在存储器的哪个位置), 会被复制到PC指针, 所以我们在nand启动的工程配置里, rom应该是这样的: srart(开始): 0x30000000 size(大小, 我这里是随便设置的): 0x800000 抱歉, 我之前的教程里的生成下载到nand的bin文件的那部分配置讲错了, 当时并不理解, 不过, 小于4K的程序还是可以用的了^_^ //////////////////////////////////////////////////////////////// 补充: 其实教程1那里的只有把ROM配置成从0x0开始才是可以正常运行的, 原因是用了KEIL给的启动代码, 有一句是这样的 IMPORT __main ; 相当于extern void main() LDR R0, =__main ; 跳到main函数的绝对地址去执行 如果rom 设置 0x3000 0000 开始的话, 教程1的代码里又没有进行搬移的工作, 跳到SDRAM里去, 没有代码, 程序就不能正常运行了 //////////////////////////////////////////////////////////////// 这样, 编译器生成以后, 标号copy_proc_beg对应的地址是0x3*******, 也就是在SDRAM里面, 然后你在运行前4k的程序的时候PC指针的内容是0x00000***, 完成之前说的代码从nand flash到SDRAM的搬移工作后, 用一条 ldr pc, =copy_proc_beg 指令, 把PC指针的内容改成0x3*******, 就跳转到SDRAM里面运行了 基本的原理讲到这里, 洗澡去, 等会再进入正题...顺便想一下有没有需要补充的... //////////////////////////////////////////////////////////////// 补充: 用JLINK在SDRAM调试的时候, ROM配置也是 srart(开始): 0x30000000 size(大小, 我这里是随便设置的): 0x800000 然后你按下调试键的时候, 代码由J-LINK帮你复制到SDRAM了, 然后再把PC指到0X30000000开始执行, 这J-LINK的这些工作是由一个初始化文件(教程1里配置的时候从keil的安装目录那边复制过来的文件)指导完成的. 如果你在调试的时候按了这个键 就把单片机给复位了, 然后PC指针指向的地址就是0, 如果你再点运行, 除非你的nand flash 或 nor flash里面有程序, 要不然是不会正常运行的, 即使有程序, 也不能正常调试, 你要把PC指针改回0x30000000才可以让2440继续跑你要调试的程序, (双击PC又边的数字 0x00000000就可以改他的值了) 关于nor flash的设置, 没什么好讲的了, 从0开始执行, 嗯, 就这样了 //////////////////////////////////////////////////////////////// 更正:经29楼网友指出,原文的这一段是错误的,ARM9是哈佛结构的,已经删了 “2440算是冯诺什么曼结构的计算机, 通俗的说, 2440的程序代码是可以放在RAM里面执行(我们的PC机也是这种类型的), 不同于51, 也许你会注意到, 51的程序是不能在内部的RAM里面执行的, 现在的51单片机的程序一般是存在片内的ROM里的, 传统的51的内部RAM顶多也就那么256个字节, 变量都存不了几个, 运行个鬼程序, 51单片机算是哈佛结构的.”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值