《跟工程师学嵌入式开发 基于STM32和μC/OS-III》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:谭贵,易确,熊立宇编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2017
  • ISBN:9787121327254
  • 页数:432 页
图书介绍:本书主要基于STM32F103ZET6处理器,根据当前基于MCU的嵌入式技术实际应用需求,合理选择了多种常用重要的外设接口,如USART、SPI、I2C、FSCM、SDIO总线、以太网等,结合丰富的实例及其程序代码,由浅入深、系统全面地介绍嵌入式系统的底层工作原理。在此过程中,通过穿插多个综合示例,如命令行外壳程序shell、eFat文件系统、telnet远程控制、uCOSII实时操作系统的移植过程的精讲,无论是对于嵌入式的初学者,还是有一定开发经验的工程师都能从中获益菲浅:使读者既能系统全面掌握嵌入式开发所需的软硬件知识,又能锻炼他们的综合开发能力,为将来从事嵌入式开发方面的工作奠定坚实的基础。

第1章 开发利器:STM32库和MDK Kell 1

1.1学习启航:闪烁的跑马灯 1

1.1.1实验结果呈现 1

1.1.2实验分析 2

1.1.3配置GPIO引脚 5

1.1.4实验控制逻辑 6

1.2 STM32库结构和CMSIS标准 8

1.2.1 STM32库层次结构 9

1.2.2 CMSIS层次结构 9

1.2.3 STM32库结构中的文件关系 10

1.2.4 STM32库函数命名规则 13

1.2.5 STM32库常见的几个状态类型 13

1.3工程开发环境设置 14

1.3.1有关MDK 14

1.3.2使用MDK建立工程的步骤 15

第2章 STM32体系结构 25

2.1总线与通信接口 25

2.1.1总线组成 25

2.1.2重要的总线术语 26

2.2 STM32功能框架 27

2.2.1系统组成 27

2.2.2总线单元及挂接设备 28

2.3 STM32存储器映射 29

2.3.1独立编址 30

2.3.2统一编址(存储器映像编址) 31

2.3.3 CM3外设地址空间映射 32

2.3.4地址空间映射详解 34

2.4 STM32时钟结构 39

2.4.1 STM32F103ZET6的时钟树 39

2.4.2时钟树二级框架 40

2.4.3时钟启用过程 41

2.5系统时钟树与地址空间映射的关系 43

第3章 STM32系统自动过程分析 44

3.1 CM3的复位序列 44

3.1.1堆栈 45

3.1.2向量表 47

3.2 STM32启动代码分析 49

3.3 STM32系统时钟初始化 52

3.3.1时钟源的选择 52

3.3.2系统时钟设置 56

3.4程序运行环境初始化函数_main() 60

3.4.1回顾编译和链接过程 60

3.4.2映像文件的组成 61

3.4.3映像的加载过程 63

3.4.4由MDK集成环境自动生成的分散加载文件 65

3.4.5_main()函数的作用 66

第4章 通用SPIO操作 68

4.1实验结果预览:LED跑马灯 68

4.2 GPIO基本知识 68

4.2.1 GPIO分组管理及其引脚 69

4.2.2 GPIO工作模式及其配置 69

4.2.3 GPIO引脚的写入和读出 71

4.3实验代码解析 74

4.3.1实验现象原理分析 74

4.3.2源代码分析 78

4.4创建工程 81

4.4.1建立工程目录结构 81

4.4.2导入源代码文件 81

4.4.3编译执行 82

4.5编译调试 82

4.5.1调试方法 82

4.5.2栈和变量观察窗口 83

4.5.3运行程序并调试:一个函数一个断点 84

4.5.4运行程序并调试:多个函数多个断点 86

第5章 外部中断EXTI操作 90

5.1实验结果预览:LED跑马灯_中断控制 90

5.2异常与中断 91

5.2.1 Cortex-M3的异常向量 91

5.2.2异常向量表 92

5.3 NVIC与中断控制 93

5.3.1 NVIC简述 93

5.3.2 NVIC与外部中断 93

5.3.3 NVIC中断的优先级 94

5.3.4 NVIC初始化 95

5.4 EXTI基本知识 97

5.4.1 EXTI简介 97

5.4.2 EXTI控制器组成结构 97

5.4.3 GPIO引脚到EXTI_Line的映射 100

5.4.4 EXTI Line到NVIC的映射 102

5.5实验代码解析 103

5.5.1工程源码的逻辑结构 103

5.5.2实验代码软硬件原理 104

5.5.3实验代码分析 107

5.6创建工程 109

