1、 嵌入式技术与应用丛书 STM32F0 系列 Cortex-M0 原理与实践 张燕妮 主 编 丁维才 副主编 内 容 简 介 本书以实际应用开发所需要的知识为主线并重点介绍如何解决开发过程中遇到的问题。全书共分为 17章。首先分析了 STM32F0 x 的性能及价格优势所在,即为何选择 STM32F0 x,然后书中结合大量实例详细讲解了系统定时器、GPIO、NVIC、UART、I2C、SPI、ADC、DAC、PWM、定时器、CAN 等外设,使用STM32F0 x 的固件库写各外设的例程,接着讲解 RTX 实时操作系统以及嵌入式程序结构的 4 种模式优缺点对比,最后分析了 USB 电流/电压监测
2、需求,以及如何根据需求设计相应的解决方案。本书可作为单片机用户的自学用书、嵌入式工程技术人员的学习和培训用书,也可作为大学生学习单片机的教材。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 STM32F0 系列 Cortex-M0 原理与实践/张燕妮主编.北京:电子工业出版社,2016.2(嵌入式技术与应用丛书)ISBN 978-7-121-28086-3.S .张 .微处理器 .TP332.3 中国版本图书馆 CIP 数据核字(2016)第 012111 号 责任编辑:刘海艳 印 刷:北京中新伟业印刷有限公司 装 订:三河市鹏成印业有限
3、公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编 100036 开 本:7871092 1/16 印张:17 字数:435 千字 版 次:2016 年 2 月第 1 版 印 次:2016 年 2 月第 1 次印刷 印 数:3 000 册 定价:48.00 元(含 DVD 光盘 1 张)凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。服务热线:(010)88258888。前 言 如果问一个设计人员,产品设计时,选择器件最关心的因素是什么,那么跟
4、得上形势发展可能是常见的、很重要的一个因素。如果问老板选择器件最关心的因素是什么,可能只有“便宜”两个字。ST 公司的 STM32F0 x 芯片是一款基于 Cortex-M0,兼顾性能与价格优势于一体的 32 位处理器。ST 公司的 Cortex-M3 系列产品已经在国内拥有大量客户群体,STM32F0 x 芯片的用户群也在日益扩大中。Cortex-M0 芯片具有小型、低功耗、低闸数、精简程序代码的特点,内建各种模拟与混合信号组件及多种高速通信能力器件,开发人员可以直接跳过 16 位系统,以接近 8 位系统的成本开销获取 32 位系统的性能。Cortex-M0 芯片是学习 ARM 处理器的最佳
5、入门选择。STM32F0 x 在 Cortex-M0 芯片基础上继承了 ST 公司 Cortex-M3 系列产品优点,并对一些不足之处进行了修正(例如 I2C 外设),还增加了一些优秀功能(例如 USART 的超时检测),适用于工业控制器、家庭自动化、打印机和白色家电、游戏机、DVD/蓝光播放机和音频/视频接收机等。STM32F0 x 具有如下特点。?百货迎百客,按需选择:STM32F0 x 根据外设情况,将产品划分成多种系列,并不是一种大而全的芯片,用户可根据产品需求与成本选用不同芯片。例如,对于是否需要 CAN 通信就限制选择范围与成本。?一招鲜吃遍天下:STM32F0 x 家族成员比较多
6、,但不代表各自为政。STM32F0 x 家族的外设与引脚位置不是一对一。在相同封装下 STM32F0 x 芯片引脚定义相同,通过外设复用选用不同外设。而且借助 ST 公司提供 STM32F0 x 固件库开发的应用程序可在 STM32F0 x 家族(只要包含该外设)随意运行。书中的代码除了 CAN 通信一章,程序可以在各种 STM32F0 x 上运行。全书共 17 章。其中第 14 章是基础;第 515 章是外设功能讲解;第 16、17 章是综合实例与高级功能。第 1 章首先讲解相比 8 位机,Cortex-M0 的优势,以及如何从 8 位机过渡到 Cortex-M0,并说明 Cortex-M0
7、 的基础与特征,主要有寄存器、存储器映射、系统总线、存储器保护单元、嵌套中断控制器;最后一部分会说明 STM32F0 x 在同类产品的优势以及特点,为何选用 STM32F0 x 进行产品的开发。第 2 章主要讲解了进行 STM32F0 软件开发需要准备的条件,分别介绍了 MDK 以及J-ink、U-ink、Stlink 仿真器。MDK 是原 Keil 公司的产品,对于熟悉 Keil C51 单片机开发的用户会感受到 ARM 公司对 C8051 用户的重视,也非常欢迎该用户群体过渡到 Cortex-M0 的开发中。第 3 章讲解有关硬件设计的基础,主要包括 STM32F0 x 的电源、时钟,以及
8、本书所使用的电路图。IV STM32F0 系列 Cortex-M0 原理与实践 第 4 章讲解进行 STM32F0 x 软件开发的固件库内容。固件库内容涉及了 ARM 公司的CMSIS 标准及 ST 公司的固件库标准。其中 CMSIS 是理解目前 ARM 对软件组织结构以及系统启动文件的规范,也是目前所有 Cortex-M 内核 CPU 软件设计的要求与基础。最后讲解了使用 ST 公司固件库建立工程文件的过程。第 5 章第 14 章讲解了 STM32F0 x 的系统定时器、GPIO、NVIC、UART、I2C、SPI、ADC、DAC、PWM、定时器、CAN。每 1 章均提供了 12 个实际项目
9、中的使用实例,涉及实际开发中使用各种芯片的注意事项以及技巧(或者说作者的经验教训)。第 16 章讲解 RTX 操作系统,介绍 Keil 自带的实时操作系统的原理与使用过程。结合第 4 章的超级循环和中断模式,读者可根据自己产品特点选用相应的软件程序框架。第 17 章是关于如何使用 STM32F0 x 设计一个 USB 的电流、电压检测器,从设计需求、硬件设计、软件设计等方面进行详细分析,引导读者如何做产品设计、开发。本书的第 18 章、第 1011 章和第 1317 章由张燕妮编写,第 9 章由谢玲和王洪玲编写,第 12 章由贾芳和丁维才编写,同时丁维才对全书代码进行了验证。书中讲解的源代码只
10、摘取了与相应章节配套的部分进行了说明,需要完整代码,可从电子工业出版社电子信息出版分社(http:/)下载。感谢电子工业出版社的王敬栋、刘海艳两位编辑对本书的大力支持。感谢家人与朋友的理解和支持。由于 STM32F0 x 家族的新成员仍在不断增加中,并且作者水平有限以及时间仓促,难免有差错和不足之处恳请读者批评指正。张燕妮 目 录 第 1 章 低成本单片机世界的入侵者Cortex-M0 1 1.1 相比 8 位(16 位)机为何要选择 Cortex-M0 1 1.1.1 性能对比 2 1.1.2 8 位和 16 位体系结构的缺点 3 1.1.3 Cortex 的软件移植性 3 1.2 如何从
11、8 位机过渡到 Cortex-M0 4 1.3 编程模型 7 1.3.1 处理器的模式 7 1.3.2 堆栈 8 1.3.3 内核寄存器 8 1.4 存储器模型 11 1.4.1 存储区、类型和属性 12 1.4.2 存储器系统的存储器访问次序 12 1.4.3 存储器访问的行为 13 1.4.4 软件的存储器访问顺序 13 1.5 异常模型 14 1.6 电源管理 19 1.7 指令集 20 1.8 Cortex-M0 内核外设 23 1.9 STM32F0 系列 23 1.10 小结 24 第 2 章 开发软件准备 25 2.1 MDK-ARM 开发环境 25 2.1.1 Vision4
12、IDE 概述 25 2.1.2 编译、调试现有 MDK 工程 26 2.1.3 创建一个 Keil 新项目 27 2.2 仿真器 36 2.2.1 ST-Link 36 2.2.2 J-Link 与 U-Link2 37 2.3 WinMerge 37 2.4 小结 39 VI STM32F0 系列 Cortex-M0 原理与实践 第 3 章 硬件基础 40 3.1 STM32F0 产品特征 40 3.2 系统及存储器概述 41 3.2.1 系统构架 41 3.2.2 存储器组织 42 3.2.3 启动配置 42 3.3 电源控制(PWR)43 3.3.1 电源 43 3.3.2 电源管理器
13、44 3.3.3 低功耗模式 45 3.3.4 PWR 固件库 46 3.4 复位和时钟控制(RCC)46 3.4.1 复位 46 3.4.2 时钟 47 3.4.3 低功耗模式 51 3.5 RCC 固件库 52 3.6 硬件设计 53 3.7 小结 56 第 4 章 STM32F0 的固件库 57 4.1 ARM 的 C 语言 57 4.1.1 嵌入式 C 语言的几个特殊之处 57 4.1.2 寄存器访问方式总结 59 4.1.3 struct 字节对齐 60 4.1.4 使用 volatile 62 4.1.5 RAM 中运行程序 62 4.1.6 软件结构 64 4.2 CMSIS 6
14、5 4.2.1 CMSIS 主要构成 65 4.2.2 使用 CMSIS 66 4.3 STM32F0 xx 标准外设库 67 4.3.1 标准外设库概述 67 4.3.2 STM32F0 xx 外设驱动文件说明 68 4.3.3 STM32F0 xx 的 CMSIS 文件说明 69 4.3.4 库文件夹说明 70 4.3.5 固件库文件 71 4.3.6 MDK ARM 中使用固件库实例 74 4.4 小结 75 VII 目录第 5 章 通用 I/O(GPIO)76 5.1 GPIO 引脚与功能 76 5.1.1 引脚描述 76 5.1.2 GPIO 功能描述 77 5.1.3 通用 I/O
15、(GPIO)79 5.1.4 I/O 引脚的复用功能和重映射 79 5.1.5 外部中断/唤醒线 80 5.1.6 输入配置 80 5.1.7 输出配置 80 5.1.8 复用功能配置 80 5.1.9 模拟配置 81 5.1.10 HSE 或 LSE 引脚用作 GPIO 81 5.1.11 备份域供电下 GPIO 引脚的使用 81 5.1.12 GPIO 复用功能寄存器 81 5.2 GPIO 固件库 83 5.3 GPIO 应用实例 84 5.4 小结 87 第 6 章 中断和事件 88 6.1 嵌套向量中断控制器(NVIC)88 6.1.1 NVIC 概述 88 6.1.2 电平中断和脉
16、冲中断 90 6.2 中断和异常向量 91 6.3 扩展中断和事件控制器(EXTI)93 6.3.1 框图 93 6.3.2 事件管理 94 6.3.3 功能说明 94 6.3.4 外部和内部中断/事件线映像 95 6.4 EXTI 固件库 96 6.5 EXTI 中断实例 96 6.6 HardFault 异常调试实例 98 6.7 小结 99 第 7 章 通用同步异步收发器(USART)100 7.1 USART 主要功能 100 7.2 STM32F0 x 的 USART 功能实现 101 7.3 USART 功能描述 102 7.3.1 USART 框图 102 7.3.2 USART 字符描述 103 VIIISTM32F0 系列 Cortex-M0 原理与实践 7.3.3 发送器 104 7.3.4 接收器 106 7.3.5 多机通信 110 7.3.6 Modbus 通信 111 7.3.7 LIN(本地互联网络)模式 112 7.3.8 USART 同步模式 113 7.3.9 单线半双工通信 114 7.3.10 RS-232 硬件流控制和 RS-485 驱动使能