具体描述
内容简介
本书以ST公司的STM32F0x2系列ARM处理器为例,从零开始,手把手地教初学者学习ARM设计知识。在介绍STM32F0x2系列各单元基本特性的同时,使用入门难度低、程序较短且能立竿见影的初级实例,循序渐进地帮助初学者掌握ARM的设计知识,以实践为主,辅以理论。
本书的实例均经作者实际测试并能在实验板上正常运行,实用性非常强,读者既可以直接用于产品,也可以进一步改良升级。同时本书贯彻“手把手教你学系列丛书”的教学方式。
本书可用作大学本科或专科、中高等职业技术学校、电视大学等的教学用书,也可作为ARM爱好者的入门自学用书。
目录
基础篇
第1章 概 述………………………………………………………………………… 3
1.1 采用C语言编程……………………………………………………………… 3
1.2 C语言突出的优点…………………………………………………………… 4
1.3 寄存器操作与库函数操作…………………………………………………… 6
1.4 ARM 嵌入式处理器的开发环境…………………………………………… 7
第2章 ARM 发展简介……………………………………………………………… 9
2.1 ARM 是什么………………………………………………………………… 9
2.2 嵌入式处理器RISC技术简介……………………………………………… 9
2.3 ARM 处理器的发展………………………………………………………… 10
2.4 ARM 处理器的应用………………………………………………………… 14
2.5 ARM 处理器的优点………………………………………………………… 15
2.6 ARM 的优势………………………………………………………………… 15
2.7 ARM 未来发展展望………………………………………………………… 16
第3章 ARM Cortex-M0处理器内核架构体系…………………………………… 18
3.1 STM32F072的特性和结构………………………………………………… 19
3.2 STM32F072存储器和外设寄存器边界映射……………………………… 20
3.3 STM32F072系统配置……………………………………………………… 25
3.4 STM32F072中断控制……………………………………………………… 30
3.5 STM32F072引脚封装……………………………………………………… 32
第4章 开发/实验工具介绍及第一个STM32F072入门程序…………………… 37
4.1 RealView MDK5.15开发环境及厂商软件包安装……………………… 37
4.2 CMSIS简介………………………………………………………………… 38
4.3 STM32F0x2实验工具……………………………………………………… 41
4.4 STM32F0x2系列开发过程的文件管理及项目设置……………………… 45
4.5 STM32F0x2开发流程……………………………………………………… 52
4.6 第一个STM32F072入门程序……………………………………………… 52
第5章 C语言基础知识…………………………………………………………… 59
5.1 C语言的标识符与关键字…………………………………………………… 59
5.2 数据类型……………………………………………………………………… 60
5.3 常量、变量及存储方式……………………………………………………… 61
5.4 数 组………………………………………………………………………… 62
5.5 C语言的运算………………………………………………………………… 65
5.6 流程控制……………………………………………………………………… 72
5.7 函 数………………………………………………………………………… 77
5.8 指 针………………………………………………………………………… 80
5.9 结构体………………………………………………………………………… 84
5.10 共用体……………………………………………………………………… 90
5.11 枚 举……………………………………………………………………… 92
5.12 KeilRealView MDK在ARM C语言开发中的常用方法……………… 93
5.13 中断函数…………………………………………………………………… 94
入门篇
第6章 STM32F0x2复位和系统时钟……………………………………………… 99
6.1 复 位………………………………………………………………………… 99
6.2 时 钟……………………………………………………………………… 100
6.3 低功耗模式………………………………………………………………… 106
6.4 RCC库函数………………………………………………………………… 107
6.5 配置系统时钟频率………………………………………………………… 117
第7章 STM32F0x2通用I/O 的特性及应用…………………………………… 120
7.1 通用I/O的特点…………………………………………………………… 120
7.2 GPIO库函数……………………………………………………………… 127
7.3 STM32F072的GPIO输出实验———控制发光二极管闪烁…………… 129
7.4 软件延时较准确的GPIO输出实验———控制发光二极管闪烁………… 131
7.5 STM32F072的GPIO输入/输出实验———按键控制发光二极管闪烁……………………………………………………………………………… 133
第8章 中断/事件及应用设计…………………………………………………… 139
8.1 嵌套向量中断控制器的特点……………………………………………… 139
8.2 外部中断/事件控制器……………………………………………………… 141
8.3 外部和内部中断/事件线路映像…………………………………………… 143
8.4 MISC库函数及EXTI库函数…………………………………………… 144
8.5 STM32F072的外中断实验———控制发光二极管亮/灭………………… 145
8.6 STM32F072的系统节拍定时器中断实验———控制发光二极管精确亮/灭……………………………………………………………………………… 150
第9章 TFT-LCD 彩色液晶显示器的驱动显示………………………………… 154
9.1 TFT-LCD彩色液晶显示器……………………………………………… 154
9.2 TFT-LCD彩色液晶显示器模块的引脚功能…………………………… 155
9.3 ILI9325/ILI9328几个重要的控制寄存器及控制命令…………………… 156
9.4 TFT-LCD彩色液晶显示器显示的相关设置步骤……………………… 160
9.5 STM32F072的TFT-LCD驱动实验———显示多种颜色及图形………… 161
第10章 SPI总线特性及W25Q16SPIFlash存储器驱动……………………… 181
10.1 SPI的主要特点…………………………………………………………… 181
10.2 SPI功能描述……………………………………………………………… 182
10.3 SPI中断…………………………………………………………………… 189
10.4 SPI库函数………………………………………………………………… 190
10.5 W25Q16SPIFlash存储器……………………………………………… 198
10.6 W25Q 系列存储器的特点………………………………………………… 199
10.7 W25Q 系列存储器的引脚封装及配置…………………………………… 201
10.8 W25Q 系列存储器的引脚功能…………………………………………… 202
10.9 W25Q 系列存储器的控制/状态寄存器………………………………… 203
10.10 W25Q 系列存储器的状态寄存器存储保护模块……………………… 204
10.11 W25Q 系列存储器的操作指令………………………………………… 206
10.12 中英文显示的原理……………………………………………………… 217
10.13 编写生成CHNGBK_MAKE.hex应用程序的源代码……………… 218
10.14 中文字库的下载………………………………………………………… 220
10.15 STM32F072的TFT-LCD驱动实验———显示多种颜色、图形及中英文字符…………………………………………………………………… 223
第11章 通用同步异步串行收发器的特性及应用……………………………… 239
11.1 USART简介……………………………………………………………… 239
11.2 USART中断……………………………………………………………… 246
11.3 USART库函数…………………………………………………………… 247
11.4 STM32F072的串口通信实验———与PC实现通信…………………… 249
第12章 RTC实时时钟的特性及应用…………………………………………… 254
12.1 RTC模块的主要特性…………………………………………………… 254
12.2 RTC初始化及配置……………………………………………………… 256
12.3 RTC中断………………………………………………………………… 256
12.4 RTC库函数……………………………………………………………… 257
12.5 STM32F072的实时时钟实验———获取当前时间……………………… 261
第13章 定时器与计数器的特性及应用………………………………………… 272
13.1 高级控制定时器TIM1…………………………………………………… 272
13.2 通用定时器TIM2/TIM3………………………………………………… 274
13.3 通用定时器TIM14 ……………………………………………………… 275
13.4 通用定时器TIM15/TIM16/TIM17 …………………………………… 276
13.5 基本定时器TIM6/TIM7………………………………………………… 279
13.6 TIM 库函数……………………………………………………………… 279
13.7 STM32F072定时器的定时中断实验———LED1每500ms闪烁一次……………………………………………………………………………… 285
13.8 STM32F072定时器1的输入捕获实验………………………………… 288
13.9 STM32F072定时器3的比较匹配中断实验…………………………… 291
13.10 STM32F072定时器1的PWM 输出实验…………………………… 294
13.11 红外遥控信号接收解调实验…………………………………………… 298
第14章 数/模转换器的特性及应用……………………………………………… 306
14.1 DAC的特点……………………………………………………………… 306
14.2 DAC功能设置…………………………………………………………… 307
14.3 DAC库函数……………………………………………………………… 310
14.4 STM32F072的DAC输出实验………………………………………… 311
第15章 模/数转换器的特性及应用……………………………………………… 318
15.1 ADC的主要特性………………………………………………………… 318
15.2 ADC的功能及设置……………………………………………………… 320
15.3 转换的外部触发和触发极性……………………………………………… 324
15.4 数据对齐…………………………………………………………………… 324
15.5 温度传感器………………………………………………………………… 325
15.6 电池电压监测……………………………………………………………… 326
15.7 ADC中断………………………………………………………………… 326
15.8 ADC库函数……………………………………………………………… 326
15.9 STM32F072的ADC转换实验………………………………………… 329
第16章 DMA 控制器的特性及应用……………………………………………… 333
16.1 DMA 的主要特性………………………………………………………… 333
16.2 DMA 的功能……………………………………………………………… 334
16.3 DMA 库函数……………………………………………………………… 340
16.4 STM32F072的ADC转换DMA 数据传送实验……………………… 342
第17章 I2C总线接口的特性及应用…………………………………………… 348
17.1 I2C的主要特性…………………………………………………………… 348
17.2 I2C功能描述……………………………………………………………… 349
17.3 I2C库函数………………………………………………………………… 359
17.4 STM32F072的I2C通信实验———读/写AT24C02 …………………… 362
第18章 比较器的特性及应用…………………………………………………… 380
18.1 比较器的主要特性………………………………………………………… 380
18.2 比较中断…………………………………………………………………… 381
18.3 COMP库函数…………………………………………………………… 381
18.4 STM32F072的模拟比较器实验………………………………………… 383
第19章 bxCAN 的特性及应用…………………………………………………… 391
19.1 bxCAN 的主要特性……………………………………………………… 391
19.2 bxCAN 工作模式及网络拓扑…………………………………………… 392
19.3 bxCAN 功能描述………………………………………………………… 395
19.4 bxCAN 中断……………………………………………………………… 403
19.5 bxCAN 库函数…………………………………………………………… 404
19.6 STM32F072的CAN 通信实验………………………………………… 406
第20章 看门狗定时器的特性及应用…………………………………………… 412
20.1 独立看门狗………………………………………………………………… 412
20.2 窗口看门狗………………………………………………………………… 414
20.3 IWDG库函数……………………………………………………………… 417
20.4 STM32F072的独立看门狗实验………………………………………… 418
提高篇
第21章 电阻式触摸屏的原理及设计…………………………………………… 425
21.1 低电压输入/输出触摸屏控制器ADS7846简介……………………… 425
21.2 ADS7846的工作原理…………………………………………………… 427
21.3 ADS7846的控制字……………………………………………………… 429
21.4 笔中断接触输出…………………………………………………………… 431
21.5 STM32F072的触摸屏测试实验………………………………………… 431
第22章 2.4G 无线收发模块NRF24L01的特性及应用……………………… 444
22.1 NRF24L01的主要特性…………………………………………………… 444
22.2 NRF24L01的结构及引脚功能…………………………………………… 444
22.3 NRF24L01的工作模式…………………………………………………… 446
22.4 NRF24L01的工作原理…………………………………………………… 446
22.5 配置字……………………………………………………………………… 447
22.6 STM32F072的NRF24L01通信实验…………………………………… 447
第23章 FatFS文件系统及电子书实验………………………………………… 463
23.1 FatFS文件系统的特点…………………………………………………… 464
23.2 FatFS文件系统分析……………………………………………………… 464
23.3 FatFS文件系统移植……………………………………………………… 466
23.4 SD卡的初始化及文件系统实验………………………………………… 470
23.5 电子书实验………………………………………………………………… 496
第24章 数码相框设计显示及GUI实验………………………………………… 514
24.1 简易数码相框的构成和图像文件的处理………………………………… 514
24.2 数码相框设计显示实验…………………………………………………… 515
24.3 GUI ……………………………………………………………………… 518
24.4 GUI设计实验…………………………………………………………… 519
第25章 RTXKernel实时操作系统……………………………………………… 542
第26章 RTXKernel的延时及事件设计实验…………………………………… 579
第27章 RTXKernel内存池及邮箱的设计实验………………………………… 599
第28章 RTXKernel的互斥设计实验…………………………………………… 609
第29章 RTXKernel信号量的传送与接收设计实验…………………………… 613
第30章 RTXKernel综合设计实验……………………………………………… 617
第31章 μCOS-II实时操作系统………………………………………………… 642
第32章 μCOS-II实时操作系统入门及移植…………………………………… 668
第33章 μCOS-II事件标志组设计实验………………………………………… 677
第34章 μCOS-II消息邮箱设计实验…………………………………………… 697
第35章 μCOS-II动态内存分配设计实验……………………………………… 703
第36章 μCOS-II消息队列设计实验…………………………………………… 708
第37章 μCOS-II互斥量设计实验……………………………………………… 714
第38章 μCOS-II信号量设计实验……………………………………………… 720
第39章 μCOS-II应用设计实验………………………………………………… 726
应用篇
第40章 使用DS18B20测量温度及使用DHT11测量温湿度………………… 755
第41章 RS 485通信组网设计………………………………………………… 778
第42章 NRF24L01无线通信组网设计………………………………………… 797
第43章 CAN 通信组网设计……………………………………………………… 820
掌控嵌入式开发的微小力量:STM32F0x2 系列与 ARM Cortex-M0 的深度解析 踏入嵌入式开发的广阔天地,微控制器(MCU)扮演着至关重要的角色。而在众多 MCU 架构中,ARM Cortex-M 系列以其高效、低功耗和广泛的应用场景,成为行业内的翘楚。本书《手把手教你学ARM Cortex-M0:基于STM32F0x2系列》将为您提供一条通往 ARM Cortex-M0 微控制器开发世界的清晰路径,尤其聚焦于意法半导体(STMicroelectronics)备受欢迎的 STM32F0x2 系列。这本书并非仅仅是技术的堆砌,而是一次循序渐进的学习之旅,旨在让即使是初涉嵌入式领域的读者,也能自信地驾驭从硬件原理到软件实现的各个环节。 为什么选择 ARM Cortex-M0 和 STM32F0x2? ARM Cortex-M0 是 ARM 公司为成本敏感、低功耗应用设计的入门级 Cortex-M 内核。它以其简洁的指令集(Thumb 指令集)和高效的处理能力,在物联网设备、消费电子、工业控制等领域展现出强大的生命力。而 STM32F0x2 系列则是意法半导体针对这一内核精心打造的一系列高性能、低功耗的微控制器。该系列凭借其丰富的外设资源、优异的性能功耗比以及极具竞争力的成本,已成为众多嵌入式项目设计的理想选择。 本书之所以选择 Cortex-M0 和 STM32F0x2 作为核心教学内容,是因为它们完美地代表了当前嵌入式开发的主流趋势。通过掌握这一领域的知识,您不仅能够胜任当前的市场需求,更能为未来更复杂的嵌入式系统打下坚实的基础。这本书将带您深入理解 Cortex-M0 的架构特性,剖析 STM32F0x2 系列的硬件构成,并通过大量的实践案例,让您亲身体验从零开始构建嵌入式系统的过程。 本书将为您打开的知识之门: 本书的设计宗旨是“授人以渔”,而非仅仅提供现成的解决方案。因此,我们将从最基础的概念入手,逐步深入,确保读者能够真正理解每个环节背后的原理。 第一部分:基石——ARM Cortex-M0 架构与 STM32F0x2 硬件解析 在学习任何微控制器之前,理解其核心架构是至关重要的。本部分将为您详细介绍 ARM Cortex-M0 的核心概念,包括: Cortex-M0 架构概览: 深入剖析 Cortex-M0 内核的设计理念,包括其精简指令集(Thumb/Thumb-2)、流水线设计、中断处理机制等。您将理解其如何在保证高性能的同时,实现极低的功耗。 内存模型与地址空间: 理解 Cortex-M0 的内存映射,包括代码区、数据区、外设寄存器区等,以及不同区域的访问权限和特性。 中断与异常处理: 中断是嵌入式系统中实现实时响应的关键。您将学习 Cortex-M0 的中断控制器(NVIC)如何工作,包括中断向量表、中断优先级、中断使能与禁用等概念,并理解异常发生时的处理流程。 STM32F0x2 系列微控制器详解: 聚焦于 STM32F0x2 系列的具体型号,详细介绍其内部硬件资源,包括: CPU 内核: 再次回顾 Cortex-M0 在 STM32F0x2 中的具体实现。 存储器: Flash 存储器和 SRAM 的容量、特性以及访问方式。 时钟系统: 理解 STM32F0x2 的各种时钟源(HSE, HSI, LSE, LSI, PLL)以及时钟树的配置,这对于系统性能和功耗至关重要。 通用输入/输出(GPIO): 详细讲解 GPIO 的工作模式(输入、输出、复用、模拟)、上下拉配置、速度等,这是连接外部世界的基础。 中断控制器(NVIC): 再次深入讲解 STM32F0x2 系列所集成的 NVIC,包括其中断源、中断向量、中断优先级分组等。 电源管理: 学习 STM32F0x2 的各种低功耗模式(Sleep, Stop, Standby),以及如何通过电源管理策略来优化功耗。 外设接口: 详细介绍 STM32F0x2 系列丰富的片内外设,例如: 定时器(Timers): 包括通用定时器(TIM2, TIM3, TIM6, TIM7)、基本定时器、高级定时器(在部分型号中),以及它们在 PWM 生成、脉冲测量、定时计数等方面的应用。 通信接口: USART(通用同步异步收发器)、SPI(串行外设接口)、I2C(集成电路总线),以及 USB (Universal Serial Bus) 等,这些接口是实现设备间通信的关键。 模数转换器(ADC): 学习 ADC 的工作原理、采样模式、转换速率以及各种校准机制,用于处理模拟信号。 数模转换器(DAC): 了解 DAC 的工作原理,用于输出模拟信号。 看门狗定时器(WDT): 理解看门狗定时器在系统复位和提高系统可靠性方面的作用。 实时时钟(RTC): 掌握 RTC 的使用,用于提供时间基准。 其他外设: 如 DMA(直接内存访问)、CRC(循环冗余校验)、温度传感器等。 第二部分:软件启航——从零开始的嵌入式编程实践 掌握了硬件基础,接下来我们将进入软件开发的实践环节。本书将引导您使用当下主流的嵌入式开发工具链,让您能够轻松地编写、调试和部署代码。 开发环境搭建: IDE 选择与配置: 详细介绍如何安装和配置主流的嵌入式集成开发环境(IDE),例如 Keil MDK、STM32CubeIDE 等,并介绍它们的常用功能,如代码编辑、编译、链接、调试等。 编译器与调试器: 理解 GCC 编译器和 GDB 调试器在嵌入式开发中的作用。 STM32CubeMX 的妙用: 深入讲解意法半导体提供的图形化配置工具 STM32CubeMX,如何通过它来初始化 STM32F0x2 的各种外设、配置时钟、生成底层驱动代码,极大地简化了开发流程。 C 语言在嵌入式中的应用: 指针、位操作与内存管理: 强调 C 语言在嵌入式开发中的重要性,特别是在硬件寄存器操作、位操作和内存管理方面的技巧。 寄存器级编程: 教授直接操作硬件寄存器的基本方法,理解寄存器的功能和访问方式,这是理解底层工作原理的关键。 库函数的使用: 学习如何利用 STM32CubeMX 生成的标准外设库(HAL 库或 LL 库),高效地调用各种外设功能。 构建第一个嵌入式程序: 点亮 LED: 从最经典的点亮 LED 程序开始,让您亲身体验代码烧录和硬件交互的整个过程。 按键输入检测: 学习如何读取按键的状态,并根据按键输入控制 LED 的状态,这是实现简单人机交互的基础。 深入理解 STM32F0x2 的外设编程: GPIO 编程实战: 学习如何配置 GPIO 作为输入输出,实现更复杂的外设控制。 定时器应用: 通过实例讲解定时器在 PWM 生成(如 LED 调光、电机速度控制)、延时、周期性事件触发等方面的应用。 串口通信: 学习如何使用 USART 进行设备间的串行通信,例如与 PC 之间的调试信息交互,或者与 GPS 模块、蓝牙模块等通信。 SPI/I2C 通信: 掌握 SPI 和 I2C 协议,学习如何连接和控制外部传感器、EEPROM 等设备。 ADC/DAC 应用: 学习如何使用 ADC 读取模拟传感器数据(如光敏电阻、温度传感器),以及如何使用 DAC 输出模拟信号。 中断驱动编程: 中断响应机制: 学习如何编写中断服务函数(ISR),实现高效的中断响应,例如按键中断、定时器中断等。 中断嵌套与优先级管理: 理解中断优先级的作用,并学习如何处理多个中断源的优先级问题。 DMA(直接内存访问)的使用: DMA 的优势: 理解 DMA 如何减轻 CPU 负担,提高数据传输效率。 DMA 传输模式: 学习 DMA 的各种工作模式,并将其应用于 ADC 连续转换、串口数据传输等场景。 RTOS(实时操作系统)入门: RTOS 的概念与优势: 介绍 RTOS 的基本概念,如任务、调度、信号量、队列等,以及它在复杂嵌入式系统中的作用。 FreeRTOS 或 RT-Thread 简介: (根据具体内容可能会选择其中一个或多个主流 RTOS 进行初步介绍和简单示例)让您了解如何在 STM32F0x2 上运行简单的 RTOS 应用,为后续更复杂的项目开发打下基础。 第三部分:进阶探索与项目实战 在掌握了基础知识和常用外设编程后,本书将引导您进行更深入的探索,并提供一些经典的嵌入式项目作为实践。 低功耗设计策略: 功耗分析方法: 学习如何分析和测量嵌入式系统的功耗。 低功耗模式的深入应用: 结合具体的应用场景,详细讲解如何利用 Sleep、Stop、Standby 等低功耗模式来显著降低系统功耗。 功耗优化技巧: 介绍各种软件和硬件层面的功耗优化技巧。 内存管理与代码优化: 内存使用分析: 学习如何查看和分析程序的内存占用情况。 代码效率提升: 探讨如何通过算法优化、数据结构选择等方式来提升代码执行效率,减少 CPU 占用。 调试技巧与工具: 高级调试功能: 讲解 IDE 中更高级的调试功能,如断点管理、观察变量、内存查看、逻辑分析仪等。 SWD/JTAG 调试接口: 深入理解 SWD 和 JTAG 接口的工作原理,以及它们在硬件调试中的重要性。 串口调试助手: 学习如何利用串口输出调试信息,辅助问题排查。 实际项目案例: 智能温湿度监测系统: 结合温湿度传感器、LCD 显示屏和数据上传(如通过蓝牙或串口),构建一个完整的智能监测系统。 电机控制系统: 利用 PWM 和编码器,实现对直流电机或步进电机的精确控制。 USB 设备开发基础(如果 STM32F0x2 支持): 介绍 USB 基本原理,并可能提供一个简单的 USB 设备(如 HID 类设备)的开发示例。 (根据具体型号和内容可能添加其他有代表性的项目) 本书的独特价值: “手把手”教学理念: 本书注重实践,每一个知识点都配有清晰的解释和可执行的代码示例,力求让读者能够“跟着做”,在实践中学习。 从原理到应用: 不仅讲解如何使用某个外设,更深入剖析其工作原理,帮助读者建立系统性的认知。 基于真实硬件: 所有示例都基于 STM32F0x2 系列的实际开发板,确保读者学习的知识能够直接应用于实际项目。 循序渐进的难度: 内容设计从易到难,覆盖从入门到进阶的各个层次,适合不同基础的读者。 注重解决实际问题: 结合嵌入式开发中常见的挑战,提供实用的解决方案和调试技巧。 学习本书,您将收获: 扎实的 ARM Cortex-M0 理论基础。 深入理解 STM32F0x2 系列微控制器的硬件特性。 精通 C 语言在嵌入式开发中的高级应用。 熟练掌握 STM32F0x2 的各种常用外设的编程方法。 独立进行嵌入式软硬件系统开发的信心和能力。 为进一步学习更复杂的 MCU 和嵌入式系统打下坚实的基础。 无论您是计算机科学专业的学生,渴望涉足硬件世界;还是硬件工程师,希望系统性地学习嵌入式软件开发;亦或是业余爱好者,对制作智能小设备充满热情,本书都将是您不可多得的学习伙伴。让我们一起,用智慧和代码,赋予微小芯片以强大的生命力!