首页>参考读物>计算机科学与技术>综合

STM32库开发实战指南
作者 : 刘火良 杨森 编著
出版日期 : 2013-06-13
ISBN : 978-7-111-42637-0
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 494
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书的主要内容将着重介绍STM32的库函数,以及如何使用库的方式进行开发。使初学者能够快速入门能够在此基础上迅速入门,掌握STM32的开发方法。

图书特色

第一本深入剖析STM32官方库及其使用的权威指南
从流水灯剖析到μC/OS-III移植,零死角深入STM32库开发
配套业内最流行的野火STM32开发板,提供完整的工程文件和源代码,极具可操作性

STM32库开发实战指南
刘火良 杨森 编著

封底:
横亘在STM32初学者面前最大的一个问题就是选择用库的方式开发,还是用寄存器的方式开发。对此,曾在网上引发了一场大讨论,大家众说纷纭,仁者见仁,智者见智。从深层次看,这个问题其实并不是一个对开发方式进行选择的问题。
在ARM还没有打算进入MCU领域的时候,大多数单片机工程师的学习是从8位单片机开始的,而且以51单片机居多。由于51单片机的寄存器非常少,很容易记忆,那么使用操作寄存器的方式进行单片机程序开发不但容易,而且高效。随着ARM Cortex-M内核和STM32的发布,这个局面就被打破了。
在苹果公司旗舰产品iPhone和iPad的带领下,以触控屏应用为代表的人机交互方式席卷了全球,当然,中国也未能幸免。在中国,连最保守的工业领域也开始接受这种先进的人机交互方式。然而,这时候,工业界普遍应用的微控制器仍然是51单片机,它不能满足工业界对新型人机交互体验的需求。STM32的出现填补了工业界这个缺憾,从它发布开始,STM32迅速蹿红,成为MCU领域一颗耀眼的新星。原来熟悉了51单片机的工程师不得不开始学习新的基于Cortex-M架构的MCU。然而,他们很快发现一个问题,对32位MCU寄存器的操作是一个极富挑战的事情,因为寄存器太多了。为了解决这个问题,ST公司组织自己的工程技术人员开发了一个针对STM32的固件库。通过对寄存器的封装,开发人员只须简单地调用固件库函数,就能够完成复杂的开发任务。根据ST公司的统计,有大约一半的初学者选择了库开发的方式。他们并没有回过头去学习复杂的寄存器操作,而是选择直接从固件库入手,很快掌握了STM32的开发技术。关于寄存器的开发方式好,还是固件库的开发方式好的争议就在这两个人群中蔓延开了。
那么究竟哪种方式好呢?这个问题很难回答。如果你本身就是一个完全没有接触过单片机的“白丁”,那么建议你还是不要冒险体验寄存器的开发方式了。你可以在尝试掌握了库开发的方式之后再去重新体验一下寄存器的开发方式。如果你已经掌握了某个单片机的开发,那么沿用原来的思路是一个省脑细胞的决定。但是如果你的志向不是仅仅屈居一个单片机码农,你若有更高的理想和抱负,建议你用批判和分析的目光学习一下固件库的开发方式。因为当你迈向更高阶的ARM Linux嵌入式开发的时候,你会发现这个功课是值得做的,它给了你一把打开嵌入式Linux开发大门的钥匙——自顶向下的开发方式和思想。

前:
现在用STM32 MCU的人不少,写STM32的书也不少。本书的特色是在一块业内流行的STM32开发板上,将ST官方库与STM32许多复杂外设的使用结合起来,表达方式通俗实用,让初学者容易理解且实战性极强,这样的思路和方法对基于32位ARM Cortex系列MCU的教学和行业应用都很有借鉴意义。
书的最后一部分还对刚刚宣布开源的嵌入式实时操作系统μC/OS III和开源的轻量级TCP/IP协议栈LwIP进行了深入地探讨和分析,为读者进一步学习嵌入式系统知识扫清了障碍。
本书区别于市面上其他书的另外一个特点是,书中对嵌入式技术成长路线进行必要的分析,为初学者展示了一条清晰的学习上升路线,有很强的指导意义。

—— 北京麦克泰软件技术公司创始人、
董事长,嵌入式系统联谊会发起委员
何小庆 


