《STM32库开发实战指南》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:刘火良,杨森编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2013
  • ISBN:9787111426370
  • 页数:482 页
图书介绍:本书的主要内容将着重介绍STM32的库函数,以及如何使用库的方式进行开发。使初学者能够在此基础上迅速入门,掌握STM32的开发方法。本书内容基于ARM-Cortex M3内核的STM32F103芯片,紧紧围绕“库”展开,系统地讲述了STM32固件库的原理、使用方法。

前言 2

第一部分 库开发初级篇 2

第1章 为什么学习STM32 2

1.1嵌入式技术知识结构 2

1.2嵌入式工程师成长之路 3

1.3为什么学习STM32 4

1.4如何学习STM32 4

第2章 初识STM32固件库 5

2.1 STM32神器之库开发 5

2.1.1什么是STM32库 5

2.1.2为什么采用库开发 6

2.2 STM32结构及库层次关系 7

2.2.1 CMSIS标准 7

2.2.2库目录、文件简介 8

2.2.3 STM32固件库文件间的关系 14

2.2.4使用库帮助文档 15

第3章GPIO入门之流水灯 18

3.1安装MDK 18

3.2建立工程模板 19

3.2.1新建工程 19

3.2.2配置J-LINK硬件调试 25

3.3如何编译和下载程序 27

3.3.1如何编译程序 27

3.3.2如何下载程序 27

第4章 深入分析流水灯例程 30

4.1 STM32的GPIO 30

4.2 STM32的地址映射 33

4.2.1温故而知新stm32f10x.h文件 33

4.2.2外设基地址 35

4.2.3总线外设基地址 36

4.2.4寄存器组基地址 37

4.3 STM32固件库对寄存器的封装 38

4.4 STM32的时钟系统 39

4.4.1时钟树&时钟源 39

4.4.2高速外部时钟 41

4.4.3 HCLK、 FCLK、 PCLK1、PCL K2 42

4.5 LED具体代码分析 42

4.5.1实验描述及工程文件清单 42

4.5.2配置工程环境 43

4.5.3编写用户文件 44

4.5.4初始化结构体 ——GPIO-InitIypeDef类型 46

4.5.5初始化库函数——GPIO-Init() 47

4.5.6开启外设时钟 48

4.5.7控制I/O输出高、低电平 52

4.5.8 led.h文件 52

4.5.9 main文件 53

4.6 GPIO-Init()函数的实现 55

4.6.1规范的位操作方法 55

4.6.2 GPIO-Init()实现代码分析 55

4.6.3再论开发方式 60

4.7开发步骤总结 61

第5章 调试程序 62

5.1 MDK软件仿真调试 62

5.2使用J-LINK进行硬件调试 64

5.2.1硬件调试 64

5.2.2软件编译过程 65

53 MDK使用小技巧 66

第二部分 库开发中级篇 70

第6章GPIO再举例之按键实验 70

6.1 GPIO的8种工作模式 70

6.1.1 4种输入模式 71

6.1.2 4种输出模式 71

6.2按键实验分析 72

6.3按键代码分析 72

6.3.1实验描述及工程文件清单 72

6.3.2配置工程环境 73

6.3.3 main文件 73

6.3.4 GPIO初始化配置 74

6.3.5利用固件库的数据类型 75

6.3.6实现LED反转 77

6.3.7实验现象 77

第7章EXTI之按键中断实验 78

7.1 STM32的中断和异常 78

7.2 NVIC中断控制器 81

7.2.1 NVIC结构体成员 81

7.2.2抢占优先级和响应优先级 82

7.2.3 NVIC的优先级组 83

7.3 EXTI外部中断 83

7.4中断检测按键实验分析 84

7.4.1实验描述及工程文件清单 84

7.4.2配置工程环境 85

7.4.3 main文件 86

7.4.4配置外部中断 86

7.4.5 AFIO时钟 87

7.4.6 NVIC初始化配置 88

7.4.7 EXTI初始化配置 89

