注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络硬件、外部设备与维护跟工程师学嵌入式开发:基于STM32和μC/OS-III

跟工程师学嵌入式开发:基于STM32和μC/OS-III

跟工程师学嵌入式开发:基于STM32和μC/OS-III

定 价:¥88.00

作 者: 谭贵 著
出版社: 电子工业出版社
丛编项: 嵌入式技术与应用丛书
标 签: 程序设计 计算机/网络

购买这本书可以去


ISBN: 9787121327254 出版时间: 2017-10-01 包装: 平装
开本: 16开 页数: 448 字数:  

内容简介

  本书选用的STM32芯片基于ARM Cortex-M3体系结构,根据基于MCU的嵌入式技术实际应用需求,合理地选择了多种常用的重要外设接口,如USART、SPI、I2C、FSCM、SDIO总线、以太网等,结合丰富的实例及工程源代码,由浅入深、系统全面地介绍嵌入式系统的底层工作原理。在此过程中,通过穿插多个综合示例的讲解,如命令行外壳程序Shell、eFat文件系统、Telnet远程控制、?C/OS-III实时操作系统的移植过程,无论是嵌入式的初学者,还是有一定开发经验的工程师都能从中获益,使读者既能系统全面地掌握嵌入式开发所需的软硬件知识,又能锻炼他们的综合开发能力,为将来从事嵌入式开发方面的工作奠定坚实的基础。

作者简介

  谭贵,男,北京大学计算机科学与技术学士毕业,现供职于富士康科技集团,热爱嵌入式开发技术,精通C、Java语言,Tcl和bash脚本应用;熟悉从MCU裸板外设驱动开发和uCosII实时操作系统的移植,以及基于Linux系统的嵌入式应用开发。

图书目录