刘火良 网名野火,嵌入式开发工程师,野火嵌入式开发工作室的创始人,长期从事基于ARM Cortex-M系列MCU嵌入式开发工作,积累了丰富的实战开发经验。作者在国内最受嵌入式开发工程师欢迎的阿莫电子论坛中担任版主。担任版主期间,为网友贡献了大量的实战开发教程和资料,累计下载量超过3万次,且被广泛转载,深得网友喜爱。

杨 森 网名flyleaf,嵌入式开发工程师 ,野火嵌入式开发工作室发起人,对嵌入式实时操作系统有深入的研究和理解。曾推出《从零开始移植μC/OS到野火STM32开发板》,以全新的视角自上而下讲解μC/OS移植方法,深受网友好评。

图书前言

单片机是对8/16位MCU(微控制器)的另外一种叫法。传统的8/16位单片机,久经岁月的洗礼,仍然在工业控制应用中大放光芒。然而,现在的工程师面对的更多的工业控制产品需求是多功能、易用界面、低功耗以及多任务等。基于这样的需求,以往的8/16位单片机已不能满足要求,工程师必须寻找新的符合要求的MCU。工程师虽然可以选择诸如ARM7、ARM9这类速度更快的32位MCU,但是鉴于对成本和开发门槛等种种考虑,它们还是不能满足需求。正是看准了这个市场, ARM公司推出了其全新的基于ARMv7架构的32位Cortex-M3 微控制器内核。紧随其后,ST(意法半导体)公司就推出了基于Cortex-M3内核的MCU——STM32。STM32凭借其产品线的多样化、极高的性价比、简单易用的开发方式,迅速在众多Cortex-M3 MCU中脱颖而出,成为最闪亮的一颗新星。STM32一上市就迅速占领了中低端MCU市场,颇有星火燎原之势,这与它倡导的基于固件库的开发方式密不可分。采用库开发的方式可以快速上手,仅通过调用库里面的API(应用程序接口)就可以迅速搭建一个大型的程序,写出各种用户所需的应用,这就大大降低了学习的门槛和开发周期。然而,又因为在开发中只是调用API,而忽略了底层寄存器的操作,库开发被习惯了寄存器开发方式的工程师指为“于浮沙筑高台”,没有学习的价值。这种看法具有一定的片面性,他显然没有意识到这是一种全新的学习方法。试问,对于初学者,面对一个32位且有如此多寄存器的单片机,如果还像我们以往操作8位机,通过配置寄存器的方式来实现,那会是多么繁杂的一项工作?除此之外,库的开发方式自顶向下,它是迈向更高端嵌入式Linux开发的一个垫脚石。
  库开发已成主流,这是不争的事实。STM32固件库之所以流行并被大家所喜爱,可以归结为以下两个原因:
(1)技术潮流
  1)于个人:库开发大大地降低了学习的门槛,提高了学习的效率,使个人初步了解了大的程序设计,是一种自顶向下的学习方法,可以从上层的API层层跟踪到底层,可以彻彻底底地了解寄存器,了解CPU的内存分布,再到启动代码、开发环境的配置等。如果再深究,还会涉及编译器甚至工具链。库的学习,可不仅仅是简单地调用API,我们需要去分析这个库是如何构建的,是如何从内存到寄存器,寄存器到结构体,结构体到更各层的API,再到层层外设的文件关联。这里面涉及了太多的C语言的知识,如关键字、宏、结构体、指针、类型转换、条件编译、断言、内联函数等。这些知识的学习,又岂能说是“于浮沙筑高台”。如果你的C语言还停留在基本语法的阶段,那么通过对库的使用和学习,你的C语言将会得到脱胎换骨的提升。学会了库开发还可以快速地迁移到ST其他系列单片机的学习,如STM32F207、STM32F407,这些MCU的固件库基本上都是兼容的。反观如此庞大的固件库,还要相互兼容,细心的人一定可以从中获益良多!
  2)于公司:在公司产品开发中,产品上市速度是非常重要的成功因素,库开发可以极大地缩短产品研发周期,以便快速抢占市场。而且库让程序的维护成本更低,程序的升级更快捷。用库来开发,真可谓事半功倍,一箭双雕。
