前些年我编写《轻松玩转STM32微控制器》时,就注意到ST公司开始主推STM32Cube组件,但因我自己是从STM32F10×标准外设固件库(Standard Peripheral Library,SPL)上手的,而且当时网上有对STM32Cube组件的负面评价,所以仍选择SPL进行讲解。近年来,随着对STM32Cube组件的深入了解,我越来越喜欢它,也慢慢习惯于利用STM32CubeMX便捷地生成C语言工程框架。
其实,对于一个新生事物,大家总要有一个从了解到熟悉的过程。学习STM32的读者大都是从SPL入门的,许多STM32开发板提供的例程也是基于SPL的,STM32F1××系列的例程几乎都是基于SPL的。大家可能会发现:在ST公司推出STM32Cube组件和硬件抽象层(Hardware Abstraction Layer,HAL)固件库后,有部分公司开始为STM32F4××系列提供基于HAL固件库的例程,而STM32F7××系列开发板的例程清一色都是基于HAL固件库的,因为ST公司没有推出基于该系列微控制器的SP L(至少目前尚未推出)。由此可见,学习和应用STM32微控制器,使用HAL固件库和STM32Cube组件是大势所趋,即使是“资深工程师”,也必须适应技术的更新。
利用图形配置工具STM32CubeMX,开发者可以快捷地生成STM32微控制器的C语言工程框架,仅在工程中实现自己的应用代码即可。然而,这并不是说不用学习STM32微控制器了;在配置STM32CubeMX的过程中,读者会发现,还有很多STM32微控制器的知识点须要掌握,只有这样才能有目的地进行配置,否则只能对着该工具“干瞪眼”。
其实,针对STM32Cube组件和STM32微控制器,ST公司提供了大量的技术资料。有关图形配置工具STM32CubeMX和STM32CubeF1软件包,可以重点参考的资料有:
● STM32CubeMX for STM32 Configuration and initialization C code generation(STM32CubeMX用户手册,UM1718)
● Getting started with STM32CubeF1 firmware package for STM32F1 series(STM32CubeF1用户手册,UM1847)
● Description of STM32F1××HAL drivers(HAL固件库用户手册,UM1850)
● STM32Cube firmware examples for STM32F1 series(STM32Cube应用手册,AN4724)
有关STM32微控制器的学习,可参考的资料就更多了。在此简单列举一下入门学习时应重点关注的资料:
●《ARM Cortex-M3权威指南》(宋岩 译)
● The Cortex-M3 Technical Reference manual(Cortex-M3技术参考手册)
● STM32F10×××Reference manual(STM32F10×××参考手册,RM0008)
● STM32F10×××Cortex-M3 Programming manual(STM32F10×××Cortex-M3编程手册,PM0056)
● STM32F10×××Flash programming manual(STM32F10×××Flash编程手册,PM0075)
● DS5319:STM32F103×8、STM32F103×B Datasheet(数据手册)
● DS5792:STM32F103×C、STM32F103×D、STM32F103×D Datasheet(数据手册)
● MDK-ARM开发环境、例程及帮助文档
● 其他相关器件数据手册及网络资料
学习新知识时,如果没有资料可以参考,会觉得很困难;如果资料太多,又不知从何处入手、重点/难点在哪里。写作本书的目的就是结合ST公司和ARM公司提供的丰富资料,帮助读者找到一个属于自己的学习方法。本书首先介绍如何从ST公司官网获取想要的技术资料,然后从STM32CubeF1软件包提供的例程入手,引导读者通过例程了解利用技术资料的方法,并通过对例程进行功能认识、代码分析和重新生成,逐步将例程变成自己的应用实现。
建议有心自学的读者:先学习《STM32F10×××参考手册》的前面几章,对STM32有个初步的认识;再学习《ARM Cortex-M3权威指南》,无须看完、吃透,对其内核有个了解即可;然后阅读STM32CubeMX用户手册和STM32CubeF1用户手册,使用STM32CubeF1软件包提供的例程,结合ST公司提供的HAL固件库的源代码及其用户手册UM1850,有针对性地学习《STM32F10×××参考手册》的相关章节。本书正是根据上述流程来引导读者使用STM32CubeMX和MDK-ARM学习STM32微控制器的,书中并没讲晦涩高深的内容,只是在例程中适当的地方加以注释,以便新手轻松入门、少走弯路。
目前,市面上的STM32开发板品种繁多,但没有本质上的区别,不同的只是开发板上的外设数量有多有少。本书选择的开发板是ST公司的Nucleo-F103RB,并基于这个开发板的原理图来分析例程,最后使用STM32CubeMX重建例程。对于STM32入门者来说,几乎所有的开发板均可满足要求,只要依据自身的技术需求进行选择就行。
在本书编写过程中,段富军、高维娜、黄得建、聂运中、王盛等曾参与了前一版的编写工作,刘帅、黄雅琴、周乐平等也提供了大量的帮助,在此表示感谢。
最后,感谢我的家人和朋友,特别是我的父母,在社会压力较大的今天,能如此放任我自由地写作而不给太多的压力,实属不易。另外,感谢在洛阳求学和工作时的师长和同事——刁海南、张文勇、郭锐、齐文钊、陈剑、李为民、赵博、尹国利、谢永进等,我是在参加工作后才走上嵌入式开发这条路的,若不是这些前辈的指点,我也就没有如今的成绩;由衷感谢在大学、中学谆谆教导过我的老师——杨明祥、高克权、杨万才、李小申、程东明、张晓红、黎蔚、王辉、刘勇等,杨明祥老师帮助我走进了洛阳工学院,洛阳工学院数理学院的老师培养了我的良好的逻辑分析能力,计算机方向的老师帮我踏入IT这个行业;还要感谢读者和学生,特别是那些来信给出建议的读者和学生,如郭凯、张锋、王帅阳、牛鹏举、竹显涛、刘帅、宋文帅等,他们的感谢、鼓励和建议为我继续写作增添了动力。最后,感谢人生路上伴我走过的朋友们。
“学然后知不足,教然后知困”。由于本人水平有限,书中难免存在疏漏之处敬请广大读者批评指正。如果读者在阅读本书时有疑问或建议,可以通过邮件(young45@126.com)、微信(IT_LaoYang)与我沟通。
杨百军