第1章 嵌入式物联网开发绪论 1
1.1 物联网的基本概念 1
1.1.1 物联网的定义与特征 1
1.1.2 物联网的应用 1
1.2 物联网的体系架构 2
1.2.1 感知层 2
1.2.2 网络层 3
1.2.3 应用层 4
1.3 嵌入式系统 4
1.3.1 嵌入式系统简介 4
1.3.2 嵌入式系统的组成 5
1.3.3 物联网与嵌入式系统的关系 8
1.3.4 嵌入式系统开发软件——Keil 9
1.3.5 物联网设备开发与Mbed 10
参考资料 12
第2章 ARM Cortex-M4技术 13
2.1 背景概述 13
2.2 核心技术 14
2.2.1 内部架构 14
2.2.2 内核比较 15
2.2.3 Thumb-2指令集 17
2.2.4 流水线技术 18
2.2.5 寄存器 19
2.2.6 工作模式 21
2.2.7 异常 22
参考资料 23
第3章 STM32F401体系结构 25
3.1 STM32F401架构 25
3.1.1 片内结构 25
3.1.2 功能单元描述 25
3.2 封装与引脚说明 28
参考资料 32
第4章 STM32F401功能模块设计 34
4.1 电源模块 34
4.1.1 电源 34
4.1.2 电源监控器 35
4.1.3 低功耗模式 37
4.1.4 电源控制寄存器 38
4.2 复位模块 43
4.2.1 系统复位 43
4.2.2 电源复位 44
4.2.3 备份域复位 44
4.3 时钟管理模块 44
4.3.1 HSE时钟 46
4.3.2 HSI时钟 46
4.3.3 PLL配置 47
4.3.4 LSE时钟 47
4.3.5 LSI时钟 47
4.3.6 系统时钟(SYSCLK)选择 48
4.4 定时器与看门狗 48
4.4.1 高级控制定时器(TIM1) 48
4.4.2 通用定时器(TIMx) 49
4.4.3 独立看门狗(IWDG) 49
4.4.4 窗口看门狗(WWDG) 50
4.4.5 SysTick定时器 52
4.5 内部存储器模块 52
4.5.1 STM32F401内部存储空间 52
4.5.2 Flash存储器 52
4.5.3 RAM数据存储器 55
参考资料 56
第5章 通用I/O接口 57
5.1 通用I/O功能描述 57
5.1.1 GPIO端口 57
5.1.2 输入输出多路复用器和映射 57
5.1.3 I/O端口寄存器 58
5.1.4 GPIO模式 59
5.2 通用I/O配置寄存器 60
5.2.1 GPIO端口模式寄存器(GPIOx_MODER) 60
5.2.2 GPIO输出类型寄存器(GPIOx_OTYPER) 60
5.2.3 GPIO端口输出速度寄存器(GPIOx_OSPEEDR) 61
5.2.4 GPIO端口上拉下拉寄存器(GPIOx_PUPDR) 61
5.2.5 GPIO端口输入数据寄存器(GPIOx_IDR) 62
5.2.6 GPIO端口输出数据寄存器(GPIOx_ODR) 62
5.2.7 GPIO端口比特置位复位寄存器(GPIOx_BSRR) 63
5.2.8 GPIO端口配置锁存器(GPIOx_LCKR) 63
5.2.9 GPIO复用功能低位寄存器(GPIOx_AFRL) 64
5.2.10 GPIO复用功能高位寄存器(GPIOx_AFRH) 65
5.2.11 RCC AHB1外设时钟使能寄存器(RCC_AHB1ENR) 66
5.3 应用实例 66
5.3.1 开发环境与实例说明 66
5.3.2 Keil软件使用 68
5.3.3 寄存器操作技巧 71
5.3.4 GPIO实例代码 71
5.3.5 测试结果及分析 73
参考资料 73
第6章 STM32F401中断机制 74
6.1 中断控制 74
6.1.1 基本概念 74
6.1.2 中断优先级 74
6.1.3 中断控制位 75
6.1.4 中断过程 75
6.1.5 外部中断/事件控制器(EXTI) 76
6.1.6 外部中断/事件线映射 77
6.2 中断控制寄存器 78
6.2.1 NVIC寄存器 78
6.2.2 EXTI寄存器 79
6.3 应用实例 81
6.3.1 开发环境与实例说明 81
6.3.2 中断实例代码 82
6.3.3 测试结果及分析 84
参考资料 85
第7章 STM32F401串行通信 86
7.1 USART简介及主要功能 86
7.2 USART功能描述 87
7.2.1 USART结构 87
7.2.2 USART字符描述 87
7.2.3 发送器 89
7.2.4 接收器 92
7.2.5 多处理器通信 95
7.2.6 LIN(局域互联网络)模式 96
7.2.7 USART同步模式 97
7.2.8 单线半双工通信 98
7.3 应用实例 98
7.3.1 开发环境与实例说明 98
7.3.2 UART实例代码 99
7.3.3 测试结果及分析 103
参考资料 104
第8章 STM32F401 AD转换器 105
8.1 功能描述 105
8.1.1 ADC介绍 105
8.1.2 ADC功能描述 105
8.2 ADC寄存器配置 112
8.2.1 ADC状态寄存器(ADC_SR) 112
8.2.2 ADC控制寄存器1(ADC_CRl) 114
8.2.3 ADC寄存器2(ADC_CR2) 117
8.2.4 ADC采样时间寄存器1(ADC_SMPR1) 120
8.2.5 ADC采样时间寄存器2(ADC_SMPR2) 121
8.2.6 ADC注入通道数据偏移寄存器(ADC_JOFRx)(x=1..4) 122
8.2.7 ADC看门狗高阈值寄存器(ADC_HTR) 122
8.2.8 ADC看门狗低阈值寄存器(ADC_LTR) 123
8.2.9 ADC规则序列寄存器1(ADC_SQR1) 123
8.2.10 ADC规则序列寄存器2(ADC_SQR2) 124
8.2.11 ADC规则序列寄存器3(ADC_SQR3) 124
8.2.12 ADC注入序列寄存器(ADC_JSQR) 125
8.2.13 ADC注入数据寄存器x(ADC_JDRx)(x=1..4) 126
8.2.14 ADC规则数据寄存器(ADC_DR) 126
8.2.15 ADC通用控制寄存器(ADC_CCR) 126
8.2.16 ADC寄存器映射 127
8.3 应用实例 128
8.3.1 开发环境与实例说明 128
8.3.2 实例代码 128
8.3.3 测试结果及分析 132
参考资料 132
第9章 STM32F401低功耗蓝牙 133
9.1 功能描述 133
9.1.1 蓝牙技术简介 134
9.1.2 BlueNRG 142
9.1.3 BALF-NRG-01D3 142
9.2 蓝牙模块配置 143
9.2.1 Mbed 143
9.2.2 可能用到的函数 144
9.2.3 程序框架 145
9.3 应用实例 146
9.3.1 开发环境与实例说明 146
9.3.2 蓝牙实例代码 147
9.3.3 测试结果及分析 149
参考资料 149
第10章 STM32F401传感器模块 151
10.1 功能描述 151
10.2 传感器模块配置 157
10.2.1 传感器I2 C地址的选择 157
10.2.2 传感器的断开 157
10.2.3 可能用到的函数 157
10.2.4 程序框架 159
10.3 应用实例 159
10.3.1 开发环境与实例说明 159
10.3.2 传感器模块实例代码 160
10.3.3 测试结果及分析 161
参考资料 161
第11章 嵌入式物联网系统设计与实例 163
11.1 传感器数据采集 163
11.1.1 温度传感器 163
11.1.2 温湿度传感器 163
11.1.3 超声波传感器 164
11.1.4 烟雾传感器 164
11.1.5 声音传感器 165
11.1.6 光敏传感器 165
11.2 蓝牙气象站实例 165
11.2.1 开发环境与实例说明 166
11.2.2 蓝牙气象站实例代码 166
11.2.3 测试结果及分析 177
11.3 设计建议 177
第12章 物联网和云 180
12.1 物联网需要云 180
12.1.1 云计算 180
12.1.2 云计算的基本概念术语 180
12.1.3 云计算的安全 188
12.2 物联网与云的结合 189
12.2.1 物联网的端到云 189
12.2.2 物联网与云计算结合的模式分类 190
12.2.3 物联网与云计算的分阶段融合 191
12.2.4 物联网与云计算的结合优势 191
12.2.5 物联网与云的结合实例 193
12.3 使用Bluemix连接设备实例 195
12.3.1 开发环境与实例说明 196
12.3.2 测试结果及分析 202
参考资料 203
附录1 Keil软件使用详细教程 205
附录2 Mbed编程实例代码 217