(2)市场趋势
  有人曾经质疑STM32的固件库降低了MCU的性能,然而,他却没有考虑到STM32的性能和资源已经不是传统的8/16单片机可比的了。强大的硬件应该与消耗这些资源的软件相匹配,否则资源就被浪费了。硬件和软件是相辅相成、共同促进的。所以硬件改善后,工程师对于MCU的关注应该从全局着眼。
  本书采用MDK开发环境,全部例程基于3.5.0版本的固件库讲解,不是简单地调用库,而是试图通过对固件库的使用详细讲解什么是库、为什么使用库、怎样使用库等一系列问题,进而引导读者使用高效率的库开发方法。
  本书采用原理分析、代码讲解、实验运用这三点连线的讲解方式,循序渐进,适合在校大学生和科研机构开发人员学习使用。全书分为四个部分,第一部分(第1~5章)是库开发初级篇,涉及入门的两个主题。一个是嵌入式工程师成长之路,属于方法论的问题,涉及了一个工程师从学生时代开始,在每一个不同的阶段应该学习什么、该如何进阶等。另一个是通过对库的了解和GPIO的学习,让读者快速掌握STM32的开发方法,这是入门的第一步。第二部分(第6~16章)是库开发中级篇,讲解了STM32各个外设的使用,是学习的一个进阶阶段,也是STM32学习的重中之重。第三部分(第17~25章)是库开发高级篇,是STM32各个外设的实战演练,如MP3、液晶、摄像头、Wi-Fi等,是属于项目实战的例子,一般可直接用于工程项目的开发。第四部分(第26~28章)是库开发系统篇,这是嵌入式系统开发的必经之路,是区别裸与不裸的分水岭;这部分讲解了μ C/OS最新版本μ C/OS-Ⅲ在STM32中的移植,通过该移植应用实践,相信可以为以后进阶到WinCE、Linux操作系统的学习打下坚实的基础。
致 谢
  首先要感谢本书的策划编辑张国强先生,是他对STM32的关注促成了这本书的出版,同时在我们撰写书稿时对本书提出了宝贵的写作建议,并对书稿进行了仔细审阅。其次要感谢野火工作室的成员廖锦松、曾云清等人提供的部分例程及资料;感谢好友何卓波对书稿内容的校正工作。
  由于本书涉及的知识面广,时间又仓促,限于笔者的水平和经验,疏漏之处在所难免,恳请专家和读者批评指正,可以发送邮件到wildfireteam@163.com 与作者进行交流,或者到阿莫论坛野火M3专区 http://www.amobbs.com 进行讨论。

刘火良 杨森

上架指导

嵌入式

封底文字

现在用STM32 MCU的人不少,写STM32的书也不少。本书的特色是,很好在一个实际STM32开发板上,将ST软件库与STM32许多复杂的外设和应用结合起来,用通俗和实用的方式表达出来,让初学者容易理解、学会和实际操作, 这样的思路和方法对于基于32位ARM Cortex 系列MCU教学和应用是很有借鉴作用的。

——北京麦克泰软件技术公司创始人和董事长,嵌入式系统联谊会发起委员 何小庆

作者简介

刘火良 杨森 编著:暂无简介

图书目录

前 言
第一部分 库开发初级篇
第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、PCLK2 42
4.5 LED具体代码分析 42
4.5.1 实验描述及工程文件清单 42
4.5.2 配置工程环境 43
4.5.3 编写用户文件 44
4.5.4 初始化结构体——GPIO_InitTypeDef类型 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
5.3 MDK使用小技巧 66
第二部分 库开发中级篇
第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 USART初始化配置 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 STM32的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
第三部分 库开发高级篇
第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章 以太网及LwIP协议栈移植 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
第四部分 库开发系统篇
第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 μC/OS-Ⅲ工程架构 452
第27章 移植μC/OS-Ⅲ到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

教学资源推荐
作者: 杜宇人 编著
作者: 吴跃 主编 李树全 尚明生 陈端兵 参编
作者: (美)Roger S. Pressman  David Lowe 著
作者: 孙涌 主编 陈建明 王辉 参编
参考读物推荐
作者: 赵仁乾,田建中,叶本华,常国珍 著
作者: 《越玩越野》杂志社 编
作者: [墨西哥]温贝托?塞万提斯(Humberto Cervantes) [美]里克?卡斯曼(Rick Kazman) 著