第1章 开发利器:STM32库和MDK Keil\t1
1.1 学习启航:闪烁的跑马灯\t1
1.1.1 实验结果呈现\t1
1.1.2 实验分析\t2
1.1.3 配置GPIO引脚\t5
1.1.4 实验控制逻辑\t6
1.2 STM32库结构和CMSIS标准\t8
1.2.1 STM32库层次结构\t9
1.2.2 CMSIS层次结构\t9
1.2.3 STM32库结构中的文件关系\t10
1.2.4 STM32库函数命名规则\t13
1.2.5 STM32库常见的几个状态类型\t13
1.3 工程开发环境设置\t14
1.3.1 有关MDK\t14
1.3.2 使用MDK建立工程的步骤\t15
第2章 STM32体系结构\t25
2.1 总线与通信接口\t25
2.1.1 总线组成\t25
2.1.2 重要的总线术语\t26
2.2 STM32功能框架\t27
2.2.1 系统组成\t27
2.2.2 总线单元及挂接设备\t28
2.3 STM32存储器映射\t29
2.3.1 独立编址\t30
2.3.2 统一编址(存储器映像编址)\t31
2.3.3 CM3外设地址空间映射\t32
2.3.4 地址空间映射详解\t34
2.4 STM32时钟结构\t39
2.4.1 STM32F103ZET6的时钟树\t39
2.4.2 时钟树二级框架\t40
2.4.3 时钟启用过程\t41
2.5 系统时钟树与地址空间映射的关系\t43
第3章 STM32系统启动过程分析\t44
3.1 CM3的复位序列\t44
3.1.1 堆栈\t45
3.1.2 向量表\t47
3.2 STM32启动代码分析\t49
3.3 STM32系统时钟初始化\t52
3.3.1 时钟源的选择\t52
3.3.2 系统时钟设置\t56
3.4 程序运行环境初始化函数__main()\t60
3.4.1 回顾编译和链接过程\t60
3.4.2 映像文件的组成\t61
3.4.3 映像的加载过程\t63
3.4.4 由MDK集成环境自动生成的分散加载文件\t65
3.4.5 _main()函数的作用\t66
第4章 通用GPIO操作\t68
4.1 实验结果预览:LED跑马灯\t68
4.2 GPIO基本知识\t68
4.2.1 GPIO分组管理及其引脚\t69
4.2.2 GPIO工作模式及其配置\t69
4.2.3 GPIO引脚的写入和读出\t71
4.3 实验代码解析\t74
4.3.1 实验现象原理分析\t74
4.3.2 源代码分析\t78
4.4 创建工程\t81
4.4.1 建立工程目录结构\t81
4.4.2 导入源代码文件\t81
4.4.3 编译执行\t82
4.5 编译调试\t82
4.5.1 调试方法\t82
4.5.2 栈和变量观察窗口\t83
4.5.3 运行程序并调试:一个函数一个断点\t84
4.5.4 运行程序并调试:多个函数多个断点\t86
第5章 外部中断EXTI操作\t90
5.1 实验结果预览:LED跑马灯_中断控制\t90
5.2 异常与中断\t91
5.2.1 Cortex-M3的异常向量\t91
5.2.2 异常向量表\t92
5.3 NVIC与中断控制\t93
5.3.1 NVIC简述\t93
5.3.2 NVIC与外部中断\t93
5.3.3 NVIC中断的优先级\t94
5.3.4 NVIC初始化\t95
5.4 EXTI基本知识\t97
5.4.1 EXTI简介\t97
5.4.2 EXTI控制器组成结构\t97
5.4.3 GPIO引脚到EXTI_Line的映射\t100
5.4.4 EXTI_Line到NVIC的映射\t102
5.5 实验代码解析\t103
5.5.1 工程源码的逻辑结构\t103
5.5.2 实验代码软硬件原理\t104
5.5.3 实验代码分析\t107
5.6 创建工程\t109
5.6.1 建立工程目录结构\t109
5.6.2 导入源代码文件\t109
5.6.3 编译执行\t110
5.7 编译调试\t111
5.7.1 打开内存窗口\t111
5.7.2 设置断点\t111
5.7.3 运行程序并调试\t112
第6章 USART接口\t115
6.1 实验结果预览\t115
6.1.1 实验准备工作\t115
6.1.2 实验现象描述\t116
6.2 USART基本知识\t117
6.2.1 串行异步通信协议\t117
6.2.2 USART与接口标准RS-232\t118
6.3 STM32 USART结构\t119
6.3.1 USART工作模式\t119
6.3.2 精简的USART结构\t119
6.3.3 USART单字节收发过程\t120
6.4 USART寄存器位功能定义\t121
6.4.1 状态寄存器(USART_SR)\t121
6.4.2 数据寄存器(USART_DR)\t122
6.4.3 控制寄存器1(USART_CR1)\t122
6.4.4 控制寄存器2(USART_CR2)\t123
6.4.5 控制寄存器3(USART_CR3)\t123
6.4.6 分数波特率寄存器USART_BRR\t124
6.4.7 USART模块寄存器组\t125
6.4.8 USART模块初始化函数\t126
6.4.9 USART常用函数功能说明\t127
6.5 USART实验代码分析\t128
6.5.1 实验电路(硬件连接关系)\t128
6.5.2 工程源代码文件层次结构\t130
6.5.3 应用层(主程序控制逻辑)\t131
6.5.4 用户驱动层\t133
6.5.5 函数printf()重定向\t135
6.6 创建工程\t135
6.6.1 建立工程目录结构\t135
6.6.2 创建文件组和导入源文件\t136
6.6.3 编译执行\t137
第7章 USART综合应用:命令行外壳程序Shell\t138
7.1 实验结果预览\t138
7.2 基于USART的I/O函数\t139
7.2.1 字符及字符串获取函数:xgetc()和xgets()\t139
7.2.2 字符及字符串打印函数:xputc()和xputs()\t141
7.3 可变参数输出函数xprintf()\t142
7.3.1 可变参数\t142
7.3.2 可变参数宏的使用与作用\t143
7.3.3 用可变参数宏实现自己的格式化输出函数xprintf()\t144
7.4 Shell外壳\t145
7.4.1 Shell命令管理结构\t146
7.4.2 Shell命令解析过程\t147
7.4.3 命令函数之参数解析\t150
7.5 建立工程,编译和运行\t151
7.5.1 创建和配置工程\t151
7.5.2 编译执行\t153
第8章 I2C接口\t154
8.1 实验结果预览:轮询写入/读出EEPROM数据\t154
8.2 I2C总线协议\t155
8.2.1 总线特点\t155
8.2.2 I2C应用结构\t155
8.2.3 总线信号时序分析\t156
8.3 STM32 I2C模块\t158
8.3.1 I2C组成框图\t158
8.3.2 I2C主模式工作流程\t159
8.3.3 I2C中断及DMA请求\t161
8.4 I2C EEPROM读写示例及分析\t162
8.4.1 示例电路连接\t162
8.4.2 app.c文件中的main()函数\t163
8.4.3 eeprom.h文件\t166
8.4.4 eeprom.c文件\t167
8.4.5 shell.c文件\t174
8.5 建立工程,编译及运行\t175
8.5.1 创建和配置工程\t175
8.5.2 编译执行\t176
第9章 DMA接口\t177
9.1 实验结果预览\t177
9.2 通用DMA的作用及特征\t178
9.3 STM32 DMA基本知识\t178
9.3.1 DMA与系统其他模块关系图\t178
9.3.2 STM32 DMA组成\t179
9.4 实验示例分析\t183
9.4.1 main.c文件中的main()函数\t184
9.4.2 USART1的初始化\t184
9.4.3 DMA通道中断处理函数\t189
9.4.4 sysTick中断处理函数\t190
9.4.5 DMA通道配置的其他寄存器\t191
9.4.6 DMA用户测试命令及其执行函数\t192
9.5 建立工程,编译和执行\t193
9.5.1 建立以下工程文件夹\t194
9.5.2 创建文件组和导入源文件\t194
9.5.3 编译运行\t194
第10章 实时时钟RTC\t195
10.1 实验结果预览\t195
10.2 STM32 RTC模块\t196
10.2.1 STM32后备供电区域\t196
10.2.2 RTC组成\t199
10.3 RTC实验设计与源码分析\t204
10.3.1 硬件连接和GPIO资源\t204
10.3.2 实验源代码逻辑结构\t204
10.3.3 源代码分析\t205
10.4 建立工程,编译和执行\t212
10.4.1 建立以下工程文件夹\t212
10.4.2 创建文件组和导入源文件\t212
10.4.3 编译执行\t213
第11章 系统定时器SysTick\t214
11.1 SysTick简述\t214
11.2 SysTick工作过程\t214
11.3 SysTick寄存器位功能定义\t215
11.3.1 控制和状态寄存器:STK_CTRL\t215
11.3.2 重载寄存器:STK_LOAD\t216
11.3.3 当前计数值寄存器:STK_VAL\t217
11.3.4 校正寄存器:STK_CALIB\t217
11.3.5 SysTick模块寄存器组\t217
11.3.6 配置SysTick定时器\t218
11.4 基于SysTick的延时函数代码分析\t220
11.4.1 实现原理\t220
11.4.2 实现代码分析\t220
11.4.3 基于SysTick延时的LED闪烁命令\t223
11.5 建立工程,编译和执行\t224
11.5.1 建立以下工程文件夹\t224
11.5.2 创建文件组和导入源文件\t224
11.5.3 编译运行\t226
第12章 SPI接口\t227
12.1 实验现象预览:轮询写入/读出SPI Flash数据\t227
12.2 SPI总线协议\t228
12.2.1 总线信号及其应用结构\t228
12.2.2 SPI内部结构与工作原理\t229
12.3 STM32 SPI模块\t231
12.3.1 SPI组成框图\t231
12.3.2 STM32 SPI主模式数据收发过程\t232
12.3.3 SPI中断及DMA请求\t234
12.4 W25Q128FV规格说明\t234
12.4.1 W25Q128FV状态和控制管理\t235
12.4.2 W25Q128FV常用指令\t236
12.5 程序入口与SPI初始化代码\t237
12.5.1 实验硬件资源\t237
12.5.2 工程入口文件main.c\t238
12.5.3 spiflash.c文件中的spiFlash_Init()函数\t239
12.6 SPI Flash测试代码分析\t243
12.6.1 spiflash.c文件中的SPI Flash测试函数spiTest()\t244
12.6.2 SPI Flash ID读取函数sFLASH_readID()\t245
12.6.3 扇区擦除函数sFLASH_eraseSector()\t246
12.6.4 Flash页写函数sFLASH_writePage()\t246
12.6.5 Flash读函数sFLASH_readBuffer()\t247
12.6.6 Flash字节发送函数sFLASH_SendByte()\t248
12.7 向Shell添加SPI测试指令spitest\t249
12.8 建立工程,编译和执行\t250
12.8.1 建立以下工程文件夹\t250
12.8.2 创建文件组和导入源文件\t250
12.8.3 编译运行\t252
第13章 网络接口:以太网\t253
13.1 网络体系结构简介\t253
13.1.1 三种网络模型\t253
13.1.2 以太网标准(Ethernet)\t256
13.2 ENC28J60知识\t257
13.2.1 ENC28J60概述\t257
13.2.2 控制寄存器\t259
13.2.3 以太网缓冲器\t260
13.2.4 PHY寄存器\t261
13.2.5 ENC28J60 SPI指令集\t261
13.2.6 ENC28J60初始化\t263
13.2.7 使用ENC28J60收发数据\t268
13.2.8 ENC28J60驱动代码总结\t272
13.3 uIP协议栈简介\t274
13.3.1 uIP特性\t274
13.3.2 uIP应用接口\t275
13.3.3 uIP的初始化及配置函数\t277
13.3.4 uIP的主程序循环\t277
13.4 uIP移植分析\t279
13.4.1 下载uIP1.0版源码文件\t279
13.4.2 理解两个中间层文件与应用层和协议层之间的关系\t280
13.4.3 添加uIP协议栈后的工程文件组\t285
第14章 综合示例:基于uIP的Telnet服务\t286
14.1 实验现象预览\t286
14.2 Telnet远程登录协议\t287
14.2.1 Telnet概述\t287
14.2.2 Telnet协议主要技术\t288
14.2.3 Telnet命令\t288
14.3 Telnetd服务框架及实现\t290
14.3.1 本实验Telnetd服务框架\t290
14.3.2 Telnetd服务框架的实现\t291
14.4 上层应用与uIP协议的接口:telnetd_appcall()\t304
14.5 建立工程,编译和运行\t309
14.5.1 创建和配置工程\t309
14.5.2 编译执行\t311
第15章 SDIO总线协议与SD卡操作\t312
15.1 SD卡简介\t312
15.1.1 SD卡家族\t312
15.1.2 SD卡引脚功能定义\t313
15.1.3 SD卡内部组成\t314
15.1.4 SD卡容量规格\t315
15.1.5 SDIO接口规范和总线应用拓扑\t315
15.2 SD协议\t316
15.2.1 工作模式与状态\t316
15.2.2 命令和响应格式\t316
15.2.3 卡识别模式\t317
15.2.4 数据传输模式\t320
15.3 STM32 SDIO控制器\t322
15.3.1 控制器总体结构描述\t322
15.3.2 SDIO适配器模块\t323
15.3.3 SDIO AHB接口\t325
15.4 工程入口及配置\t326
15.4.1 实验硬件资源\t326
15.4.2 工程入口文件main.c\t327
15.5 SDIO初始化\t328
15.5.1 SD卡上电初始化函数SD_PowerON()\t330
15.5.2 SD卡规格信息获取函数SD_InitializeCards()\t336
15.6 SDIO卡测试代码分析\t339
15.6.1 块擦除\t340
15.6.2 多块写\t342
15.6.3 多块读\t345
15.7 建立工程,编译和运行\t348
15.7.1 建立以下工程文件夹\t348
15.7.2 创建文件组和导入源文件\t348
15.7.3 编译执行\t349
第16章 移植文件系统FatFs\t350
16.1 实验现象预览:基于Shell的文件系统命令\t350
16.2 FatFs文件系统\t351
16.2.1 FatFs特点\t351
16.2.2 FatFs在设备系统中的层次与接口\t351
16.3 移植FatFs文件系统\t352
16.3.1 FatFs源代码结构\t352
16.3.2 基于FatFs应用的常用数据类型说明\t353
16.3.3 FatFs的移植\t355
16.4 FatFs文件系统应用示例分析\t357
16.4.1 工程源代码逻辑\t357
16.4.2 工程源代码分析\t358
16.5 建立工程,编译和运行\t363
16.5.1 创建和配置工程\t363
16.5.2 编译执行\t364
第17章 无线接入:Wi-Fi模块ESP8266应用\t365
17.1 无线技术标准:IEEE 802.11\t365
17.1.1 IEEE 802.11简介\t365
17.1.2 无线局域网的组网拓扑\t366
17.1.3 无线接入过程的三个阶段\t367
17.2 ESP-WROOM-02模组\t368
17.2.1 ESP-WROOM-02性能参数\t368
17.2.2 ESP-WROOM-02与主机系统的电路连接\t369
17.3 ESP-WROOM-02指令集\t370
17.3.1 ESP8266 AT常用指令\t370
17.3.2 使用ESP-WROOM-02进行真实通信\t373
17.4 封装ESP-WROOM-02的配置函数\t375
17.4.1 ESP-WROOM-02的初始化函数\t375
17.4.2 ESP-WROOM-02的配置函数\t377
17.4.3 优化USART接收缓存的数据结构\t379
17.4.4 ESP-WROOM-02的Shell操作命令\t381
17.5 建立工程,编译和运行\t384
17.5.1 工程程序文件\t384
17.5.2 创建和配置工程\t384
17.5.3 编译执行\t385
第18章 移植?C/OS-III操作系统\t387
18.1 ?C/OS-III基础\t387
18.1.1 ?C/OS-III简介\t387
18.1.2 ?C/OS-III内核组成架构\t388
18.2 ?C/OS-III任务基础\t390
18.2.1 任务状态\t390
18.2.2 任务控制块和就绪任务表\t391
18.2.3 创建任务\t391
18.2.4 任务同步与通信\t393
18.3 ?C/OS-III的信号量\t393
18.3.1 信号量分类及其应用\t393
18.3.2 信号量工作方式\t394
18.3.3 信号量应用操作步骤\t396
18.4 ?C/OS-III的消息队列\t396
18.4.1 消息队列工作模型\t397
18.4.2 消息队列应用操作步骤\t397
18.5 ?C/OS-III的事件标志组\t398
18.5.1 事件标志组工作模型\t398
18.5.2 事件标志组应用操作步骤\t399
18.6 信号量、消息队列和事件标志组综合示例\t399
18.6.1 综合示例任务关系图\t400
18.6.2 任务代码头文件task.h\t400
18.6.3 任务代码C文件task.c\t402
18.6.4 中断异常处理文件stm32f10x_it.c\t409
18.7 ?C/OS-III移植\t410
18.7.1 ?C/OS-III源码组织架构\t410
18.7.2 简化?C/OS-III源码组织架构\t411
18.7.3 建立基于?C/OS-III的工程\t412
18.7.4 ?C/OS-III综合示例运行效果\t414
第19章 基于?C/OS-III的信息系统\t415
19.1 系统功能描述\t415
19.1.1 系统任务划分\t415
19.1.2 系统实际运行效果\t415
19.2 系统任务设计分析\t417
19.2.1 Shell任务\t417
19.2.2 LED灯闪烁任务\t420
19.2.3 事件监测任务\t420
19.2.4 系统统计任务\t422
19.2.5 无线通信处理任务\t425
19.3 工程源代码(文件)整合\t428
19.3.1 主文件main.c\t428
19.3.2 任务头文件task.h\t428
19.3.3 includes.h文件\t429
19.3.4 任务实现文件task.c\t430
19.4 建立工程,编译和运行\t430
19.4.1 建立工程源代码结构\t430
19.4.2 建立文件组,导入源文件\t430
19.4.3 编译执行\t431
参考文献\t432

本目录推荐