5.6.1建立工程目录结构 109

5.6.2导入源代码文件 109

5.6.3编译执行 110

5.7编译调试 111

5.7.1打开内存窗口 111

5.7.2设置断点 111

5.7.3运行程序并调试 112

第6章 USART接口 115

6.1实验结果预览 115

6.1.1实验准备工作 115

6.1.2实验现象描述 116

6.2 USART基本知识 117

6.2.1串行异步通信协议 117

6.2.2 USART与接口标准RS-232 118

6.3 STM32 USART结构 119

6.3.1 USART工作模式 119

6.3.2精简的USART结构 119

6.3.3 USART单字节收发过程 120

6.4 USART寄存器位功能定义 121

6.4.1状态寄存器(USART_SR) 121

6.4.2数据寄存器(USART DR) 122

6.4.3控制寄存器1 (USART CR1) 122

6.4.4控制寄存器2 (USART CR2) 123

6.4.5控制寄存器3 (USART CR3) 123

6.4.6分数波特率寄存器USART BRR 124

6.4.7 USART模块寄存器组 125

6.4.8 USART模块初始化函数 126

6.4.9 USART常用函数功能说明 127

6.5 USART实验代码分析 128

6.5.1实验电路(硬件连接关系) 128

6.5.2工程源代码文件层次结构 130

6.5.3应用层(主程序控制逻辑) 131

6.5.4用户驱动层 133

6.5.5函数printf(重定向) 135

6.6创建工程 135

6.6.1建立工程目录结构 135

6.6.2创建文件组和导入源文件 136

6.6.3编译执行 137

第7章 USART综合应用命令行外壳程序Shell 138

7.1实验结果预览 138

7.2基于USART的I/O函数 139

7.2.1字符及字符串获取函数:xgetc()和xgets() 139

7.2.2字符及字符串打印函数:xputc()和xputs() 141

7.3可变参数输出函数xprintf() 142

7.3.1可变参数 142

7.3.2可变参数宏的使用与作用 143

7.3.3用可变参数宏实现自己的格式化输出函数xprintf() 144

7.4 Shell外壳 145

7.4.1 Shell命令管理结构 146

7.4.2 Shell命令解析过程 147

7.4.3命令函数之参数解析 150

7.5建立工程,编译和运行 151

7.5.1创建和配置工程 151

7.5.2编译执行 153

第8章 I2C接口 154

8.1实验结果预览:轮询写入/读出EEPROM数据 154

8.2 I2C总线协议 155

8.2.1总线特点 155

8.2.2 I2C应用结构 155

8.2.3总线信号时序分析 156

8.3 STM32I2C模块 158

8.3.1 12C组成框图 158

8.3.2 I2C主模式工作流程 159

8.3.3 I2C中断及DMA请求 161

8.4 I2C EEPROM读写示例及分析 162

8.4.1示例电路连接 162

8.4.2 app.c文件中的main()函数 163

8.4.3 eeprom.h文件 166

8.4.4 eeprom.c文件 167

8.4.5 shell.c文件 174

8.5建立工程,编译及运行 175

8.5.1创建和配置工程 175

8.5.2编译执行 176

第9章 DMA接口 177

9.1实验结果预览 177

9.2通用DMA的作用及特征 178

9.3 STM32 DMA基本知识 178

9.3.1 DMA与系统其他模块关系图 178

9.3.2 STM32 DMA组成 179

9.4实验示例分析 183

9.4.1 main.c文件中的main()函数 184

9.4.2 USART1的初始化 184

9.4.3 DMA通道中断处理函数 189

9.4.4 sysTick中断处理函数 190

9.4.5 DMA通道配置的其他寄存器 191

9.4.6 DMA用户测试命令及其执行函数 192

9.5建立工程,编译和执行 193

9.5.1建立以下工程文件夹 194

9.5.2创建文件组和导入源文件 194

9.5.3编译运行 194

第10章 实时时钟RTC 195

10.1实验结果预览 195

10.2 STM32 RTC模块 196

10.2.1 STM32后备供电区域 196

10.2.2 RTC组成 199

10.3 RTC实验设计与源码分析 204

10.3.1硬件连接和GPIO资源 204

10.3.2实验源代码逻辑结构 204

10.3.3源代码分析 205

10.4建立工程,编译和执行 212

10.4.1建立以下工程文件夹 212

10.4.2创建文件组和导入源文件 212

104.3编译执行 213

第11章 系统定时器SysTick 214

11.1 SysTick简述 214

11.2 SysTick工作过程 214