7.4.8编写中断服务函数 89

7.4.9实验现象 91

第8章 串口通信(USART) 92

8.1异步串口通信协议 92

8.2直通线和交叉线 93

8.3串口工作过程分析 94

8.3.1波特率控制 94

8.3.2收发控制 96

8.3.3数据存储转移 96

8.4串口通信实验分析 96

8.4.1实验描述及工程文件清单 96

8.4.2配置工程环境 97

8.4.3 main文件 97

8.4.4 USAR7.初始化配置 98

8.4.5 printf()函数重定向 101

8.4.6 USART1-printf()函数 103

8.4.7实验现象 106

第9章 库函数开发小结 107

9.1初始化 107

9.2数据输入输出 108

9.3状态位、标志位 108

9.3.1事件 109

9.3.2标志位的检查与清除 109

9.4外设函数分类 110

第10章DMA——为CPU减负 112

10.1 DMA功能简介 112

10.2 DMA工作分析 112

10.3 DMA实例之串口通信 113

10.3.1实验描述及工程文件清单 113

10.3.2配置工程环境 114

10.3.3 main文件 114

10.3.4 DMA初始化 115

10.3.5使用DMA中断 121

10.3.6实验现象 123

第11章ADC实验(DMA方式) 124

11.1 ADC简介 124

11.2 SIM32的ADC主要技术指标 124

11.3 ADC工作过程分析 125

11.4 ADC采集数据实例(采用DMA模式) 126

11.4.1实验描述及工程文件清单 127

11.4.2配置工程环境 128

11.4.3 main文件 128

11.4.4 ADC初始化 129

11.4.5计算电压值 138

11.4.6实验现象 138

第12章SysTick(系统滴答定时器) 139

12.1 SysTick——操作系统的心跳 139

12.2 SysTick工作分析 140

12.3使用SysTick精确延时实验分析 141

12.3.1实验描述及工程文件清单 142

12.3.2配置工程环境 142

12.3.3 main文件 143

12.3.4配置并启动SysTick 143

12.3.5定时时间的计算 147

12.3.6编写中断服务函数 147

12.3.7使用SysTick测量时间的功能 149

12.3.8实验现象 149

第13章STM32定时器 150

13.1定时器功能简介 150

13.2定时器工作分析 150

13.2.1基本定时器 150

13.2.2通用定时器 150

13.2.3高级定时器 155

13.3 PWM输出实例分析 157

13.3.1实验描述及工程文件清单 157

13.3.2配置工程环境 157

13.3.3 main文件 158

13.3.4定时器初始化 159

13.3.5实验现象 164

第14章I2C接口 168

14.1 I2C协议简介 168

14.1.1物理层 168

14.1.2协议层 169

14.2 STM32的I2C特性及架构 170

14.2.1 I2C接口特性 170

14.2.2 I2C架构 170

14.3 I2C接口读写EEPROM实验 171

14.3.1实验描述及工程文件清单 171

14.3.2配置工程环境 171

14.3.3 main文件 172

14.3.4 I2C接口初始化 173

14.3.5对EEPROM的读写操作 177

14.3.6使用I2C读写EEPROM流程总结 186

14.3.7实验现象 186

第15章SPI模块 188

15.1 SPI协议简介 188

15.1.1 SPI信号线 188

15.1.2 SPI模式 189

15.2 STM32的SPI特性及架构 190

15.2.1 STM32的SPI特性 190

15.2.2 STM32的SPI架构分析 190

15.3 SPI接口读取Flash实例分析 191

15.3.1实验描述及工程文件清单 192

15.3.2配置工程环境 193

15.3.3 main文件 193

15.3.4 SPI初始化 195

15.3.5控制Flash的命令 199

15.3.6读取厂商ID 202

15.3.7擦除Flash内容 203

15.3.8向Flash写入数据 207

15.3.9从Flash读取数据 210

15.3.10小结 211

15.3.11实验现象 211

第16章CAN控制器 212

16.1 CAN协议简介 212

16.1.1物理层 212

