串口调试通信实战

2018年11月01日 1041点热度 0人点赞 0条评论

在前面我们已经了解如何使用KEIL这个工具,那么接下来就用一个实际例子来演示如何使用KEIL开发STM32的程序。

本章MCU所选用型号为STM32L1系列中的STM32L151C8T6。该系列利用一流的外设和低功耗、低压操作实现了高性能,同时还以可接受的价格、利用简单的架构和简便易用的工具实现了高集成度,所以非常适合物联网对低功耗,工作环境恶劣的需求。

所选用的实训程序为所有MCU程序开发中最常用到的USART串口通讯。而且接下来跟NB-IOT模块之间的数据通讯也会使用USART。所以对于初学者来说,这将会是一个很有用的例程。

开发语言当然就是C语言了,所以你必须对C语言有一点点基础,否则建议你先去学习一下C语言再来看本章节。

开发平台:HX戊戌-ZERO

 

在开始之前,还是那句话“工欲善其事,必先利其器”。仅仅准备好了工具,这对于开发MCU程序来说还不够,毕竟MCU的开发会涉及到很多的底层(寄存器)的操作,这些对初学者来说是比较难理解和操作的,因为你必须要非常熟悉你所操作的MCU寄存器的开发指南(说明白了就是要熟读MCU芯片手册)。

所以为了加快我们开发的进度,我们还需要好的软件库。这些库函数会提供比较容易理解的接口让开发人员调用,从而尽量的避免了需要直接操作寄存器的步骤。而且,ST官方也提供了所有STM系列的库函数供我们下载使用,并且里面包含了很丰富的例子,这些例子基本上可以直接使用,从而大大缩减了我们开发的时间。

https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html

那么接下来,我们就只需要在其官方网站上找到支持我们所使用的STM系列的库文件,然后下载下来使用就好了。例如本章因为用到芯片为STM32L1,所以如下图在Supported Devices栏找到对应库下载就好了。

下载解压后会得到库目录STM32L1xx_StdPeriph_Lib_V1.3.1。

好了,当你都准备好了后,我们就可以启动KEIL软件了。然后新建我们的第一个工程,取名就叫“usarttest”。基本步骤:点击工具栏“Project”->"New uVision Project"。

新建工程时,就会提示我们选择我们所使用的芯片型号。前面我们已经提到所使用的芯片是STM32L151C8,所以在列表中找到即可,其他就只需要点击“OK”就好了。

另外,如果发现我们的设备列表里没有我们所需的芯片怎么办了?办法很简单,步骤:在工具栏找到“Pack Installer”。如下图1号标识,找到对应的芯片,然后点击“Install”()

注:图中显示“Up to date”是因为已经安装过该芯片了,所以就没有显示“Install”

工程建好后,我们需要在我们的工程里面建一些目录,方便管理我们的代码,最终效果如下图

注:目录名称(选中目录名,按快捷键F2可以修改)可以随便定义的,目的是为了方便自己理解和区分源代码。

目录main里面存放是主函数main.c,即程序的入口函数。

目录usart里面存放的是usart.c,这个文件主要是编写USART的硬件的初始化和收发数据接口。

目录library里面包含的文件就是从我们刚才下载的库文件源码。

注;库源码路径STM32L1xx_StdPeriph_Lib_V1.3.1\Libraries\STM32L1xx_StdPeriph_Driver\src

目录startup里面包含的是芯片启动文件。根据不同的MCU型号我们需要选择不同的启动文件,选择方法如下:

  • startup_stm32l1xx_md.s: 适用于STM32L Ultra Low Power Medium density devices
  • startup_stm32l1xx_mdp.s:适用于STM32L Ultra Low Power Medium density Plus devices
  • startup_stm32l1xx_hd.s: 适用于STM32L Ultra Low Power High density devices
  • startup_stm32l1xx_xl.s: 适用于STM32L Ultra Low Power XL density devices

上面四种类型所对应的MCU型号分别是:

  • Ultra Low Power Medium-density devices:

STM32L151x6xx, STM32L151x8xx, STM32L151xBxx, STM32L152x6xx, STM32L152x8xx, STM32L152xBxx, STM32L151x6xxA, STM32L151x8xxA, STM32L151xBxxA, STM32L152x6xxA, STM32L152x8xxA and STM32L152xBxxA, STM32L100x6xx, STM32L100x8xx and STM32L100xBxx

  • Ultra Low Power Medium-density Plus devices:

