当前课程知识点:智能车制作:嵌入式系统 > 第四章 MCU外设与开发 > E0.2 实验零 体验一个例程的编译与下载 > Video
各位同学大家好
我是清华大学工程物理系的曾鸣老师
欢迎大家继续回到我们第零次实验的课程
那么在这个单元里呢
大家一看我电脑 开发板
还有调试工具都支起来了
跟前面两个单元不一样
那么前面两个单元我带着大家认识了一下
我们的硬件开发工具
以及带着大家装了一下我们的软件工具链
那么这个单元就来检验我们的工具链有没有装好
能不能正确的把一个工程文件编译
下载到我们的板子里实际运行起来
也就说第零次实验
我们要带着大家真真正正的去体会这么一个
开发的过程
来帮助大家把工具链真的跑起来
那么我们要进行这样一个开发
就像我现在桌子上所放的
我们要有电脑
要有我们的板子和调试器
那么他们的连接关系呢就跟这张图一样
那么我们在开发板和调试器
都通过一个USB的电缆分别与我们的电脑相连
那么相连的时候这两个电缆是不一样的
一个是micro USB
一个是标准的方口的USB口
相信大家肯定不会插错
那么在我们的开发板上micro的USB口有两个
一个只取电
一个除了取电 还可以进行UART的通讯
那么考虑到我们后面实验内容
我们一般都会把它使用有UART通讯功能的USB口
来给我们开发板供电
那么我们的调试器和我们开发板之间会用一个
两个扁平电缆当中比较细比较软的那一根
来进行连接
我这里专门用一个红色的区域
标识了一个注意事项
就是这两个双排的插座
它都在丝印层
用白色的标识标出了引脚1的位置
所以大家在连接的时候呢
尽量注意用你的扁平电缆当中
有红色标记的这个1号线
跟这个引脚1的位置一一对应
同样在调试器的这一端
也使用跟他尺寸匹配的这个插座
正确的插入一号引脚的位置
那么如果大家不小心插反了
从设计上来讲应该是不会烧毁电路的
但是会导致你的调试器无法正确的连接
和找到这样一个开发板的微控制器芯片
那么如前面所示
当大家把自己的开发平台像这样连接好
特别是调试器的USB线插入电脑之后
那么作为一个检验我们在电脑的设备端
也就设备管理器里
可以看到这样一个设备已经被正确的识别出来了
比如说我们现在切换到设备管理器
在我的电脑上如窗口中所示
就应该看到有一个便携设备类下
有一个JLINK设备
这是我们调试设备
同时在端口的串口与并口当中
有一个JLINK的CDC的USB虚拟串口识别出来
我们也可以单击右键
更改他所识别出来的串口号
便于我们后面进行一些串行通讯的实验
那么如果这两个设备正确识别
我们工具链就搭建成功了
那么接下来在这个单元里
要给大家做的第一个步骤呢
是把我提供给大家的MKL25Z128测试例程
这样一个程序给解包
导入到我们的CodeWarrior里头
尝试编译一个老师给的已经写好的程序
看看我们板子能不能正常的运行起来
同时用这个程序测一测
我们的板子是否工作正常
那么它的工作步骤呢是这样的
我们来切换到D盘
任意一个目录来做几个准备性的工作
第一个工作呢
是把我们下载下来的源码包放到任意一个目录里
我们对它进行解压缩
那么我们解压缩以后
就会得到一个解开的目录文件
如果我们进去会发现这个目录里有大量的源码
和工程文件
是一个完全已经写好的这个微控制器的程序工程
那么我们待会会教大家
如何将这样一个工程导入到我们CodeWarrior
以及日后我们自己如何备份
这样一个完整的写好的程序把它备份出来
那接下来我们回到比如说我们D盘的根目录
或者任意一个你喜欢的目录
那么我们建一个新的子目录
这个目录是个空的
那么这将是我们未来使用CodeWarrior进行开发的
一个工程空间或者叫Workspace
工作区
那么根据个人的喜好
比如我自己就会给它起名字叫
Ming_Workspace
那么在这个起名的时候大家注意
尽量在某一个盘的根目录来制作
那么为了初学者避免出问题
一定注意你的文件名
你这个文件夹的名字不要使用任何中文字符
也尽量不要有空格
像我这样比较简单规范的
一个连续字符的英文名称的文件夹是最好的
那么这个目录将会成为我们CodeWarrior里头的
项目的工程空间
换言之 日后我们的CodeWarrior里头
可以开发多个工程文件
每一个项目 每一个应用程序
都会在这个目录里
自动形成一个新的子目录
也就是一个工程一个子目录
我们日后进行备份和打包的时候
只用把对应的子目录打包备份出来就可以了
那么有了这一步
我们接下来启动我们的CodeWarrior
切换到CodeWarrior的界面
那么如果大家是第一次启动CodeWarrior
或者像我这样切换CodeWarrior的Work space
都会看到这样的一个对话框
他询问你请你select a workspace
选择一个工作区域
那么我们刚才建好了一个崭新的空目录
我们将它指向我们刚才所建的这个目录
比如说在D盘ming_workspace我们点确定
那么这样的话我们的CodeWarrior
就会将这个目录作为接下来所有工作的主目录
我们所新建的所有工程都会在里头
形成一个个独立的子目录
我们点一下OK
那么这时候发现CodeWarrior退出了
它自动进行一次重启
最主要呢 是要在这个Workspace里
进行一些基础文件的构建
并且重新启动指向这个目录
我们稍等片刻
等这个CodeWarrior的启动
那么我们CodeWarrior已经完成它的启动
如果把窗口最大化
我们会发现这是一个几乎全空的界面
那么未来这几个区域里
将分别发挥工程管理
代码显示和错误提示的作用
那么我们现在来尝试导入刚才所说的
一个已有的工程文件
我们点files菜单
向下滑动可以看到有一个选项import导入
选择导入后会弹出个对话框
有若干种资源和源码文件可以被导入
我们选择其中的第一类
general里头的第二种
existing projects into Workspace
也就是向工程区间
导入一个已经存在的项目文件
然后点下一步 next
这个时候他会询问你要在哪一个目录
去寻找已经存在的工程文件
大家记得已经刚才提示过从网上下载过
老师提供的测试程序
并且把它解包
所以我们将目录指向
刚才我们解包程序的那个目录
比如download底下的MKL25 Blazar test
然后选中这个目录以后
我们点确定
这个时候我们会发现CodeWarrior的帮助
已经自动在这个目录里找到了一个存在的project
它的名字就是KL25 Blazar test
我们在他前面确保打上勾
选中这个文件
同时我们把底下有一个选项叫
copy project into Workspace这个勾打上
表示说我们接下来的编辑都不改变
刚才这个解包的目录原始位置的文件
而是将这个目录完整复制到
我们新建的工作区域里
成为一个新的子目录
来对他进行编辑和修改
然后点finish
这个时候会有对话框
它完成了将这个工程文件导入和复制的所有工作
这个时候我们回到了CodeWarrior界面
然后我们会看到在CodeWarrior界面的左上角区域
这是我们工程文件的管理区
那么管理区里有若干个目录和文件
我们看到它的最下方一个是sources也就是源代码
这个时候我们把它点开
会发现因为这是一个导入的工程
已经有了大量的源文件
其中大家最最熟悉的一个就是main.c文件
这个时候我们双击
我们就会发现
main.c文件会在右侧的代码编辑窗口被打开
里头有我们熟悉的main函数
那么这样一个编辑界面当中
左边是工程的管理区域
右边是代码区
下面是编译的调试报错区
如果大家还记得我们在第四章的
第二单元里给大家讲过
这个嵌入式微控制器开发背后的
各种基本原理的话
我们会在这个工程区域里
找到我们熟悉的各种文件
比如是指定单片机型号所有寄存器定义的文件
在工程文件的project headers里头
那么我们打开它
可以看到跟我们所使用单片机型号
对应的MKL25Z4也就是Z128的头文件
说明了所有的寄存器
那么在我们链接和编译的装配图里头
比如我们打开第二类
project settings
我们会发现第二类叫linker files
那么我们之前所讲过的
关于flash和RAM在哪的装配文件
其实在这个区域
那么下面第三个类别startup code里头
我们可以找到关于这个程序
如何加载复制和初始化内存
最终跳转到main函数的那一段起始代码
都是在这里
所以说除了后面的main函数
这些真正的用户程序
刚才讲到这些寄存器还有装配图如我所说
都是由CodeWarrior开发工具自动为大家生成的
那么在这样一个工程文件里头
我们怎么来编译它呢
非常简单
我们看一看我们的工具栏
左上角有一个小锤子的标志
如果指向它
它会说这是Build整个project
也就是从编译到链结
我们点击一下
这个时候会弹出一个进度条
尝试对我们所有源码文件进行编译和链接
乃至最终得到可以下载的应用程序
那么因为这是一个导入的工程
它没有任何的错误
我们可以看到这个进度条可以顺利的走完
那么一旦它走完之后
所有的提示信息
会在我们这个界面的下方区域
提示区域给出
可以看到我们现在没有任何的error
只有9个warning
那么这个在日后大家可以看一看是什么含义
那么因为没有error我们的编译和build
实际上是成功的
我们下一个步骤来尝试
将这样一个程序下载到我们板子上
那么下载到板子上这个功能
同样在工具链条里是有一个独特的按纽的
也就是我现在所指向的这个绿色甲壳虫按纽
这个按纽它的含义是debug
也就是除虫
那么包含了对于程序的调试
和程序烧写到微控制器的所有功能
那么我们可以点它右边的小箭头向下
可以看到有一个叫Debug configurations
默认情况下我们不需要做这个操作
但是更多的是一个确认工作
然后我们可以发现在这个操作里
我们可以看到我们现在所使用的调试工具
是我们现在所配置的JLINK工具
那么相应的我们可以通过edit这个配置
来修改使用不同的下载和调试工具
如果我们关闭这个窗口直接点小甲壳虫的图标
就进入了程序的下载和烧写流程
那么如果我们要把这个程序下载到我们开发板里
并且开始调试或者让它运行
那么我们就直接点一下这个甲壳虫图标
那么点完这个图标后
我们可以在界面的右下角看到一个进度条
同时会发现整个界面完成了一次比较大的切换
弹出了一个对话框
这个对话框是JLINK调试工具的一个提示信息
我们可以点accept 接受
也可以把左边的勾打上
提示他下次不再提示类似的这种提示框
那么这个时候
我们看到右下角的进度条在进行行走
那么我们程序正在逐渐的通过我们的调试器
烧写到我们的微控制器里
那么现在这个界面里
已经完成了程序的烧写一切就绪
我们会发现我们切换到了一个新的调试界面
我来简单介绍一下这个调试界面
在这个调试界面里
我们中间区域的左边
是我们正在调试程序的C语言代码
中间区域的右边是我们正在调试程序
一条条逐条对应的汇编指令
所以上过第二章节的课的同学可以回忆一下
我们实际上可以做一做头脑体操
看看我们写的C语言对应的汇编是怎样的
然后左上角是我们的调试进程
右上角呢分别有变量的值 断点
任意一个寄存器和内存任意地址的值
可以由我们再通过调试器随意查看
所以我们日后调试的时候
可以通过这个窗口来随意查看
我们微控制器现在任意地址上当前的值
然后我们整个这个调试界面
是这个开发工具的一个tape页
如果我们想切换回刚才的代码页
只要在右上角点C/C++这个位置
就切换回来代码编辑的界面
而如果我们继续去点debug
就会回到刚才的调试页面
那么现在是一个下载就绪的程序
如果想让我们的程序运行起来
那么非常地简单
只用在对话框里头小小的点一下这个播放按纽
或者说是运行按纽
就会发现我们的程序已经运行起来了
这个时候没有提任何的错误信息
这个程序现在是烧写到了微控制器的flash
也就日后断电的时候
这个程序仍然上电能够自动开始运行
除了我们开始运行程序的播放键
那么我们其实旁边还有暂停和最终停止调试
这样两个按纽
所以我们可以通过点红色的方框
停止这一次调试
完成调试工作
回到代码编辑的页面
继续进行代码的编辑和修改
好 大家看到我们的程序呢
在我们的开发板上已经运行起来了
那么这个程序的基本功能
可以帮助我们测试这个板子的
所有的硬件模块的是否运行正常
左边的四个按键我们依次按下
会发现底部的四个灯会依次点亮
在任意一个灯点亮的情况下
如果我们按右边四个按键
我们会发现这个灯的颜色会发生变化
在红蓝绿当中进行切换
那么通过这种方式
我们可以检查这八个按键
和这四个灯是否工作正常
如果我们调整右上方的旋钮
可以听到一个蜂鸣器的音调
发生逐步的变化
从而检查我们的旋钮
和左下方的蜂鸣器工作是否正常
我们的数码管可以看到有六位数字
左边三位和右边三位
分别是转化为三位数的
读取的当前的光线传感器和温度传感器的值
那么有兴趣同学也可以改变他们的测量量
来看看效果
多说一句呢
我们这样一个测试程序
不仅仅测试了板子上的按键和显示
也对板子上传感器的测量
以及串口通讯进行了测试
如果大家使用windows自带超级终端这样一个工具
可以进行串口的连接
来进行数据读写检验这个板子的串口是否正确
超级终端程序在windowsXP里是自带的
如果用的是windowsXP之后的操作系统
也可以从我们网络上直接下载这样一个工具
来进行使用
我们正确的设置串口编号和波特率
就可以与我们板子进行连接
这时候注意USB连接的
应该是板子上的UART的USB口
那么在超级终端里我们应该看到这样的字符串
它分别代表了我们这个板子
所读取到的加速度传感器的三轴的运动值
可以供大家来试一试
-1.1 课程概览
--Video
-1.2 进入嵌入式系统的世界
--Video
-1.3 如何学好嵌入式系统
--Video
-2.1 计算机的基本概念、发展历史
--Video
-2.2 从晶体管到CPU
--Video
-2.3 概念CPU、微控制器MCU和嵌入式系统
--Video
-2.4 八卦计算机史
--Video
-2.5 不同领域、不同系列的嵌入式系统
--Video
-2.6 ARM历史与MKL25Z128 MCU
--Video
-3.1 CPU的基本结构和运行机制
--Video
-3.2.1 堆栈的概念
--Video
-3.2.2 堆栈的概念-头脑体操
--Video
-3.3.1 ARM的体系结构
--Video
-3.3.2 ARM的体系结构-头脑体操
--Video
-3.4 中断的概念和机制
--Video
-3.5 中断子程的概念和编程
--Video
-3.6 复位、时钟、存储器和总线
--Video
-3.7 小结:MCU的总体结构和程序运行机制
--Video
-4.1 第一种外设:IO
--Video
-4.2 IO外设的编程实操-点亮LED
--Video
-4.3 IO外设的进阶知识
--Video
-4.4 嵌入式开发的基本概念与工具链
--Video
-4.5 嵌入式开发的进阶知识
--Video
-4.6 嵌入式开发中的C语言(上)
--Video
-4.7 嵌入式开发中的C语言(下)
--Video
-E0.1 实验零 开发板的初步认识与工具链的安装
--Video
-E0.2 实验零 体验一个例程的编译与下载
--Video
-E0.3 实验零 编写第一个程序:点亮核心板LED
--Video
-E1 实验一 点灯秘籍
--Video
-5 智能车视角的嵌入式设计
--Video