前言
嵌入式系统属于一个交叉学科,它涵盖了微电子技术、电子信息技术、计算机软件和硬件等多项技术领域的应用,覆盖面广。目前嵌入式系统发展很快,很多软/硬件技术出现时间不长,掌握这些新技术的人相对较少。很多高校专业划分过细,难以跟上市场变化的步伐,与实际工程项目脱节严重,仍沿用应试教育的教学方式,理论知识讲授过多,动手环节薄弱,理论联系实际能力较差,学生参与社会实践较少,不了解社会需求。嵌入式教学需要相应的嵌入式开发板和软件,需要有经验的人进行开发流程指导,这在目前的高校中是很难实现的。针对上述问题,我们组织多年在一线授课的教师根据教学经验编写了此书。
1. 对教师的建议
把握“三个统一学单片机”的教学理论。
1)一般与特殊的统一 目前电类课程中关于微机方面的课程很多,如《计算机应用基础》、《微机原理》、《单片机原理及应用》、《嵌入式系统原理及应用》、《可编程控制器PLC》等,这些课程间内容既有重复又有联系,因为以奔腾芯片为核心的PC、以8086为核心的第一代PC、5 1单片机、以ARM为核心的嵌入式系统、PLC都有相同的遗传基因(微机原理)。因此,任课老师都应熟悉上述课程,在课堂讲授中将其融会贯通起来,深入挖掘课程的共性,即微机的基本原理,然后引导学生在学习中侧重其差异,这样不仅可以提高学习效率,还可以启发学生思考。
2)硬件与软件的统一 通过多年的教学实践我们发现,“软件通过控制字寄存器控制硬件”是学生理解的难点,其原因可能是平时同学操作PC直接通过Windows界面达到驱动硬件的目的,没有用软件驱动过底层硬件。因此在介绍嵌入式系统时,最好从硬件控制寄存器程序讲起,让学生对底层原理有个认识。对于STM32,本书在第5章也揭示了控制寄存器和库函数的相关性。另外,在参考文献 [2]中,我们将汇编语言依赖硬件的特性深入挖掘,课堂效果较好,推荐采用。
3)内部结构与外部引脚的统一 将内部结构、外部引脚、系统功能、指令集统一起来,只有这样才能做到“庖丁解牛,游刃有余”。
2. 对学生的建议
1)重视实践 工程师解决问题的能力只有从实践中才能获得。从实践经验中归纳出共性的知识,然后再将这些知识重新应用到新的实践中去,这也是当今的大学生要在未来的实际工作中所必须采取的学习和工作方法。只有做到了这一点,才能真正实践以工作为导向的理念:实践、归纳、总结和再实践。学好嵌入式系统,实践必不可少,一定要选一块和微处理器型号对应的开发板,创建一个良好的平台和环境,边实践边学习,尽量弄清其内在原理。硬件开发板的价格不必太高,最好能有自己动手的空间。深入理解STM32的硬件最小系统,对I/O口、串行通信、键盘、LED、LCD、SPI、I2 C、PWM、A/D(包括一些传感了。各个硬件模块驱动程序的编写是嵌入式系统的必备基础。在编程中,主要针对main.c和stm32f10x_it.c两个文件,其他定义硬件控制寄存器的文件stm32f10x_map.h、硬件初始化结构体的文件stm32f10x_xxx.h和stm32f10x_xxx.c也要仔细研读,将软件和硬件联系起来学习,会加深对硬件的理解。把书上的例程亲手输入到计算机中进行实践是很有必要的,一定要多上机操作。程序是抽象的,有时程序能看懂,但自己却不一定能编出来;而有时虽然程序没看懂,但若经常着手去编,就会非常熟悉该程序应该怎样去处理。要把在书中看到的有意义的例子举一反三;经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去,温故而知新;当程序写到一半时却发现自己用的方法烦琐,不要马上停手,应尽快将余下的部分粗略地完成,以保证设计的完整性,然后分析自己的错误并重新设计和编写;遇到问题时,不要马上向其他人求救,以免养成依赖性,要学会自己去解决问题。看到一个编程要求后,首先要在头脑中有一个大体的轮廓,独立构思,不要看参考提示,只有这样才可以达到真正的训练目的,才会逐步把思路培养出来;保存好写过的所有的程序——那是最好的积累之一。学习的过程中要经过思考加工,去粗取精,抓本质和精华,仔细研读并尝试修改别人的例程代码,真正将新知识应用到实践中,理解后融入到自己的知识体系中。本书每个知识点后都对应一个开发板实例,推荐以项目开发的方式进行学习,将学习成果变成自己的作品。
2)重视官方文档 学习时,应关注两个比较重要的文档:《STM32F103×××参考手册》,《STM32固件库使用手册》。
阅读《STM32F103×××参考手册》时,不需要全部阅读,但是前几章必须重点阅读,包括存储器和总线架构,电源控制,备份寄存器,复位和时钟控制,通用和复用功能I/O,中断和时间等。后续章节讲述的是具体的功能模块设计,如果要用到哪个模块,就可以去阅读相应的模块。
阅读《STM32固件库使用手册》的主要目的是为了简化编程。STM32提供了一个非常好的固件函数库,只需调用即可。阅读《S TM3 2固件库使用手册》时,前面几章也是必须阅读的。比如,第1章文档和库规范中的命名规则,编码规则,这些都是需要注意的。第2章是最关键的,描述了固件库的架构,以及如何使用固件库等。有了这些基础,就可以借助固件库写出自己的代码了。第4章以后的章节都是描述某个模块有什么函数,每个函数如何使用等,可以根据需要来阅读。建议对GPIO库函数、中断部分库函数、复位和时钟设置的库函数等内容要重点阅读。
无论何时,官方手册都是最好的老师和帮手,千万不要因为它的枯燥乏味而将其束之高阁。使用任何外设前,都必须仔细看参考手册和使用手册。
3)重视交流 在网上建个交流平台,或者开博,或者社区交流,把自己解决的问题和经验与他人分享,这样通常会让读者个人的研究更具可行性和更深入地了解;构建或参与技术圈子,一个好的圈子通常会给读者带来钻研和共同提高的激情,或者说是一个良性的竞争环境。
3. 本书特点
在讲述具体内容时,本书各章节均以我们开发的STM32开发板为硬件教具,每章均会提供一个设计任务实例,以任务为驱动,通过“学中做、做中学”,即DIY(Do It Yourself)的规律学习和掌握基于ARM Cortex-M3内核的STM32嵌入式微控制器技术及其应用编程,尽量避免纯理论性描述带给读者的枯燥感。有别于数据手册式的教材,本书并没有面面俱到地谈及Cortex-M3的技术细节,各个章节也没有繁冗的寄存器说明(参见ST公司网页上的数据手册或本书配套资料),而且涉及微机原理的相关知识都在每章“本章前导知识”中给出(可阅读参考文献 [2]),每章的例程只给出关键代码,这样做的目的旨在突出重点。本书写作过程中,也注意了软、硬件的结合,将S TM3 2的内部结构、控制寄存器和库函数对应结构体,还有功能特点和初始化设置结构体结合起来,揭示软、硬件之间的联系,使读者能够对STM32应用“快速上手”。本书不仅是教给大家STM32基础知识,更重要的是介绍嵌入式系统的学习方法,启发读者的创意思维。
本书受全国教育科学规划2010年度教育部重点课题(课题批准号:GKA103004)的子课题(立项编号:GKA10105)资助。第1、2、7、8、9、10、1 1、12章及附录由燕山大学陈志旺编写,第3章由燕山大学刘宝华编写,第4章由燕山大学王荣彦编写,第5章由燕山大学程淑红编写,第6章由燕山大学吕宏诗编写。全书由陈志旺统稿。参加本书编写的还有李萌、薛佳伟、王敬、吴晨、李晓、李坤、赵春媛、刘砚、赵晓娟和李江艳。书中引用了一些网上文献,无法一一注明出处,在此向原作者表示感谢!
由于笔者水平有限,书中难免存在错误与不妥之处,欢迎读者朋友不吝赐教!来信可与如下邮箱联系:czwaaron@ysu.edu.cn。博客:http://blog.sina.com.cn/gksupermarket,本书的进一步资料会在博客上更新。
编著者