嵌入式课程设计模式探索

时间:2022-10-22 09:06:45

嵌入式课程设计模式探索

摘要:针对传统嵌入式课程设计的弊端,给出一种新的以ARM开发板为硬件基础的嵌入式课程设计方案,方案以介绍开发流程为主线,引入嵌入式实时操作系统,使学生能够从整体把握嵌入式开发流程。实践表明,以开发板为硬件基础的嵌入式课程设计,能够提高学生的开发兴趣和自主开发能力,达到嵌入式教学目标。

关键词:STM32;μC/OS-III;ARM;嵌入式开发;课程设计

中图分类号:TP338 文献标识码:A 文章编号:1009-3044(2017)06-0177-02

1概述

嵌入式课程是高等院校电子和信息专业一门非常重要的课程。嵌入式技术应用规定了嵌入式这门课程应该侧重于工程性和应用性。然而目前嵌入式教学仍然处于以理论学习为主,课程设计为辅的局面。这导致了学生的实践能力得不到提升,缺乏对嵌入式课程的学习兴趣[1]。其次,现有的嵌入式课程设计多以教学试验箱为主,这类教学试验箱配备的微处理器性能低下,难以满足复杂项目的开发需求。这些缺点都限制了学生对嵌入式课程的学习热情,嵌入式教学难以达到预期效果[2]。使用开发板进行嵌入式教学将有效解决上述问题。首先,从接触硬件开始,学生有一定的开发兴趣,其次,目前市面上的教学开发板都配备了当前主流单片机,这类单片机具备卓越的处理性能和丰富的外设接口,能够设计更为复杂和实用的系统。最后,规范化的嵌入式开发流程也可以提高学生的动手能力和开发兴趣[3]。本文以远洋电子工作室出品的野火STM32开发板为例,设计一个加入嵌入式实时操作系统μC/OS-Ⅲ的课程设计,目的在于使学生能够接触当前主流的ARM芯片的结构并且学习复杂工程的基本开发流程,提高学生工程开发能力和开发兴趣。

2 开发环境介绍

硬件方面,野火开发板上的微处理器使用的是意法半导体公司的STM32F103ZET6。该处理器是Cortex-M3内核的32位微处理器,最高工作频率可达72MHz,内置512K的FLASH和64K的SRAM,11个定时器,同时具有多达13个通信接口。该开发板以总线的方式引出IO,这样的设计可以方便用户进行通信接口的外接工作,隔离跳帽设计可以方便用户进行DIY设计。开发板可以用于完成跑马灯、文件系统移植、微型实时操作系统移植等一系列复杂的实验,这些实验可以增强学生的动手能力和自主学习能力,同时培养他们对于嵌入式开发的兴趣。

软件方面,以μC/OS-Ⅲ嵌入式操作系统为开发环境。μC/OS以其开源、可裁剪、可固化、稳定性和安全性高的特点,在嵌入式领域有着极其广泛的应用,该嵌入式系统也以短小简洁而著称,适合引入嵌入式课程设计。μC/OS-Ⅲ作为μC/OS的最新版本,较前面的版本加入了许多新的特性。比如,不再限制最大任务数目,允许相同优先级存在,加入时间片任务调度算法等。新的特性使得μC/OS-Ⅲ的功能更为强大,也方便了开发者的使用[4]。

3 μC/OS-Ⅲ在STM32上的应用

μC/OS-Ⅲ的代码量大约在6K~24K。野火STM32开发板的上512K字节FLASH和64K字节的SRAM运行μC/OS-Ⅲ是非常充足的,本次课程设计采用的是μC/OS-Ⅲ的V3.02.00版本。经过测试,该版本系统在STM32上可以可靠运行,并且非常稳定。下面将介绍课程设计的主要内容。

3.1 功能要求

根据图2所示的开发板上LED灯的硬件原理图,在给定的MDK工程中进行编程,实现以下要求:

开发板上电以后,三个绿色的LED小灯将进行间隔为200ms的闪亮,表示系统已经运行。使用PortHelper上位机软件,输入LED灯编号和长亮时间,对应的LED灯将进行定时长亮。长亮完毕后,LED灯将继续进行200ms的间隔闪亮。

3.2 设计分析

按照从下往上的原则,首先进行板级代码的编写工作,主要内容是LED的控制和串口的配置部分。之后进行应用级编程,在应用级代码中创建相应的任务,实现数据接收和长亮控制。具体编程步骤:首先编程实现板级驱动控制。然后在μC/OS-Ⅲ中建立启动任务,在启动任务中继续创建三个LED1~LED3灯的闪亮任务。上位机通过串口发送控制数据到内存中,各个LED任务通过检测内存中的数据来确定是否进行长亮和进行长亮的时间。

需要指出的是,在使用串口中断进行数据传输时,如果操作较快可能会出现数据出错的现象。鉴于此,将串口配置为DMA(Direct Memory Access)方式传输数据,这种方式可以有效提高传输速度和稳定性。

最后,为各个任务分配相应的任务优先级,分配方案如下表1所示:

3.3 编程流程

按照从下往上的编程原则首先进行板级代码编程,在MDK工程的bsp项目组中新建两个源文件和对应的头文件,这两个源文件分别是LED灯对应端口的配置程序和串口的配置程序。

对于LED灯的编程,为了方便移植,使用带参宏定义LED对应引脚:

#define Reset(p,i) {p->BRR=i;}

#define Set(p,i) {p->BSRR=i;}

BRR和BSRR寄存器是STM32的GPIO端口对应的设置/清除寄存器。寄存器只能进行写1操作,在对应的端口输出低/高电平,写0将不产生影响。上述宏定义将控制引脚的电平高低,实现LED点亮和熄灭操作[5]。

串口用来连接上位机和开发板,在串口编程中主要包括串口配置、DMA配置和printf()函数的重定向编程。串口配置为波特率是115200,1个停止位,8个数据位,没有校验位,不使用硬件流控制。这种常用的配置方式既安全又高效[6]。

最后,对printf()函数进行重定向。printf()函数作为C语言的格式化出函数,将数据发送到标准输出设备以达到显示的目的。在嵌入式开发中,对于没有标准输出设备的情况,需要重定向该函数,即将待发送数据发送至串口,利用串口助手进行显示。

上一篇:CDIO教育模式在技师院校软件工程教学中的应用 下一篇:探骊好莱坞科幻电影平面宣传的视觉审美特征