
Cortex-M3之STM32嵌入式系统设计
《cortex-m3之stm32嵌入式系统设计》介绍了以arm cortex-m3为核心的stm32f103增强型微控制器的特点,深入讲解其硬体和软体设计方法。
基本介绍
- 书名:Cortex-M3之STM32嵌入式系统设计
- 作者:廖义奎
- ISBN:9787512326712
- 页数:432
- 出版社:中国电力出版社
- 开本:16开
基本信息
版次:1-1
内容简介
本书分为stm32基础开发、stm32深入开发以及stm32高级开发三部分。基础开发部分介绍了嵌入式系统概述、stm32最小系统设计、stm32程式设计入门、gpio套用、gcc编译器的安装与套用、stm32外部中断、面向对象设计的本质、usart通信等内容;深入开发部分介绍了深入stm32的工作原理、定时器与日曆、adc套用、dma套用、备份暂存器与看门狗程式、tft驱动与显示、触控萤幕驱动、sd卡驱动与fat档案系统等;在高级开发部分介绍?c/os-ii在stm32上的移植、汉字与图形图像显示、摄像头驱动与图像採集、乙太网及web远程控制系统设计等内容。
《cortex-m3之stm32嵌入式系统设计》配套光碟中附有所有章节的源程式。本书适合于嵌入式开发人员作为开发参考资料,也适合于高校师生作为单片机、嵌入式系统课程的教材和教学参考书。
目录
《cortex-m3之stm32嵌入式系统设计》
前言
第1章 概述 1
1.1 嵌入式系统定义 1
1.2 嵌入式系统的发展 1
1.2.1 从单片机到嵌入式系统 1
1.2.2 从晶片级设计到系统级设计 2
1.2.3 从面向器件到面向任务的设计 2
1.2.4 从单处理器设计到多处理器设计 2
1.3 嵌入式系统的套用 3
1.4 arm系列嵌入式系统处理器 4
1.4.1 arm处理器分类 4
1.4.2 arm cortex处理器 5
1.4.3 arm coretx-m3处理器 6
1.4.4 arm cortex-a8处理器 7
1.5 从8/16位处理器到arm cortex-m3/m0 7
1.6 常见的cortex-m0/m3系列mcu 9
第2章 stm32最小系统设计 14
2.1 stm32f103c最小系统设计方案 14
2.2 最小系统设计的要素 16
.2.2.1 stm32外部晶振 16
2.2.2 复位电路 18
2.2.3 led、key及boot跳线 19
2.2.4 稳压电源及isp下载口 20
2.2.5 io连线埠 23
2.3 pcb图设计 24
第3章 stm32程式设计入门 26
3.1 stm32入门之hello world程式 26
3.1.1 开发环境 26
3.1.2 编写stm32的c程式 27
3.1.3 用gcc编译stm32程式 29
3.1.4 stm32程式下载 30
3.1.5 在obtain_studio中编译hello world程式 32
3.2 不同开发板的hello world程式 32
3.3 基于stm32固件库的入门程式 33
3.3.1 stm32固件库 33
3.3.2 stm32固件库外设的初始化和设定 35
3.3.3 基于stm32固件库的程式设计 36
3.4 基于stm32固件库的hello world程式代码分析 37
第4章 gpio套用 40
4.1 认识stm32 gpio 40
4.1.1 gpio功能特点 40
4.1.2 stm32 io口的优点 41
4.1.3 stm32固件库中提供的gpio库函式 42
4.2 key_led程式 43
4.2.1 创建stm32_c++key_led项目 43
4.2.2 stm32_c++key_led项目程式分析 44
4.3 低层代码分析 47
4.3.1 gpio连线埠的定义 47
4.3.2 ahb/apb桥的配置 49
4.3.3 gpio引脚的配置 50
4.3.4 gpio的读写 53
第5章 gcc编译器的安装与套用 54
5.1 gcc介绍 54
5.1.1 gcc概述 54
5.1.2 mingw简介 54
5.1.3 mingw的安装 55
5.1.4 mingw测试 56
5.1.5 常见gcc用法 58
5.2 arm gcc编译器 61
5.2.1 winarm编译器 61
5.2.2 sourcery g++ lite for arm eabi编译器 62
5.3 obtain_studio集成开发系统 64
5.3.1 obtain_studio集成开发系统介绍 64
5.3.2 obtain_studio集成开发系统常用技巧 67
5.4 gcc make编译档案设计 69
5.4.1 gcc make常用命令 69
5.4.2 makefile档案规则 71
5.4.3 makefile档案函式 75
5.5 gcc编译器ld脚本 79
5.5.1 c/c++程式记忆体空间 79
5.5.2 gcc ld脚本基础 82
5.5.3 stm32程式中的ld脚本程式 86
第6章 stm32外部中断 89
6.1 stm32外部中断 89
6.2 stm32外部中断实例 90
6.3 stm32中断配置 92
6.3.1 stm32外部中断程式分析 92
6.3.2 中断通道配置 94
6.3.3 中断优先权配置 94
6.3.4 外部中断模式配置 94
6.3.5 外部中断回响函式配置 97
第7章 面向对象程式设计 99
7.1 程式风格 99
7.1.1 程式风格的比较 99
7.1.2 编程风格在程式设计中的作用 100
7.2 跨越开发板 100
7.2.1 连线埠映射的方法 100
7.2.2 模式设定的方法 101
7.3 分类与封装 101
7.3.1 什幺是分类与封装 101
7.3.2 封装的实现 102
7.4 隐藏与许可权 103
7.4.1 隐藏 103
7.4.2 许可权 103
7.5 继承 104
7.5.1 cgpio类的继承 104
7.5.2 测试cled和ckey类 104
7.6 组装 105
7.6.1 gpio的组装 105
7.6.2 gpio组装的测试 106
7.7 c++在嵌入式系统中的套用 108
7.7.1 c++介绍 108
7.7.2 兼容c语言 108
7.7.3 在c++程式中调用c函式 110
7.7.4 面向对象程式设计语言 110
7.7.5 泛型程式语言 111
7.7.6 stl编程 113
7.7.7 接口编程 114
第8章 usart通信 121
8.1 从51单片机到stm32的串口通信 121
8.2 usart通用串口通信设计 124
8.2.1 usart通用串口 124
8.2.2 usart通用串口通信设计方案 125
8.3 usart通用串口程式设计入门 125
8.3.1 usart数据传送程式设计 125
8.3.2 usart数据接收程式设计 126
8.4 中断方式的数据接收 127
8.4.1 中断方式的数据接收程式设计 127
8.4.2 多个串口驱动对象的协同工作 128
8.5 usart驱动程式的设计 129
8.5.1 usart驱动程式 129
8.5.2 printf与cout的实现 133
8.6 深入stm32 usart的工作原理 136
8.6.1 usart工作原理 136
8.6.2 传送器 137
8.6.3 接收器 139
8.6.4 usart初始化函式usart_init 141
8.6.5 usart波特率的计算方法 142
第9章 stm32的工作原理 144
9.1 stm32启动原理 144
9.1.1 stm32启动过程分析 144
9.1.2 stm32软体复位与功耗控制 145
9.2 系统时钟分析 147
9.2.1 系统时钟种类 147
9.2.2 stm32固件库设定时钟 149
9.2.3 系统时钟配置 150
9.3 存储器以及存储器映射 160
9.4 nvic嵌套中断向量控制器 162
9.4.1 nvic嵌套中断向量控制器 162
9.4.2 stm32的nvic优先权 166
9.5 stm32向量表及配置 170
9.5.1 stm32复位后从哪个地址开始执行 170
9.5.2 stm32向量表 170
9.5.3 用户程式中的向量表 171
第10章 定时器与日曆 179
10.1 systick定时器 179
10.1.1 关于systick 179
10.1.2 systick测试程式 180
10.1.3 systick程式分析 181
10.2 rtc定时器 184
10.2.1 rtc定时器介绍 184
10.2.2 rtc的本质与测试程式 186
10.2.3 日曆算法 187
10.2.4 stm32的rtc日曆测试程式 190
10.2.5 stm32 rtc程式分析 191
10.2.6 rtc秒中断 193
10.2.7 rtc闹钟 195
10.2.8 rtc校準 197
10.3 通用定时器 198
10.3.1 stm32定时器的种类 198
10.3.2 通用定时器介绍 200
10.3.3 通用定时器基本应用程式设计 200
10.3.4 通用定时器常用模式 203
10.3.5 输出模式测试实例 205
10.3.6 输入捕获模式测试实例 206
第11章 adc套用 209
11.1 adc与数位讯号处理系统设计 209
11.1.1 数位讯号处理系统设计 209
11.1.2 stm32简单的adc套用实例 212
11.1.3 过採样技术 213
11.1.4 欠採样技术 215
11.2 stm32的adc简介 216
11.3 stm32 adc入门实例 220
11.3.1 stm32 adc入门测试程式 220
11.3.2 stm32 adc程式分析 221
11.3.3 stm32内部温度测量 228
11.4 stm32 adc注入方式 229
11.4.1 stm32 adc注入方式简介 229
11.4.2 stm32双adc模式 230
11.4.3 stm32 adc注入方式实例 230
第12章 dma套用 235
12.1 stm32的dma简介 235
12.1.1 任务转移策略 235
12.1.2 stm32的dma功能 236
12.2 dma在adc中的套用 238
12.2.1 任务转移策略的dma adc套用实例 238
12.2.2 dma_adc程式分析 240
12.3 dma在usart中的套用 245
12.3.1 任务转移策略的usart dma数据传送 245
12.3.2 任务转移策略的usart dma数据接收 248
12.3.3 任务伫列策略的usart dma传送中断套用 251
12.3.4 任务循环策略的usart dma接收中断套用 254
第13章 备份暂存器与看门狗程式 258
13.1 stm32备份暂存器 258
13.1.1 备份暂存器特点 258
13.1.2 bkp套用实例 259
13.2 stm32看门狗 261
13.2.1 stm32看门狗介绍 261
13.2.2 独立看门狗介绍 262
13.2.3 独立看门狗程式设计 263
13.2.4 视窗看门狗介绍 265
13.2.5 视窗看门狗测试程式 267
第14章 tft驱动与显示 269
14.1 lcd概述 269
14.1.1 lcd简介 269
14.1.2 lcd接口 270
14.2 ili9xx系列tft驱动晶片 271
14.3 tft测试程式 275
14.3.1 tft测试程式準备工作 275
14.3.2 tft测试主程式 275
14.3.3 字元的显示 277
14.4 基于fsmc的tft驱动程式设计 279
14.4.1 stm32的fsmc功能 279
14.4.2 fsmc与tft连线埠连线与连线埠映射 279
14.4.3 fsmc与tft的记忆体空间映射与操作 281
14.4.4 fsmc初始化 282
14.4.5 tft初始化 287
14.4.5 tft驱动程式统一接口函式的实现 290
14.5 基于gpio的tft驱动程式设计 292
第15章 触控萤幕驱动 297
15.1 触控萤幕介绍 297
15.2 触控萤幕驱动ic 300
15.3 触控萤幕测试项目 302
15.4 触控萤幕驱动程式分析 303
15.5 触控萤幕校準 311
15.5.1 触控萤幕校準算法 311
15.5.2 触控萤幕校準的实现 312
第16章 sd卡驱动与fat档案系统 316
16.1 stm32的sdio接口 316
16.1.1 常见存储卡种类 316
16.1.2 sd卡结构 317
16.1.3 stm32的sdio接口 318
16.2 fat档案系统 320
16.2.1 fat档案系统概述 320
16.2.2 fatfs介绍 321
16.3 stm32 sdio接口 324
16.4 sd卡档案读写实例 326
16.4.1 準备工作 326
16.4.2 sd卡档案读写实例 327
16.4.3 sd卡档案操作类cfile的设计 328
16.4.4 目录操作 329
第17章 μc/os-Ⅱ在stm32上的移植 331
17.1 μc/os-Ⅱ概述 331
17.1.1 μc/os-Ⅱ简介 331
17.1.2 μc/os-Ⅱ的组成部分 331
17.2 μc/os-Ⅱ移植到stm32 332
17.3 μc/os-Ⅱ工作原理 337
17.3.1 μc/os-Ⅱ启动过程 337
17.3.2 任务切换的相关函式解析 338
第18章 汉字与图形图像显示 343
18.1 汉字显示 343
18.1.1 汉字型档 343
18.1.2 程式中加入汉字型档实现汉字显示 345
18.1.3 使用sd卡上的汉字型档实现汉字显示 346
18.2 图形绘製 350
18.3 图像显示 353
18.3.1 点阵图与bmp档案格式 353
18.3.2 bmp档案操作 356
18.3.3 bmp图像显示测试程式 359
第19章 摄像头驱动与图像採集 362
19.1 摄像头接口 362
19.1.1 图像感测器 362
19.1.2 ov7670摄像头 362
19.1.3 cmos摄像头接口 364
19.2 cmos摄像头测试程式 366
19.3 深入cmos摄像头驱动程式原理 368
19.3.1 sccb协定 368
19.3.2 sccb协定驱动程式设计 370
19.3.3 cmos摄像头驱动程式设计 373
第20章 乙太网及web远程控制系统设计 378
20.1 enc28j60乙太网控制器 378
20.2 网路测试程式 382
20.2.1 web server测试 382
20.2.2 udp通信测试 385
20.3 ip/icmp协定与ping命令的实现 386
20.3.1 乙太网数据包结构 386
20.3.2 ip协定 387
20.3.3 icmp协定 389
20.3.4 ping命令 392
20.3.5 ping命令的实现 393
20.4 udp通信原理 393
20.4.1 udp协定 393
20.4.2 udp通信的实现 394
20.5 web server程式设计 399
20.5.1 web server原理 399
20.5.2 tcp设计 402
20.5.3 web server设计 403
20.6 enc28j60驱动程式设计 405
20.6.1 stm32 spi接口 405
20.6.2 stm32 spi驱动程式 407
20.6.3 enc28j60驱动程式 409
参考文献 417
前言
在科研项目研究、产品开发、毕业设计以及电子竞赛等活动中,经常遇到8位单片机速度、I/O口、内部RAM以及内部Flash不够用等问题。随着32位微控制器成本的降低,採用32位微控制器作为8位单片机系统的升级与更新换代已成为最佳选择,特别是内部带Flash的低成本ARM微控制器的使用,以接近8位单片机的成本即可获取更高性能。
目前许多IC厂商都推出了内部带Flash的低成本32位 ARM微控制器,例如ARM Cortex-M3系列微控制器。它具有两个很重要的特点,一是低成本,二是高性能。在成本方面,价格与8位/16位微控制器相差不多;内带Flash,不需要外接ROM,简化了设计,电路更简洁。在高性能方面,运算速度快,例如以Cortex-M3为核心的STM32F2系列微控制器,核心主频高达120MHz,内部带有硬体乘法器、硬体除法器、乙太网控制器、支持USB 2.0接口等。由此可见,32位微控制器在性能上是8位、16位微控制器无法比拟的。
在代码的大小方面,ARM Cortex-M3微控制器提供优于8位和16位体系结构的代码密度。在减少对记忆体的需求和最大限度地提高片上快闪记忆体的使用率方面,都具有很大的优势。
STM32F103微控制器构建于高性能的ARM Cortex-M3核心,工作频率为72MHz,内置高速存储器(最高可达1M位元组的快闪记忆体和128K位元组的SRAM),丰富的增强型I/O连线埠和连线到两条APB汇流排的外设。增强型器件都包含2~3个12位的ADC、4个通用16位定时器和2个PWM定时器。
成本低,该系列微控制器与常见的8位、16位单片机在价格上基本接近。既有32位单片机的性能,又与8位、16位单片机价格相当,可直接代替8位/16位单片机套用于一些小型控制系统中。
体积小,可把该套用系统的PCB面积压缩到最小,以便套用到小体积的产品中,例如智慧型继电器、微型水位控制器、恆温控制器等。
性能高,包含标準和先进的通信接口:5个USART接口、3个SPI接口、2个I2C接口、2个I2S接口、1个SDIO接口、一个USB接口和一个CAN接口。STM32F103是一个完整的系列,其成员之间引脚对引脚完全兼容,软体和功能也兼容。
GCC编译器是一套以GPL及LGPL许可证发行的开源、自由软体。GCC编译器是移植到中央微控制器架构以及作业系统最多的编译器。由于GCC已成为GNU系统的官方编译器(包括GNU/Linux),它也成为编译与建立其他作业系统的主要编译器,包括Linux系列、BSD系列、Mac OS X、NeXTSTEP与BeOS等。
GCC通常是跨平台软体首选的编译器。有别于一般局限于特定系统与执行环境的编译器,GCC在所有平台上都使用同一个前端处理程式,产生一样的中间代码,此中间代码在各个不同的平台上都一致,并可输出正确无误的最终代码。
GCC功能强大、性能优越,并且开放原始码,用户可以免费使用,从而降低了开发成本。
读者对象
本书的读者需要具有一定的C/C++、单片机以及电子线路设计基础,适合于从事ARM嵌入式开发的工程开发人员、STM32的初学者作为参考资料,更适合于从事8位、16位MCU开发,而又迫切需要跨越到32位MCU平台的工程开发人员。也适合于高校师生作为课程设计、毕业设计以及电子设计竞赛的培训和指导教材,以及作为本、专科单片机、嵌入式系统相关课程的教材。
光碟使用
本书ARM程式的编译环境都是GCC, Obtain_Studio集成开发环境(IDE)软体已带有GCC,并自动配置GCC的运行环境,因此可以在Obtain_Studio中直接编译本书的程式。
配套光碟中包括了所有章节的程式代码,读者可以直接拷贝下来使用,并仿照这些程式原始码去快速开发新的应用程式。