11.3 SysTick寄存器位功能定义 215

11.3.1控制和状态寄存器:STK_CTRL 215

11.3.2重载寄存器:STK_LOAD 216

11.3.3当前计数值寄存器:STK_VAL 217

11.3.4校正寄存器:STK_CALIB 217

11.3.5 SysTick模块寄存器组 217

11.3.6配置SysTick定时器 218

11.4基于SysTick的延时函数代码分析 220

11.4.1实现原理 220

11.4.2实现代码分析 220

11.4.3基于SysTick延时的LED闪烁命令 223

11.5建立工程,编译和执行 224

11.5.1建立以下工程文件夹 224

11.5.2创建文件组和导入源文件 224

11.53编译运行 226

第12章 SPI接口 227

12.1实验现象预览:轮询写入/读出SPI Flash数据 227

12.2 SPI总线协议 228

12.2.1总线信号及其应用结构 228

12.2.2 SPI内部结构与工作原理 229

12.3 STM32 SPI模块 231

12.3.1 SPI组成框图 231

12.3.2 STM32 SPI主模式数据收发过程 232

12.3.3 SPI中断及DMA请求 234

12.4 W25QI28FV规格说明 234

12.4.1 W25QI28FV状态和控制管理 235

12.4.2 W25Ql28FV常用指令 236

12.5程序入口与SPI初始化代码 237

12.5.1实验硬件资源 237

12.5.2工程入口文件main.c 238

12.5.3 spiash.c文件中的spiFlash Init()函数 239

12.6 SPI Flash测试代码分析 243

12.6.1 spiflash.c文件中的SPI Flash测试函数spiTest() 244

12.6.2 SPI Flash ID读取函数sFLASH readID() 245

12.6.3扇区擦除函数sFLASH_eraseSector() 246

12.6.4 Flash页写函数sFLASH writePage() 246

12.6.5 Flash读函数sFLASH_readBuffer() 247

12.6.6 Flash字节发送函数sFLASH SendByte() 248

12.7向Shell添加SPI测试指令spitest 249

12.8建立工程,编译和执行 250

12.8.1建立以下工程文件夹 250

12.8.2创建文件组和导入源文件 250

12.8.3编译运行 252

第13章 网络接口:以太网 253

13.1网络体系结构简介 253

13.1.1三种网络模型 253

13.1.2以太网标准(Ethernet) 256

13.2 ENC28J60知识 257

13.2.1 ENC28J60概述 257

13.2.2控制寄存器 259

13.2.3以太网缓冲器 260

13.2.4 PHY寄存器 261

13.2.5 ENC28J60 SPI指令集 261

13.2.6 ENC28J60初始化 263

13.2.7使用ENC28J60收发数据 268

13.2.8 ENC28J60驱动代码总结 272

13.3 uIP协议栈简介 274

13.3.1 uIP特性 274

13.3.2 uIP应用接口 275

13.3.3 uIP的初始化及配置函数 277

13.3.4 uIP的主程序循环 277

13.4 uIP移植分析 279

13.4.1下载uIP 1.0版源码文件 279

13.4.2理解两个中间层文件与应用层和协议层之间的关系 280

13.4.3添加UIP协议栈后的工程文件组 285

第14章 综合示例:基于uIP的Telnet服务 286

14.1实验现象预览 286

14.2 Telnet远程登录协议 287

14.2.1 Telnet概述 287

14.2.2 Telnet协议主要技术 288

14.2.3 Telnet命令 288

14.3 Telnetd服务框架及实现 290

14.3.1本实验Telnetd服务框架 290

14.3.2 Telnetd服务框架的实现 291

14.4上层应用与UIP协议的接口:telnetd_appcall() 304

14.5建立工程,编译和运行 309

14.5.1创建和配置工程 309

14.5.2编译执行 311

第15章 SDIO总线协议与SD卡操作 312

15.1 SD卡简介 312

15.1.1 SD卡家族 312

15.1.2 SD卡引脚功能定义 313

15.1.3 SD卡内部组成 314

15.1.4 SD卡容量规格 315

15.1.5 SDIO接口规范和总线应用拓扑 315

15.2 SD协议 316

15.2.1工作模式与状态 316

15.2.2命令和响应格式 316

15.2.3卡识别模式 317

15.2.4数据传输模式 320

15.3 STM32 SDIO控制器 322

15.3.1控制器总体结构描述 322

15.3.2 SDIO适配器模块 323

15.3.3 SDIO AHB接口 325

15.4工程入口及配置 326

15.4.1实验硬件资源 326

15.4.2工程入口文件main.c 327

