购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务七
用串口调试软件查看单片机输出信息

打开串口调试软件,如图1.36所示进行设置。一般地,若台式PC机(或笔记本电脑)有串口,则选择串口“COM1”;若使用的台式PC机(或笔记本电脑)没有串口,则使用USB转串口适配器,如图1.7(b)所示。安装好对应的USB驱动程序后,在“我的电脑”上右击→属性→硬件,查看“设备管理器”中的“端口(COM和LPT)”信息,如显示“通信端口(COM5)”,则将串口号设为COM5即可。

单击“连接”按钮,串口连接成功,如图1.37所示。如串口没有连接成功,注意检查串口连接线是否连接正确,并关掉其他串口调试软件。

图1.36 串口调试软件设置

图1.37 串口连接成功

这时,你在接收区看到了什么?什么也没有!为什么呢?因为当你把执行文件成功地下载到单片机的那个时刻开始,程序就开始运行了:单片机已经向PC发送了信息。你错过了接收,再按一下教学开发板上的“Reset”按键,你将看到调试软件上的接收区显示了一条信息,如图1.38所示。

恭喜你!

如果串口调试终端可以显示信息,则说明你的STM32开发环境都已成功建立,包括硬件连接和软件配置。

图1.38 串口调试终端显示的信息

HelloRobot.c是如何工作的?

例程中前两行代码是HelloRoBot.c所包含的头文件:“stm32f10x_heads.h”和“HelloRobot.h”。这两个头文件在本书的后续章节和任务中都要用到,“stm32f10x_heads.h”文件主要包含STM32库文件的定义,它在编译过程中用来将程序需要用到的标准数据类型和一些标准函数、中断服务函数等包括进来,生成可执行代码。头文件中可以嵌套头文件,同时也可以直接定义一些常用的功能函数。

HelloRobot.h则包含了本例程中以及后面例程中都要用到的几个重要函数的定义和实现,在后面的章节中会进一步讲解,包括:

(1)数据结构的定义;

(2)系统时钟配置函数:RCC_Configuration;

(3)GPIO模式配置函数:GPIO_Configuration;

(4)中断控制配置函数:NVIC_Configuration;

(5)串口1配置函数:USART_Configuration;

(6)将C语言printf库函数输出重定向到串口输出函数:fputc;

(7)开发板初始化函数:BSP_Init;

(8)微秒延时函数:delay_nus;

(9)毫秒延时函数:delay_nms。

main函数的第一行语句是开发板初始化函数:BSP_Init,用来配置系统时钟、GPIO模式和中断控制,分别是RCC_Configuration()、GPIO_Configuration()、NVIC_Configuration()。这几个函数将在后面的章节讲解。这行语句中“//”后的是注释。注释是一行会被编译器忽视的文字,因为注释是为了给人阅读,编译器不对其进行编译。

main函数的第二行语句是串口1初始化配置函数:USART_Configuration,用来规定单片机串口是如何与PC通信的。串口配置函数将在后面的章节讲解。第三行语句是printf函数:它是单片机通过串口向PC机发送一条信息:Hello Robot!。

main函数的第四行语句是“while(1);”。编译好后的可执行文件是下载到单片机Flash存储器上的,并且是从头开始往下加载的。当你把可执行文件加载上去的时候,填满了整个Flash空间吗?当然没有!那么,当程序执行完printf函数之后,它还将向下继续执行,但后面的空间并没有存放程序代码,这时程序后会乱运行,也就发生了“跑飞”现象。加上while(1);语句,让程序一直停止在这里,就是为了防止程序跑飞。

C语言中的两种文件

在教材各章节中,会多次使用以“#”号开头的预处理命令,如包含命令#include,宏定义命令#define等。一般都放在源文件的前面,称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,将首先对源程序中的预处理部分作处理,处理完毕后再对源程序进行编译。

常用的预处理命令有:

(1)宏定义

在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。“define”为宏定义命令,被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。

(2)文件包含

文件包含是C预处理程序的另一个重要功能。文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。

在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。

包含命令中的文件名可以用双引号(“”)括起来,也可以用尖括号(<>)括起来。使用尖括号表示在包含安装软件的目录中去查找(这个目录是安装软件时,设置的安装路径),而不在源文件目录去查找,一般是安装路径(如C:\Keil MDK***)下的Include目录;使用双引号则表示首先在当前的源文件目录中查找(即当前的HelloRobot目录),若未找到才到包含安装软件的目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。如“stm32f10x_heads.h”和“HelloRobot.h”2个文件表示在当前源文件所在目录。

一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。 9uHfPMdfflGnrKhcjmH2+wQX1791oz6d73YKLPdE9i+XSllxWZ9z28SY8QjKhvZJ

点击中间区域
呼出菜单
上一章
目录
下一章
×