嵌入式开发应用的学习心得

随着嵌入式系统在工业设备、人们日常生活中的应用普及,对嵌入式系统的需求也随之越来越大, 具备嵌入式系统开发技能的人才也因此受到了广泛的青睐。为了满足企业对高质量嵌入式工程师的 需求,在高等学校开设嵌入式系统相关课程变得十分必要,其对于促进嵌入式工程师的成长也有着 深远的意义。 嵌入式系统本质上是一种软硬件高度集成的微型计算机系统,其具有软硬件可裁剪、低功耗、实时 性强等特点。相比于计算机应用方向的其他专业课程,嵌入式系统课程内容涉及软硬件的知识较 多,对于学生前期的知识储备有着较高的要求,入门难度相对较大,这些都加大了学习的难度。 此外,由于实验条件的限制,传统的教学更加注重于理论知识的讲授,实践环节的课时较少,这容 易使学生丧失兴趣,导致授课效果差。 在嵌入式课程中,针对计算机应用专业的特点,设置合理的教学目标,调动学生兴趣,充分挖掘 学生的自主学习能力,使得学生能够真正掌握嵌入式系统开发技能,是该课程所期望达到的效果。 围绕这一教学目的,在课程设置上,重视嵌入式系统基础性理论的学习,强调对学生动手操作能力 及解决工程问题能力的培养,尤其注重实验中嵌入式系统各硬件工作原理的验证以及在此基础上 的开发实践活动。兼顾到嵌入式系统的发展趋势以及学生的知识接受能力,整个课程选择了以AR M Cortex-M3为核心的STM32F103XX嵌入式芯片作为教学实践平台。 一、课程体系结构 课程的具体目标是培养学生能够熟练使用嵌入式开发工具及已有的基础固件库完成驱动程序和应用 软件的开发,在硬件电路设计方面并不做过多要求。该目标的设置可以充分发挥计算机应用专业学 生软件开发能力相对较强的特点,而降低由于电子电路背景知识基础相对薄弱所带来的知识理解困 难,这也使得学生不会因为嵌入式系统硬件的复杂性而在学习上产生退缩情绪,反而因为自身所具 备的程序编制能力得以快速入门,并产生更多的兴趣驱动其深入到嵌入式系统的学习中。 在教学内容的组织上,根据设置的课程目的,将课程知识体系划分为三个有机组成部分。第一部 分,嵌入式系统的总体体系结构;第二部分,嵌入式系统的指令系统;第三部分,嵌入式系统核心 模块的工作原理。第一部分是对整个嵌入式系统的总览,该部分内容具有一定的抽象性,并不是某 特定嵌入式系统结构的具体化,因而更具有普遍性。第二部分主要围绕ARM指令集及Thumb指令集 进行介绍,后续的实验环节则更偏重于C语言在ARM内核上的编程。第三部分侧重于核心模块,结 合各功能模块的工作原理和对应固件库中函数的具体实现,使工作原理的讲解变得直观,容易被学 嵌入式课程设计总结通用六篇生接受。这三部分并不孤立,第一部分更多地阐述了嵌入式系统的硬件载体,而第二部分则主要阐 述了嵌入式系统软件开发的基础,第三部分则是软硬件的综合,其依赖于前两个部分的知识基础。 在授课的模式上,采用了课堂讲授与实验相结合的教学模式。课堂讲授部分主要涉及嵌入式系统微 处理器、存储器及时钟电路等内容的介绍,随后则是各功能模块工作原理的介绍。在讲授过程中, 首先给出概要性的介绍,使得学生形成感性认识,其次对于重点、难点部分,使用演示法,运行一 些小程序,通过对比运行结果,使得学生能够正确理解各工作原理。在设计这些小程序的过程中, 只对部分能够说明工作原理的部分进行修改,其他大部分都相同,通过演示讲解,形成更为直观的 认识。最后在实验部分,围绕模块设置多组实验,难度为一阶梯递增的过程,使得学生能够循序渐 进地掌握嵌入式系统的开发技术。 二、课堂教学 在课堂教学的过程中,注重对ARM的软硬件总体结构进行介绍。按照嵌入式系统的纵向结构,将嵌 入式系统分为硬件层、中间层、系统层及应用软件层,层次性的介绍使得学生能够快速建立起ARM 嵌入式系统框架结构的概念。 硬件层,围绕着嵌入式系统低功耗、实时性强的特点阐述系统设计的初衷与思路,重点介绍系统的 时钟电路,注意高速内部时钟、高速外部时钟、低速内部时钟和低速外部时钟获取方法之间差异性 的比较。针对嵌入式系统保证系统效率的核心机制――中断机制,课程中引入了STM32F103XX芯片 的中断系统作为具体的中断实现进行介绍,由其典型的7类中断类型延伸到其他ARM系统的中断实 现。存储器的讲解则偏重于存储器的分区及地址重映射的概念。对于基本硬件构成的讲解不只是停 留在每个硬件的简单介绍上,而是通过数据流、指令流的传递阐述这些硬件的协同工作机理。 在中间层,模块的驱动程序设计是该课程教学的重点,内容包括通用输入输出引脚(GPIO)、模数 转换(ADC)模块、外部中断(EXTI)模块、定时器模块、串口通信(USART)模块、实时时钟 (RTC)模块及看门狗模块等。这些模块的驱动程序更加贴近于底层硬件,因此相关理论的介绍是 必不可少的。参考当前工业界一些优秀的驱动程序,通过挖掘程序片段供学生阅读,使得学生对这 些模块的理解不仅仅停留在抽象的原理性认识上,能够更多地从实例程序中理解驱动程序的编写方 法及思路。为了让学生更好地理解各模块的基本工作原理,示例小程序的运行效果可以提供一个直 观的认识手段。在设计这些示例程序时,突出寄存器的配置参数对程序运行结果的影响。例如,在 定时器的配置过程中,通过修改分频系数及计数模式,可以产生不同时长的定时效果,学生可以很 直接地发现结果的差异性。作为源码公开的嵌入式操作系统,μC/OS-Ⅱ嵌入式操作系统具有内核小、实时性强的特点,在系统 层,将μC/OS-Ⅱ作为一款典型的嵌入式操作系统,讲解内核结构――任务调度、任务的互斥和同 步、任务间的通信等,并在这一过程中穿插其他嵌入式操作系统的内核实现方式,如Linux、vxWork s等相关知识,使得学生能够触类旁通,知识面也不局限于μC/OS-Ⅱ。考虑到计算机应用专业学生已 有的操作系统知识,在这一块内容的教学上,并不展开每一个内核的实现细节,课后通过一些作业 让学生有意识地利用已有操作系统知识来扩展、自学嵌入式操作系统。 对于应用层的介绍,则给出多个工程实例,剖析部分程序文件,以此向学生展示在嵌入式系统上如 何开发应用程序。在工程实例的选择上,综合考虑实用性及学生的学习能力,设计了“基于STM32F1 03XX的手持电子相册设计与开发”和“嵌入式系统上人机友好交互界面的设计与开发”等实例,引导学 生掌握功能模块的组合应用。 三、实验教学 实验教学是学生掌握嵌入式系统开发及应用知识的关键性环节。在实验的设计上,根据程序开发的 难易程序,将实验分为验证型实验和设计型实验,引导学生循序渐进地掌握软件编制技巧。 验证型实验,设计合理的范例程序,并通过在实验课上程序设计思路的讲解,帮助学生理清程序的 流程与框架。对于该类范例程序,一般设置2个目标:第一,要求在范例程序上通过修改参数,观察 在不同参数下嵌入式系统的输出表现。第二,按照嵌入式系统的功能要求,补充完整范例程序。为 了达到这些实验目标,让学生从硬件接线图着手,在掌握输入输出信号流以后,进一步理解范例程 序的功能实现过程。如在流水灯实验中,在确定外部三个LED灯的灌电流驱动方式,让学生通过设 置对应端口的高低电平来控制LED的点亮与熄灭。在给出的范例程序中,程序的调用过程标定清 楚,学生只需填充函数,完成GPIO时钟的配置,设定引脚号、引脚传递速度和引脚工作模式等参 数,从而达到循环控制LED灯的目的。验证型实验可以引导学生快速了解嵌入式系统的开发过程, 帮助学生建立起嵌入式系统软件开发的信心,为后续独立开展实验打下基础。 设计型实验在学生具备初步的嵌入式系统开发能力的基础上,采用探究式教学法,给定功能目标, 让学生自行设计方案并编制软件实现目标。在这一过程中,学生需要运用软件工程思想,编写概要 设计文档与详细设计文档,给出模块划分结果及部分关键函数的流程图作为实验报告的必要组成部 分。在编制软件时,由于涉及一些固件库的使用,要求学生查阅开发手册掌握必要的库函数来完成 实验。为了让学生顺利完成实验内容,实验内容都在课程讲授的范围内,只涉及多个核心模块的协 调工作,学生在掌握工作原理的基础上可以较为顺利地完成方案的设计与软件的编制。 四、考核方法 考虑到嵌入式系统教学目标更加偏重于学生动手能力的培养,因此在考核的内容上强调实验的表 现。在期末成绩的综合评定上,平时课堂表现、作业情况占10%,实验成绩占30%,期末理论考试 占60%。通过这一考核方案,在促使学生学习嵌入式系统基础理论的同时,能够将所学的理论知识 运用到具体的实验操作上,使得计算机应用专业的学生将嵌入式系统知识内化到自身的知识体系 中。 五、结语 嵌入式系统课程是一门具有较强实践性的课程,为了使学生系统性地掌握嵌入式系统,在课堂授课 过程中采用演示法加深学生对嵌入式系统的理解,另外,设计难度递增的实验内容,使得学生能够 循序渐进地掌握嵌入式系统开发技术。通过一系列课堂教学、实验环节的改革,建立一个较为完善 的课程体系,更好地促进学生工程实践能力的培养,在实际的教学中取得了较为明显的教学效果, 有效地拓宽了计算机应用专业学生的就业面。

如项目:PWM驱动舵机

思路:

与PWM控制呼吸灯基本相同,只增加以下不同的地方:

封装舵机函数,推荐自定义void Servo_Init().

封装一个函数,使之PWM控制呼吸灯变为能观察的角度。实际起作用的函数是PWM_SetCompare(Angle/180*200+500);注:Angle是你想要传入的观察的角度值

3.PWM驱动直流电机

思路:

电机转动的条件是输入端的AIN1和AIN2必须一个高电平,一个低电平。

推荐封装为Motor_Init();

输出端有两个,所以使用两个GPIO引脚。

需要显示速度,所以需要自定义速度函数,该函数需要传参,推荐自定义为void Motor_SetSpeed(Speed);实际执行时,先判断参数正负,使之速度有正负,然后使用GPIO_ReSetBits();和GPIO_SetBits(),使之变为一高一低。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值