15.5 SDIO初始化 328

15.5.1 SD卡上电初始化函数SD_PowerON() 330

15.5.2 SD卡规格信息获取函数SD_InitializeCards() 336

15.6 SDIO卡测试代码分析 339

15.6.1块擦除 340

15.6.2多块写 342

15.6.3多块读 345

15.7建立工程,编译和运行 348

15.7.1建立以下工程文件夹 348

15.7.2创建文件组和导入源文件 348

15.73编译执行 349

第16章 移植文件系统FatFs 350

16.1实验现象预览:基于Shell的文件系统命令 350

16.2 FatFs文件系统 351

16.2.1 FatFs特点 351

16.2.2 FatFs在设备系统中的层次与接口 351

16.3移植FatFs文件系统 352

16.3.1 FatFs源代码结构 352

16.3.2基于FatFs应用的常用数据类型说明 353

16.3.3 FatFs的移植 355

16.4 FatFs文件系统应用示例分析 357

16.4.1工程源代码逻辑 357

16.4.2工程源代码分析 358

16.5建立工程,编译和运行 363

16.5.1创建和配置工程 363

16.5.2编译执行 364

第17章 无线接入: Wi-Fi模块ESP8268应用 365

17.1无线技术标准:IEEE 802.11 365

17.1.1 IEEE 802.11简介 365

17.1.2无线局域网的组网拓扑 366

17.1.3无线接入过程的三个阶段 367

17.2 ESP-WROOM-02模组 368

17.2.1 ESP-WROOM-02性能参数 368

17.2.2 ESP-WROOM-02与主机系统的电路连接 369

17.3 ESP-WROOM-02指令集 370

17.3.1 ESP8266 AT常用指令 370

17.3.2使用ESP-WROOM-02进行真实通信 373

17.4封装ESP-WROOM-02的配置函数 375

17.4.1 ESP-WROOM-02的初始化函数 375

17.4.2 ESP-WROOM-02的配置函数 377

17.4.3优化USART接收缓存的数据结构 379

17.4.4 ESP-WROOM-02的Shell操作命令 381

17.5建立工程,编译和运行 384

17.5.1工程程序文件 384

17.5.2创建和配置工程 384

17.5.3编译执行 385

第18章 移植цC/OS-Ⅲ操作系统 387

18.1 цC/OS-Ⅲ基础 387

18.1.1 цC/OS-Ⅲ简介 387

18.1.2 цC/OS-Ⅲ内核组成架构 388

18.2 цC/OS-Ⅲ任务基础 390

18.2.1任务状态 390

18.2.2任务控制块和就绪任务表 391

18.2.3创建任务 391

18.2.4任务同步与通信 393

18.3 цC/OS-Ⅲ的信号量 393

18.3.1信号量分类及其应用 393

18.3.2信号量工作方式 394

18.3.3信号量应用操作步骤 396

18.4 цC/OS-Ⅲ的消息队列 396

18.4.1消息队列工作模型 397

18.4.2消息队列应用操作步骤 397

18.5 цC/OS-Ⅲ的事件标志组 398

18.5.1事件标志组工作模型 398

18.5.2事件标志组应用操作步骤 399

18.6信号量、消息队列和事件标志组综合示例 399

18.6.1综合示例任务关系图 400

18.6.2任务代码头文件task.h 400

18.6.3任务代码C文件task.c 402

18.6.4中断异常处理文件stm32f10x_it.c 409

18.7 цC/OS-Ⅲ移植 410

18.7.1 цC/OS-Ⅲ源码组织架构 410

18.7.2简化цC/OS-Ⅲ源码组织架构 411

18.7.3建立基于цC/OS-Ⅲ的工程 412

18.7.4 цC/OS-Ⅲ综合示例运行效果 414

第19章 基于цC/OS-Ⅲ的信息系统 415

19.1系统功能描述 415

19.1.1系统任务划分 415

19.1.2系统实际运行效果 415

19.2系统任务设计分析 417

19.2.1 Shell任务 417

19.2.2 LED灯闪烁任务 420

19.2.3事件监测任务 420

19.2.4系统统计任务 422

19.2.5无线通信处理任务 425

19.3工程源代码(文件)整合 428

19.3.1主文件main.c 428

19.3.2任务头文件task.h 428

19.3.3 includes.h文件 429

19.3.4任务实现文件task.c 430

19.4建立工程,编译和运行 430

19.4.1建立工程源代码结构 430

19.4.2建立文件组,导入源文件 430

19.4.3编译执行 431

参考文献 432