第1篇 初识M4 2
第1章 概述 2
1.1 ARM Cortex-M4简介 2
1.2 Cortex-M3与Cortex-M4对比 5
1.3 飞思卡尔Kinetis系列 9
1.3.1 系列分类 9
1.3.2 Kinetis K系列 10
第2章 K60及其硬件 12
2.1 K60系列MCU 12
2.1.1 命名规则 13
2.1.2 模块功能分类 15
2.1.3 系统内存映射 16
2.2 K60核心板及底板 18
2.2.1 K60核心板 18
2.2.2 K60底板 21
2.3 拉普兰德K60底层库 21
第3章 Hello World! 22
3.1 编译并调试一个工程 22
3.2 工程结构解析 24
3.2.1 工程文件目录结构 24
3.2.2 IAR工作空间目录结构 26
3.3 执行过程解析 26
3.3.1 芯片启动过程 27
3.3.2 用户应用执行过程 32
3.4 快速新建工程 33
3.5 工程相关设置 34
第2篇 新手上路 40
第4章 利用I/O进行简单的互动 40
4.1 I/O的基本概念 40
4.2 I/O模块 41
4.2.1 I/O的特点和运行模式 41
4.2.2 I/O模块信号及引脚 42
4.2.3 I/O的控制与中断寄存器 44
4.2.4 I/O的GPIO寄存器 50
4.3 GPIO编程实践 52
4.3.1 I/O驱动编程实践 52
4.3.2 I/O流水灯实例 57
4.3.3 底层库中断使用方法 58
4.3.4 I/O中断实例 61
第5章 利用串口在屏幕上显示点什么 65
5.1 异步通信串口 65
5.1.1 串口概述 65
5.1.2 串口硬件电路 68
5.2 UART模块 71
5.2.1 特点及运行模式 71
5.2.2 UART模块信号及引脚 72
5.2.3 UART模块寄存器 73
5.3 UART编程实践 81
5.3.1 UART驱动的编程实践 81
5.3.2 UART串口收发的编程实践 86
第6章 告诉K60什么时候开始干活 89
6.1 PIT模块概述 89
6.1.1 PIT工作原理 89
6.1.2 PIT触发DMA 90
6.1.3 PIT的特点和运行模式 90
6.1.4 PIT模块寄存器 90
6.2 PIT编程实践 93
6.2.1 PIT驱动的编程实践 93
6.2.2 PIT模块周期性中断实例 94
第7章 同一个世界,同一个模拟量 97
7.1 ADC概述 97
7.1.1 ADC基本概念 97
7.1.2 ADC应用 98
7.2 ADC模块详细解析 99
7.2.1 ADC模块特点 99
7.2.2 ADC模块信号及引脚 100
7.2.3 ADC模块寄存器 101
7.3 ADC编程实践 108
7.3.1 ADC驱动编程实践 108
7.3.2 ENC-03陀螺仪传感器的使用 112
7.4 DAC概述 115
7.4.1 DAC运行原理 115
7.4.2 DAC性能参数 115
7.5 DAC模块详细解析 116
7.5.1 DAC模块特点 116
7.5.2 DAC数据缓冲区操作 116
7.5.3 DAC模块寄存器 116
7.6 DAC编程实践 118
7.6.1 DAC驱动编程实践 118
7.6.2 简单的信号发生器 120
第3篇 高手晋级 123
第8章 用DMA控制器来解放CPU 123
8.1 K60 DMA的基本组成 123
8.1.1 DMA的工作原理 123
8.1.2 DMA通道复用管理模块的特点 124
8.1.3 DMA控制模块的特点 126
8.1.4 DMA控制模块的工作模式 126
8.2 DMA模块寄存器 127
8.2.1 DMA通道复用管理模块寄存器 127
8.2.2 DMA控制寄存器 128
8.2.3 DMA描述符 131
8.3 DMA编程实践 134
8.3.1 DMA驱动编程实践 134
8.3.2 DMA采集OV7670摄像头图像 140
第9章 利用PDB督促K60更好地干活 146
9.1 PDB基本功能 146
9.1.1 PDB模块的特点 146
9.1.2 PDB模块的运行模式 147
9.1.3 PDB模块信号及引脚 148
9.2 PDB模块寄存器 148
9.3 PDB模块详细解析 153
9.4 PDB编程实践 156
9.4.1 PDB驱动编程实践 156
9.4.2 PDB延时中断实例 161
9.4.3 PDB触发DAC输出 163
9.4.4 PDB触发ADC采集 166
第10章 FTM高级定时应用 168
10.1 FTM模块概述 168
10.1.1 FTM模块特性 168
10.1.2 FTM信号及引脚 169
10.2 FTM模块详细解析 170
10.2.1 FTM寄存器 170
10.2.2 FTM功能描述 174
10.3 FTM编程实践 176
10.3.1 PWM驱动编程实践 176
10.3.2 PWM驱动舵机实例 180
10.3.3 输入捕获驱动编程实践 182
第11章 默默无闻的RTC实时时钟 186
11.1 RTC的基本概念 186
11.2 RTC模块 187
11.2.1 RTC的特点和运行模式 187
11.2.2 RTC模块信号及引脚 188
11.2.3 RTC相关寄存器 188
11.3 RTC编程实践 195
11.3.1 RTC驱动编程实践 195
11.3.2 RTC报警中断实例 199
第12章 LPTMR低功耗定时器 200
12.1 LPTMR模块概述 200
12.2 LPTMR模块寄存器及其功能 201
12.2.1 LPTMR寄存器 201
12.2.2 LPTMR功能描述 204
12.3 LPTMR编程实践 205
12.3.1 低功耗计数器驱动编程实践 205
12.3.2 精准延时驱动编程实践 207
12.3.3 利用LPTMR实现脉冲计数实例 208
第13章 串行总线I2C/SPI的应用 210
13.1 I2C与SPI的对比 210
13.2 I2C概述 211
13.2.1 I2C传输模式与时序 211
13.2.2 I2C消息协议 212
13.2.3 I2C物理层 212
13.3 I2C模块详解 213
13.4 I2C编程实践 217
13.4.1 I2C驱动编程实践 217
13.4.2 MMA7660加速度传感器的使用实例 220
13.5 SPI概述 222
13.5.1 SPI传输方式与时序 223
13.5.2 SPI总线的应用限制 224
13.6 SPI模块详解 224
13.6.1 简介 224
13.6.2 SPI模块信号描述 225
13.6.3 SPI模块时序配置 225
13.6.4 SPI模块寄存器 226
13.7 SPI编程实践 231
13.7.1 SPI驱动编程实践 231
13.7.2 nRF24L01无线模块的使用实例 236
第14章 利用CAN模块与更多系统通信 243
14.1 CAN总线通信 243
14.1.1 CAN总线概述 243
14.1.2 CAN总线硬件电路 245
14.2 FlexCAN模块详细解析 247
14.2.1 特点及运行模式 247
14.2.2 CAN模块信号及引脚 248
14.2.3 CAN模块寄存器 249
14.3 报文缓冲区结构和接收队列结构 261
14.3.1 报文缓冲区结构 261
14.3.2 接收队列结构 264
14.4 FlexCAN编程实践 265
14.4.1 FlexCAN驱动编程实践 266
14.4.2 FlexCAN收发实践 269
第15章 USB通用串行总线控制器 274
15.1 USB概述 274
15.1.1 基本介绍 274
15.1.2 USB硬件接口描述和电气标准 275
15.1.3 USB标准的发展过程 276
15.1.4 USB描述符和USB驱动程序 276
15.2 USB模块的特点及信号描述 277
15.3 USB模块详解 277
15.3.1 USB缓冲区描述符表 277
15.3.2 缓冲描述符的格式 277
15.3.3 USB输入输出配置 280
15.3.4 USB控制器的寻址过程 280
15.3.5 USB传输数据过程 280
15.4 USB模块寄存器 281
15.5 USB驱动文件编程 288
15.5.1 USB描述符文件 288
15.5.2 USB驱动文件 296
15.5.3 USB通信协议文件 297
15.5.4 USB CDC类配置文件 307
15.6 应用实践 309
15.6.1 USB应用函数编程 309
15.6.2 USB虚拟串口编程实践 312
第16章 ENET以太网模块 314
16.1 以太网基本概念 314
16.2 以太网帧的结构及类型 316
16.2.1 以太网帧结构 316
16.2.2 以太网帧类型 317
16.3 以太网物理收发器 318
16.3.1 PHY外部引脚 318
16.3.2 PHY寄存器 320
16.4 ENET模块结构、外部引脚及寄存器 321
16.4.1 ENET模块结构 321
16.4.2 ENET外部引脚 322
16.4.3 ENET寄存器 323
16.5 ENET编程实践 326
16.5.1 ENET驱动编程实践 326
16.5.2 ENET底层通信测试 331
第17章 SDHC控制器模块 336
17.1 SD卡基本概念 336
17.1.1 SD卡类型 336
17.1.2 SD卡速度等级 338
17.2 SD技术概述 338
17.2.1 传输模式 339
17.2.2 4位SD总线硬件电路 340
17.2.3 SD总线初始化流程 341
17.3 SDHC模块 342
17.4 SDHC模块详细解析 344
17.4.1 SDHC寄存器 344
17.4.2 SDHC功能描述 348
17.4.3 MMC/SD/SDIO/CE-ATA命令 350
17.5 SDHC编程实践 355
17.5.1 SDHC驱动编程实践 355
17.5.2 磁盘及FatFs文件系统 360
第18章 μC/OS-Ⅱ在K60上的移植 363
18.1 μC/OS-Ⅱ概述 363
18.1.1 下载μC/OS-Ⅱ系统源文件 363
18.1.2 μC/OS-Ⅱ工程包文件 364
18.1.3 μC/OS-Ⅱ官方K60工程结构 365
18.2 复制及修改μC/OS-Ⅱ源文件 368
18.2.1 复制μC/OS-Ⅱ源文件 368
18.2.2 新建工程并配置工程 368
18.2.3 修改includes.h文件 370
18.2.4 修改os_cpu.h文件 370
18.3.5 编写bsp_int.h文件 371
18.2.6 编写bsp_int.c文件 375
18.2.7 编写bsp.c文件 377
18.2.8 编写bsp.h文件 379
18.2.9 修改os_cpu_c.c文件 379
18.3 创建μC/OS-Ⅱ任务并运行 379
18.3.1 修改app_cfg.h文件 380
18.3.2 修改os_cfg.h文件 380
18.3.3 编程实践 380
18.3.4 调试工程 382
18.4 μC/OS-Ⅱ信号量 384
18.4.1 信号量的相关函数 384
18.4.2 编写信号量应用实例 385
18.4.3 调试信号量实例 386
第19章 μC/GUI在K60上的移植 388
19.1 μC/GUI基本概念 388
19.2 复制μC/GUI开源包 388
19.2.1 下载μC/GUI开源包 388
19.2.2 μC/GUI文件作用 389
19.2.3 添加编译路径 390
19.3 添加LCD及触摸屏驱动 391
19.3.1 添加LCD驱动 391
19.3.2 添加触摸屏驱动 395
19.4 修改μC/GUI接口 398
19.4.1 修改GUIConf.h文件 398
19.4.2 修改μC/GUI LCD接口文件 399
19.4.3 修改μC/GUI触摸屏接口文件 402
19.5 移植编程实践——μC/GUI显示位图 403
19.5.1 生成位图文件 403
19.5.2 编写位图显示程序 404
第20章 Processor Expert使用笔记 407
20.1 Processor Expert概述 407
20.2 Processor Expert使用实践 407
20.2.1 新建CodeWarrior工程 408
20.2.2 添加组件 410
20.2.3 配置组件 411
20.2.4 生成并编写代码 412
附表A I/O引脚复用 415
附表B 拉普兰德K60底层库函数列表 424
参考文献 434