16.1.2 CAN的报文种类及结构 213

16.1.3同步 215

16.2 STM32的CAN特性及架构 217

16.2.1 CAN特性 217

16.2.2 CAN架构 218

16.3双CAN通信实验分析 219

16.3.1实验描述及工程文件清单 219

16.3.2配置工程环境 220

16.3.3 main文件 221

16.3.4配置CAN接口 223

16.3.5打包报文 232

16.3.6发送报文 234

16.3.7接收报文、编写中断服务函数 234

16.3.8实验小结 236

16.3.9实验现象 237

第三部分 库开发高级篇 240

第17章SDIO之SD卡驱动 240

17.1 SD协议简介 240

17.1.1卡的种类 240

17.1.2 SDIO基本架构 241

17.2 STM32的SDIO接口 241

17.2.1从SDIO的时钟说起 242

17.2.2 SDIO的命令格式 242

17.2.3数据传输格式 243

17.3 SD卡读写实验分析 243

17.3.1实验描述及工程文件清单 243

17.3.2配置工程环境 244

17.3.3 main文件 246

17.3.4 SDIO初始化 247

17.3.5卡的上电识别流程 249

17.3.6卡的初始化流程 256

17.3.7对SD卡进行读写 259

17.3.8原版官方驱动例程的bug 263

17.3.9实验现象 264

第18章 文件系统之FATFS R0.09 265

18.1什么是文件系统 265

18.2 FATFS文件系统简介 266

18.2.1 FATFS的目录结构 266

18.2.2 FATFS帮助文档 266

18.2.3 FATFS源码 267

18.3移植FATFS文件系统实验 267

18.3.1实验描述及工程文件清单 267

18.3.2配置工程环境 269

18.3.3为文件系统添加底层驱动 270

18.3.4添加简体中文和 长文件名支持 274

18.3.5 main文件 274

18.3.6实验现象 277

第19章MP3播放器 278

19.1 MP3文件探秘 278

19.1.1文件格式 278

19.1.2 MP3文件的原始数据 278

19.1.3 MP3文件格式 279

19.2 VS1003硬件解码芯片 279

19.2.1 VS1003芯片简介 280

19.2.2 TDA1308芯片 280

19.3 MP3播放器实验 280

19.3.1实验描述及工程文件清单 280

19.3.2配置工程环境 282

19.3.3 main文件 283

19.3.4控制VS1003进入准备状态 284

19.3.5播放MP3文件 286

19.3.6 STM32的堆栈 291

19.3.7实验现象 294

第20章USB大容量存储器实例 295

20.1 USB协议分析 295

20.1.1协议版本 295

20.1.2 USB电气特性 295

20.1.3 USB通信模型 296

20.1.4 USB枚举 298

20.2 STM32的USB控制器 299

20.3 USB读取SD卡——模拟U盘实验 301

20.3.1实验描述及工程文件清单 301

20.3.2配置工程环境 302

20.3.3 USB固件库说明 303

20.3.4 main文件 305

20.3.5基本配置 306

20.3.6 USB初始化 308

20.3.7中断服务函数 310

20.3.8 BOT和SCSI协议 313

20.3.9实验现象 316

第21章LCD触摸屏画板 317

21.1 LCD控制器简介 317

21.1.1 ILI9341控制器结构 317

21.1.2像素点的数据格式 317

21.1.3 ILI9341的通信时序 319

21.2用STM32驱动LCD 320

21.2.1 FSMC简介 320

21.2.2用FSMC模拟8080时序 322

21.3触摸屏感应原理 322

21.4 TSC2046触摸屏控制器 323

21.5 LCD触摸屏画板实验 323

21.5.1实验描述及工程文件清单 323

21.5.2配置工程环境 325

21.5.3 main文件 326

21.5.4初始化FSMC模式 327

21.5.5 FSMC模拟8080读写 参数、命令 332

21.5.6液晶屏画点函数 334

21.5.7触摸屏校正 338

21.5.8检测触点、画点 341

