本课程中以计算思维为导向,帮助学习者“把STM32作为一个工具”来学习计算机学科的基础知识,充实实践内容。本课程的所有内容都是围绕着“以STM32单片机为例来讲解微机原理”和“培养底层编程意识和思想”这两个核心目标来进行的。对所有和这两个目标关系并不密切的内容,都进行了舍弃,使学习者可以集中注意力于那些具有普遍意义的计算机知识。
有了目标,如何导航?导航需要地图和指南针。
地图使学习者对嵌入式微机的知识体系有宏观把握,居高临下,不会“不识庐山真面目,只缘身在此山中”。STM32单片机的资源太丰富,工具很完善,这是它占领嵌入式市场的优势,但却使得初学者不知从何入手。尽管ST公司写了厚厚的芯片手册,但却不适合初学者。如果把手册看成一幅真实的地图,初学者需要的是一幅“手绘地图”。大学课堂上的教学和教材应是这样的“手绘地图”,不必所有细节事无巨细(STM32的所有外设不一定都介绍),但应给出学习的导航路径,提示重点关注的地方,用易于理解的卡通方式进行解释;比例尺(详略)要根据学生的能力及应用选择;知识体系还要全面完整。学完手绘地图,有了初步基础,更重要的是对单片机的认识有了全貌,这样再去看手册,就形成了“良好的学习梯度”,便于初学者拾级而上。
这里的地图也指STM32的整体结构,学习每部分内容要清晰各部分在整体结构中的位置,和其他部分的关系。
指南针指示方向,使学习者洞察重点,突破难点,注重典型性,避免随意性;注重迁移性,避免孤立性。
有了教学目标和顶层设计,本课程特点如下:
(1)定位准确,为STM32入门开发者而写,做到有的放矢;
(2)内容先进,对STM32最新发布的产品有关注,能反映计算机科学技术的新成果,新趋势;内容有坚实的学术研究基础,同时还是教与学切磋相长的荟萃;
(3)取舍合理,做到“该有的有,不该有的没有”,不包罗万象、贪多求全,不直接复制照抄手册;课程内容的基础性与先进性、经典与现代、理论与实践的关系处理得当;课程制作中综合参考了多方面相关资料:STM32官方培训、STM32配套开发板、嵌入式开发工程师公众号及博客,集多家之长,取长补短,更好满足STM32入门者的学习需求。针对上述资料我们并没有“拿来主义”直接使用,教研团队对资料及学生需求进行了充分的对比分析,有针对性地进行了深度二次开发,使课程内容更适合STM32学习者的特点。
(4)体系得当,针对STM32入门者的特点,精心设计教材体系,符合科学发展的规律和教育的认知规律,在理论与实践、基础与新知、知识与技能等方面有恰当合理的布局和设计,同时要注意学科交叉和文理交融;不仅使教材体现科学性和先进性,还要注意循序渐进、降低台阶、分散难点,使学生易于理解;
(5)风格鲜明,要用通俗易懂的方法和语言叙述复杂的概念,善于运用形象思维,深入浅出,引人入胜。
该课程配套教材《STM32嵌入式微控制器快速上手(第2版)》曾荣获2014年中国电子教育学会“全国电子信息类优秀教材”三等奖。据统计,该教材被山东大学、电子科技大学、苏州大学、河北工业大学、东华大学等国内50余所高校选用,截止2021年7月累计重印30次,30100册。
本课程各章节在讲述具体内容时,以我们开发的STM32开发板为硬件教具,每章均会提供一个设计任务实例,以任务为驱动,通过“学中做、做中学”,即DIY(Do It Yourself)和LBD(Learning By Doing)的方式,介绍和讲解所需要用到的新知识、新技能,按照认识论的规律学习和掌握基于ARM Cortex-M3内核的STM32嵌入式微控制器技术及其应用编程,尽量避免纯理论性描述带给读者的枯燥感。有别于数据手册式的讲解,本课程并没有面面俱到地谈及Cortex-M3的技术细节,各个章节也没有繁冗的寄存器说明(参见ST公司网页上的数据手册或本书配套资料),每章例子程序只给出关键代码,完整程序详见教材网盘,这样做的目的旨在突出重点。课程也注意了软硬件的结合,将STM32的内部结构、控制寄存器和库函数对应结构体,还有功能特点和初始化设置等结合起来,揭示软硬件之间的联系,使读者能够对STM32应用“快速上手”。课程不仅仅是教给大家STM32基础知识,更重要的是嵌入式系统的学习方法,启发读者的创意思维,如果一门课只是教会读者课程中的东西,而读者只会用课程中的东西,那是剥夺读者自身创造力的行为,本课程却是力图启发、诱导读者的创造力,授读者以“渔”而非“鱼”,这才是本课程最独特之处。学习具体建议如下:
(1)重视实践。工程师是为了解决问题,这种解决问题能力只有从实践中才能获得。同时,单纯的实践也无法获得真正的能力,关键是如何从实践的经验和体会中,归纳出共性的知识,建立起知识体系,然后再将这些知识重新应用到新的实践中去。这也是当今的大学生要在未来的实际工作(无论是在企业研发还是在高校做研究)中必须采取的学习和工作方法。做到了这一点,才是真正实践了工作导向的哲学理念:实践、归纳、总结和再实践。学好嵌入式系统,实践必不可少,一定要选一块和微处理器型号对应的开发板,创建一个良好的平台和环境,边实践边学习,并尽量弄清内在原理。硬件开发板的价格不要太贵,最好能有自己动手的空间。深入理解STM32的硬件最小系统,对I/O口、串行通信、键盘、LED、LCD、SPI、I2C、PWM、A/D(包括一些传感器)、D/A等逐个实验理解,逐步实践,再通过动手做一个实际的小系统,底层硬件基础就有了。各个硬件模块驱动程序的编写是嵌入式系统的必备基础。大家在编程中主要针对main.c和stm32f10x_it.c两个文件,但是其它定义硬件控制寄存器的文件stm32f10x_map.h、硬件初始化结构体的文件stm32f10x_xxx.h和stm32f10x_xxx.c也要仔细研读,因为它们会加深硬件理解,将软件和硬件联系起来,学习嵌入式系统的初期,这个过程是必须的。把书上的程序例子亲手输入到电脑上实践,一定要多上机操作。程序是抽象的,有时看程序看的懂,但自己去编却不一定能编的出来;而有时候虽然程序没看懂,但如果经常着手去编,就会非常熟悉该程序用的时候应该怎么去处理,时间久了自然就理解了;请把在书中看到的有意义的例子扩充,举一反三;经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去,温故而知新,不要觉得自己什么都会了,要保持谦虚的态度;当你写程序写到一半却发现自己用的方法繁琐时,请不要马上停手,请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写;当你遇到问题的时候,请不要马上就像其他的人求教,这样会让你养成依赖性,学会自己去解决问题。独立编程,看到一个编程要求之后,首先要在脑中有一个大体的轮廓,独立构思,不要看参考揭示,只有这样才可以达到真正的训练目的,才可以一步步地把思路培养出来;保存好你写过的所有的程序——那是你最好的积累之一;学习的过程中要经过思考加工去粗取精,抓本质和精华,仔细研读并尝试修改别人的例子代码,真正将新知识在实践中理解后嵌入到自己的知识体系中,转化成自己的能力。本书每个知识点后都对应一个开发板实例,推荐以项目开发的方式进行学习,将学习成果变成自己的作品。
(2)重视官方文档。学习的时候,关注两个比较重要的文档:《STM32F103xxx 参考手册》和《STM32固件库使用手册》。
阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读,但是前几章必须重点读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和定时器等等前几章一定要花时间阅读。后面章节,讲述的是具体的功能模块设计。如果用到哪个模块,就可以去阅读哪个模块。
阅读《STM32 固件库使用手册》,主要是为了简化编程。STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。阅读《STM32 固件库使用手册》的时候,前面几章也是必须阅读的。比如第1章文档和库规范中的命名规则,编码规则,这些都是需要注意的。第2章是最关键的,希望大家熟读。第2章描述了固件库的架构,我们如何去使用固件库的步骤等。有了第2章的基础,我们就可以借助固件库写出自己的代码了。第4章开始之后,都是描述某个模块有什么函数,每个函数如何使用等,可以根据需要来阅读,建议对GPIO 库函数、中断部分库函数、复位和时钟设置的库函数要比较熟悉,因为平时经常会用到。
无论什么时候,官方手册是最好的老师和帮手,千万不要因为它的枯燥乏味而将其束之高阁。使用任何外设前,都必须仔细看参考手册和使用手册。
(3)重视交流。此处的交流是广义的交流,借鉴别人也是交流。看一些好书,书本通常不会给你带来什么新意,但是巩固和沉淀知识很重要;在网上有个交流平台,或者开博,或者社区交流,把自己解决的问题和经验与他人分享,这样通常会让你个人的研究更具可行性和更深入地被了解;构建或参与技术圈子,一个好的圈子通常会给你带来钻研和共同提高的激情,或者说是一个好的良性竞争环境。
本课程可作为高等本科院校和职业技术学院的计算机、电子信息、自动化、电力电气、电子技术及机电一体化等相关专业的“嵌入式系统原理与应用”、“基于ARM Cortex内核的单片机系统开发”等课程的线上视频课程配套使用,也可以作为工程实训、电子制作与竞赛的参考课程,同时还可以供广大从事自动控制、智能仪器仪表、电力电子、机电一体化等系统开发和设计的工程技术人员、教师或者个人参考自学使用,并可作为ARM相关应用与培训课程。