STM32L151xCxx, STM32L152xCxx and STM32L162xCxx, STM32L100xCxx

  • Ultra Low Power High-density devices:

STM32L151xDxx, STM32L152xDxx and STM32L162xDxx

  • Ultra Low Power XL-density devices:

STM32L151xExx, STM32L152xExx and STM32L162xExx

注:如果没有添加芯片启动文件启动文件,编译时就会出现如下错误,所以大家要注意哦!当前

No section matches selector - no section to be FIRST/LAST.

因为我们使用的芯片型号为STM32L151C8T6,符合Ultra Low Power Medium-density devices的范围。所以选择的启动文件为startup_stm32l1xx_md.s。其中system_stm32l1xx.c是所有STM32L1系列都需要的。

路径分别在,需要手动添加到项目工程中。

  • STM32L1xx_StdPeriph_Lib_V1.3.1\Libraries\CMSIS\Device\ST\STM32L1xx\Source\Templates\arm
  • STM32L1xx_StdPeriph_Lib_V1.3.1\Libraries\CMSIS\Device\ST\STM32L1xx\Source\Templates

目录中的文件可以使用工具栏中的“Manage Project Items”进行增加或删除的管理(上一章有介绍)

接下来,我们还需要使用到上一章节中内容,对我们的工程进行一些基本的配置,这里就不在赘述了,最主要是在配置“Include Paths”时要添加你本机所下载的STM32库函数的头文件所在目录。如下图:

好了,接下来就可以开始编写我们的代码了。

首先开始usart.c和对应的usart.h的代码编写,

 

usart.h文件中的的代码

 

可以看到,这段代码基本上都是调用的库函数接口,里面提到的中断概念,简单的理解就是:某个定义好的动作一旦发生就会自动执行相关代码。本例中USART中断就是一旦有数据来就产生中断,并开始接收数据保存在RxBuffer数组中。

注:如果在编写代码时,KEIL提示error:use of undeclared identifier时,解决办法就是添加对应的头文件。

例如上图的错误提示,我们就依次需要增加如下头文件在代码中。

完成usart.c编写后,我么可以开始main.c的编码了。

因为主要工作都在usart.c中已经完成,所以main函数就很简单了,只负责调用已经定义好的接口,完成所需任务就可以了。

当前main函数很简单,主要功能就是把从串口接收到的数据再发送出去。

代码编写完后,我们就可以进行编译了,如果不出意外就可以在工程的Objects目录中找到一个hex文件。如下图

 

[title]如何程序烧录[/title]

成功生成hex文件后,那些接下来就可以使用ST官方的FlashLoader工具,把编译出来的hex文件下载到开发板上的MCU中进行代码功能测试了。

在烧录开始之前,需要在本书提供的工具包中找到ST官方提供的Flash烧录程序flash_loader_demo_v2.8.0.exe进行安装。安装过程很简单,不做赘述了。安装成功后,启动软件就可以开始烧录程序了。

程序烧录步骤基本如下:

  1. 关掉开发板电源键,是开发板处于掉电状态。
  2. 使用开发板套件中的串口线连接到电脑上。
  3. 按住开发板上的烧录键的同时让开发板上电,然后再松开烧录键,此时MCU会处于程序烧录模式。
  4. 启动FlashLoader工具,配置好串口参数,进入下一步操作
  5. 选择目标“Target”为“STM32L_Cat1-64k”, 可以查看芯片手册获取芯片RAM大小。
  6. 设置好需要下载的文件路径。该工具支持文件格式包括hex文件和bin文件,本例使用的hex文件格式。
  7. 点击“下一步”开始程序烧录

注:可能由于本机串口接触不好等原因,导致不能一次烧录成功,那么多从第3步开始尝试几次

下图为下载过程

烧录成功后,我们可以使用工具包中的串口调试助手向开发板发生数据,如果在接收窗口收到我们所发生的数据,那么就说明我们的USART程序的功能是正常的。

详细实现代码参加本书资料包中的“usarttest”文件夹。

项目源码和所涉及到的工具都可以在blog.hanxe.com中下载。

文章评论