21.5.9实验现象 342

第22章 字库及BMP图片显示 343

22.1什么是字模 343

22.2制作字模 344

22.3 BMP图片格式 347

22.4显示中英文及BMP图片实验 351

22.4.1实验描述及工程文件清单 351

22.4.2配置工程环境 352

22.4.3 main文件 352

22.4.4显示汉字 353

22.4.5在SD卡上读取与保存BMP图像 358

22.4.6实验现象 364

第23章OV7670摄像头驱动 365

23.1摄像头的分类 365

23.1.1数字摄像头与模拟摄像头的区别 365

23.1.2 CCD与CMOS的区别 365

23.2 OV7670介绍 366

23.2.1 OV7670功能框架 366

23.2.2 OV7670管脚封装 367

23.3 SCCB总线 368

23.3.1 SCCB接口定义 368

23.3.2 SCCB时序描述 370

23.4摄像头模块 372

23.4.1摄像头模块硬件介绍 372

23.4.2 OV7670输出时序 372

23.4.3 FIFO时序 375

23.4.4摄像头的驱动原理 376

23.5摄像头驱动实验 377

23.5.1实验描述及工程文件清单 377

23.5.2配置工程环境 379

23.5.3 main文件 379

23.5.4 SCCB总线的软件实现 380

23.5.5初始化OV7670 386

23.5.6采集并显示图像 388

23.5.7实验现象 393

第24章 以太网及Lwl P协议栈移植 394

24.1互联网模型 394

24.2以太网 395

24.2.1 PHY层 395

24.2.2 MAC子层 396

24.2.3以太网控制器 397

24.3 MAC之上的网络层 398

24.3.1为什么在MAC之上还有分层 398

24.3.2 TCP/IP协议中各层次的功能 398

24.3.3 LwIP协议栈 400

24.4 ENC28J60+LwIP以太网实验 401

24.4.1实验描述及工程文件清单 401

24.4.2配置工程环境 402

24.4.3 main文件 403

24.4.4 LwIP对底层数据结构的封装 404

24.4.5初始化协议栈 408

24.4.6 LwIP对底层操作的封装 410

24.4.7轮询和计时 415

24.4.8 opt.h文件和debug 416

24.4.9 LwIP应用 420

24.4.10网页服务器 421

24.4.11实验现象 426

第25章Wi-Fi模块EMW3180驱动 430

25.1资料与工具下载 430

25.2 EMW3180简介 430

25.3 EMW3180驱动实验 434

25.3.1实验描述及工程文件清单 434

25.3.2配置工程环境 435

25.3.3 EMSP API函数 435

25.3.4 API函数一览 436

25.3.5 main文件 439

25.3.6 em380c hal.c文件 441

25.3.7实验现象 445

第四部分 库开发系统篇 448

第26章μC/OS-Ⅲ及其源代码介绍 448

26.1 μC/OS简介 448

26.1.1操作系统与裸机的区别 448

26.1.2 μC/OS实时操作系统 448

26.2 μC/OS-Ⅲ与μC/OS- Ⅱ的主要区别 450

26.3 μC/OS-Ⅲ源码 450

26.4 μOS-Ⅲ工程架构 452

第27章 移植μC/O S-Ⅲ到 STM32 454

27.1搭建μC/OS工程文件结构 454

27.2修改μC/OS代码 459

27.2.1修改os-cpu.h文件 459

27.2.2修改os-cpu-c.c 459

27.2.3修改os-cpu-a.asm文件 460

27.2.4修改cpu-a.asm文件 461

27.2.5修改startup-stm32f10x-hd.s文件 462

27.2.6修改stm32f10x-it.c文件 463

27.3编写用户文件 464

27.3.1编写includes.h文件 464

27.3.2编写BSP相关文件 465

27.3.3创建任务 466

27.4配置μC/OS-Ⅲ 468

第28章 运行多任务 473

28.1创建用户任务 473

28.2编写用户代码 476

28.3任务执行流程 479

参考文献 482