
这是一本介绍如何使用STM32Cube组件学习STM32微控制器的入门图书,也是一名工程师自身学习STM32微控制器的经验总结。全书围绕STM32F10×××参考手册,结合STM32CubeF1软件包提供的例程,参考Cortex-M3编程手册等资料,全面、系统地对STM32F103的各个功能项进行分析和讲解,并通过可视化图形配置工具STM32CubeMX重新生成例程。本书介绍的学习方法几乎可以适用于任何一款STM32微控制器的芯片。 本书适合STM32微控制器初学者和使用STM32微控制器从事项目开发的工程技术人员阅读使用,也可以作为高等学校自动控制、智能仪器仪表、电力电子、机电一体化等相关专业的教学用书。
前言 前些年我编写《轻松玩转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公司没有推出基于该系列微控制器的SPL(至少目前尚未推出)。由此可见,学习和应用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@126com)、微信(IT_LaoYang)与我沟通。 杨百军
第1章 选择开发板 1.1 ST公司的STM32开发板 1.2 国产的STM32开发板 1.3 Nucleo-F103RB开发板 思考与练习 第2章 走近STM32 2.1 认识STM32 2.2 STM32与Cortex-M3的关系 2.3 Cortex-M3与ARM 思考与练习 第3章 认识MDK-ARM 3.1 开发工具介绍 3.2 MDK-ARM的安装与注册 3.2.1 MDK-ARM的安装 3.2.2 注册MDK-ARM 3.3 从例程入手 3.3.1 了解MDK-ARM 3.3.2 例程Blinky 思考与练习 第4章 初识STM32Cube 4.1 STM32CubeMX 4.2 STM32Cube软件包 4.3 STM32CubeF1软件包的例程 思考与练习 第5章 跑马灯实验 5.1 例程GPIO_IOToggle 5.2 分析例程GPIO_IOToggle 5.2.1 解析HAL_Init函数 5.2.2 解析SystemClock_Config函数 5.2.3 解析LED2_GPIO_CLK_ENABLE函数 5.2.4 解析HAL_GPIO_Init函数 5.2.5 为何LED能闪烁 5.3 新建例程 5.3.1 重建例程 5.3.2 完善例程 思考与练习 第6章 外部中断 6.1 例程GPIO_EXTI 6.2 分析例程 6.2.1 分析例程GPIO_EXTI 6.2.2 解析stm32f10x_it.c 6.3 移植例程 6.3.1 新建例程MyEXTI 6.3.2 外部中断小结 6.3.3 硬件仿真 思考与练习 第7章 串口通信 7.1 例程UART_Printf 7.1.1 使用例程 7.1.2 新建例程 7.1.3 分析例程 7.2 例程ComPolling 7.2.1 例程介绍 7.2.2 分析例程 7.2.3 重建例程 7.3 例程UART_TwoBoards_ComIT 7.3.1 例程介绍 7.3.2 分析例程 7.3.3 重建例程 7.3.4 完善例程 思考与练习 第8章 DMA控制器 8.1 认识DMA控制器 8.2 例程UART_HyperTerminal_DMA 8.2.1 例程介绍 8.2.2 分析例程 8.2.3 重建例程 思考与练习 第9章 完美定时器 9.1 例程TIM_TimeBase 9.1.1 例程介绍 9.1.2 分析例程 9.1.3 重建例程 9.2 例程TIM_DMA 9.2.1 例程介绍 9.2.2 分析例程 9.2.3 重建例程 思考与练习 第10章 模/数转换器(ADC) 10.1 了解ADC 10.2 例程ADC_Sequencer 10.2.1 例程介绍 10.2.2 分析例程 10.2.3 重建例程 思考与练习 第11章 实时操作系统FreeRTOS 11.1 了解操作系统 11.2 例程FreeRTOS_ThreadCreation 11.2.1 例程介绍 11.2.2 分析例程 11.2.3 重建例程 11.2.4 完善例程 11.2.5 扩展例程 思考与练习 参考文献