新書推薦:

《
偶然事件(命运总是欺软怕硬,你不认命就会赢!)
》
售價:HK$
54.9

《
余下只有噪音:聆听20世纪(2025)
》
售價:HK$
206.8

《
如何将知识转化为行动
》
售價:HK$
76.8

《
助人技术本土化的刻意练习
》
售價:HK$
87.9

《
中国城市科创金融指数·2024
》
售價:HK$
107.8

《
你想活出怎样的人生:摆渡船上的人生哲学
》
售價:HK$
65.9

《
中国历代户口、田地、田赋统计——梁方仲著作集
》
售價:HK$
148.5

《
反乌合之众——跳出羊群,逆向获利
》
售價:HK$
76.8
|
編輯推薦: |
本书的适用对象广泛,可作为高等学校各专业本科生电子科学技术、自动化、机电一体化、物联网等专业嵌入式课程的教材,也适用于对STM32微控制器及RTT操作系统感兴趣的广大读者阅读。
|
內容簡介: |
全书以STM32F103系列微控制器为硬件核心,采用HAL库和嵌入式操作系统RT-Thread两条主线层次递进地介绍嵌入式系统原理与应用。全书共16章,第一部分内容包括嵌入式背景、寄存器模式开发,HAL库开发GPIO、中断系统、定时器和蜂鸣器、数码管和按键、DMA、通用异步通信、模数转换和数模转换、RTC时钟和电源控制及实践项目多功能电子钟。第二部分内容包括RTT基础、线程管理、中断管理、定时器以及内存管理、信号量、互斥量、事件集、邮箱、消息队列及实践项目步进电机控制。第三部分介绍嵌入式物联网实战。
本书的适用对象广泛,可作为高等学校各专业本科生电子科学技术、自动化、机电一体化、物联网等专业嵌入式课程的教材,也适用于对STM32微控制器及RTT操作系统感兴趣的广大读者阅读。
|
目錄:
|
第1章ARM CortexM3嵌入式系统1
1.1嵌入式系统概述1
1.1.1嵌入式系统的定义和特点1
1.1.2嵌入式系统的应用领域1
1.2ARM与STM32概述2
1.2.1ARM简介2
1.2.2STM323
1.2.3微控制器软件接口标准6
1.3嵌入式系统的软件6
1.3.1不使用操作系统的嵌入式软件6
1.3.2使用操作系统的嵌入式软件7
1.4学习STM32的方法8
练习题10
第2章使用寄存器模式开发11
2.1STM32F1系统架构11
2.2STM32F1存储器系统12
2.2.1存储器组织12
2.2.2存储器映射13
2.3通用输入/输出14
2.3.1STM32F1通用输入/输出简介14
2.3.2GPIO的位结构16
2.3.3GPIO的工作模式17
2.3.4GPIO的寄存器20
2.4复位和时钟控制23
2.4.1RCC框图24
2.4.2RCC的主要作用25
2.4.3RCC_APB2ENR寄存器26
2.5寄存器编程模式点亮LED灯示例27
2.5.1硬件设计27
2.5.2工程文件分析27
2.5.3用户文件31
2.5.4配置下载调试工具33
2.5.5编译下载33
练习题34
第3章使用HAL库开发GPIO35
3.1STM32CubeMX概述35
3.2STM32 HAL库35
3.2.1HAL固件库简介35
3.2.2HAL库文件36
3.3GPIO的HAL库用法39
3.3.1GPIO寄存器结构体GPIO_TypeDef39
3.3.2GPIO初始化结构体GPIO_InitTypeDef40
3.3.3GPIO相关HAL库函数41
3.4STM32CubeMX应用示例44
3.4.1硬件设计44
3.4.2STM32CubeMX工程配置44
3.4.3main文件解析50
3.4.4编译下载53
练习题54
第4章STM32中断系统55
4.1中断的基本概念55
4.2STM32F103的中断系统56
4.2.1中断和异常向量56
4.2.2嵌套向量中断控制器59
4.2.3中断优先级59
4.2.4中断服务处理61
4.2.5NVIC相关HAL库函数63
4.3外部中断/事件控制器65
4.3.1外部中断/事件控制器简介65
4.3.2外部中断/事件线66
4.4外部中断控制示例67
4.4.1STM32CubeMX工程配置67
4.4.2中断配置与中断服务函数68
4.4.3用户代码70
4.4.4下载验证71
练习题71
第5章定时器与蜂鸣器72
5.1STM32F103定时器概述72
5.2基本定时器原理72
5.3定时器的HAL库用法75
5.3.1定时器寄存器结构体TIM_TypeDef75
5.3.2定时器句柄结构体TIM_HandleTypeDef76
5.3.3TIM相关HAL库函数77
5.4基本定时器应用示例78
5.4.1STM32CubeMX工程配置78
5.4.2定时器配置与中断服务函数79
5.4.3用户代码81
5.4.4下载验证82
5.5蜂鸣器发出不同频率声音应用示例82
5.5.1蜂鸣器简介82
5.5.2动态调整定时器输出频率83
5.6定时器PWM输出86
5.6.1PWM简介86
5.6.2简单音乐播放示例87
5.7系统嘀嗒定时器91
5.7.1系统嘀嗒定时器简介91
5.7.2延时函数HAL_Delay的实现原理93
练习题94
第6章串口通信与DMA95
6.1数据通信的基本概念95
6.1.1数据通信方式95
6.1.2串行通信简介95
6.2STM32F1的USART 96
6.2.1USART介绍96
6.2.2USART的工作原理97
6.2.3USART中断控制99
6.3串口的HAL库用法101
6.3.1串口寄存器结构体USART_TypeDef101
6.3.2串口句柄结构体UART_HandleTypeDef101
6.3.3USART相关HAL库函数102
6.4USART1接收不定长数据及回显示例104
6.4.1STM32CubeMX工程配置104
6.4.2串口配置及中断服务函数106
6.4.3重定义printf函数109
6.4.4用户代码109
6.4.5下载验证111
6.5直接存储器存取111
6.5.1直接存储器存取简介111
6.5.2STM32F103的DMA112
6.5.3DMA寄存器结构体DMA_Channel_TypeDef114
6.5.4DMA句柄结构体DMA_HandleTypeDef115
6.6串口DMA控制116
6.6.1串口DMA发送116
6.6.2串口DMA接收117
6.6.3USART DMA相关HAL库函数117
6.7USART1的DMA通信示例118
6.7.1STM32CubeMX工程配置118
6.7.2串口配置代码119
6.7.3用户代码121
6.7.4下载验证122
练习题123
第7章模数转换与数模转换124
7.1ADC简介124
7.2STM32F103的ADC125
7.2.1ADC模块结构125
7.2.2ADC的分组及数据对齐126
7.2.3ADC触发与启动127
7.2.4ADC时钟与转换时间127
7.2.5ADC的转换模式128
7.2.6ADC中断和DMA请求129
7.2.7ADC校准130
7.3ADC的HAL库用法130
7.3.1ADC寄存器结构体ADC_TypeDef130
7.3.2ADC句柄结构体ADC_HandleTypeDef130
7.3.3ADC相关HAL库函数131
7.4ADC应用示例133
7.4.1硬件设计133
7.4.2STM32CubeMX工程配置133
7.4.3ADC1配置代码134
7.4.4用户代码137
7.4.5下载验证138
7.5DAC简介138
7.6STM32F103的DAC工作原理139
7.6.1DAC模块结构139
7.6.2DAC数据格式与转换启动140
7.6.3DAC的触发选择141
7.6.4DAC的输出电压141
7.6.5DAC的DMA请求141
7.7DAC的HAL库用法141
7.7.1DAC寄存器结构体DAC_TypeDef141
7.7.2DAC规则通道结构体定义DAC_ChannelConfTypeDef142
7.7.3DAC相关HAL库函数143
7.8简易波形发生器示例144
7.8.1STM32CubeMX工程配置144
7.8.2DAC配置代码145
7.8.3用户代码148
7.8.4下载验证150
练习题151
第8章实时时钟与电源控制152
8.1实时时钟(RTC)152
8.1.1RTC简介152
8.1.2BCD码简介152
8.1.3STM32F1的RTC153
8.2备份寄存器154
8.3RTC的HAL库用法155
8.3.1RTC寄存器结构体RTC_TypeDef155
8.3.2RTC句柄结构体RTC_HandleTypeDef155
8.3.3RTC相关的结构体156
8.3.4RTC相关HAL库函数157
8.4实时时钟应用示例159
8.4.1硬件设计160
8.4.2STM32CubeMX工程配置160
8.4.3RTC配置代码162
8.4.4用户代码164
8.4.5下载验证165
8.5STM32F103电源控制166
8.5.1STM32F103的电源系统166
8.5.2低功耗模式167
8.6PWR的HAL库用法168
8.6.1PWR寄存器结构体PWR_TypeDef168
8.6.2WFI和WFE命令168
8.6.3进入低功耗模式库函数169
8.7电源控制应用示例170
8.7.1硬件设计170
8.7.2STM32CubeMX工程配置170
8.7.3用户代码171
8.7.4下载验证175
练习题176
第9章HAL库开发实例——电子钟系统177
9.1电子钟系统设计概况177
9.2LED数码管动态显示驱动程序设计178
9.2.1LED数码管及动态显示原理178
9.2.2数码管输出接口设计180
9.3通用按键驱动程序设计183
9.3.1按键基本介绍183
9.3.2按键输入接口设计184
9.4RTC驱动程序设计189
9.5简单的多任务时间片轮询框架191
9.6电子钟应用系统示例193
9.6.1STM32CubeMX工程配置193
9.6.2工程添加板级支持包193
9.6.3用户代码195
9.6.4下载验证198
练习题199
第10章嵌入式操作系统RTThread Nano200
10.1RTThread Nano简介200
10.2在MDK中移植RTThread Nano201
10.2.1移植RTThread Nano的步骤201
10.2.2编写第一个RTThread Nano应用205
10.2.3RTThread程序的运行方法206
10.3RTThread的启动流程210
10.3.1扩展main210
10.3.2进入main211
10.4RTThread的线程管理212
10.4.1线程与线程管理212
10.4.2组成线程的三要素212
10.4.3线程的重要属性214
10.4.4默认启动的线程216
10.4.5线程管理API函数217
10.4.6线程管理示例219
10.4.7线程管理应用小结222
10.5RTThread的时钟管理222
10.5.1RTThread的时钟节拍222
10.5.2RTThread的软件定时器223
10.5.3软件定时器管理API函数224
10.5.4软件定时器应用示例227
10.6RTThread内存管理229
10.6.1内存管理概述229
10.6.2内存堆管理之小内存管理230
10.6.3内存堆管理API函数232
10.6.4内存池管理233
10.6.5内存池管理API函数235
10.6.6内存堆与内存池管理应用示例237
10.7RTThread中断管理241
10.7.1RTThread中断工作机制241
10.7.2中断处理示例243
10.7.3全局中断开关243
10.7.4全局中断开关示例244
练习题245
第11章RTThread线程间同步与通信246
11.1线程间同步与通信简介246
11.2信号量247
11.2.1信号量的概念及工作机制247
11.2.2RTThread信号量控制块248
11.2.3信号量管理API函数249
11.2.4信号量应用场合252
11.2.5信号量应用示例253
11.3互斥量256
11.3.1互斥量的概念及工作机制256
11.3.2线程优先级反转与继承257
11.3.3死锁259
11.3.4RTThread互斥量控制块259
11.3.5互斥量管理API函数260
11.3.6互斥量应用场合262
11.3.7互斥量应用示例263
11.4事件集266
11.4.1事件集的概念及工作机制266
11.4.2RTThread事件集控制块267
11.4.3事件集管理API函数267
11.4.4事件集应用示例270
11.5邮箱273
11.5.1邮箱的概念及工作机制273
11.5.2RTThread邮箱控制块274
11.5.3邮箱管理API函数275
11.5.4邮箱的典型用法278
11.5.5邮箱应用示例279
11.6消息队列283
11.6.1消息队列的概念及工作机制283
11.6.2RTThread消息队列控制块284
11.6.3消息队列管理API函数284
11.6.4消息队列应用示例289
练习题292
第12章RTThread应用实践——步进电机控制294
12.1步进电机控制系统设计目标294
12.2步进电机28BYJ48294
12.2.1步进电机简介294
12.2.2步进电机驱动电路295
12.2.3步进电机的控制原理295
12.3步进电机28BYJ48控制软件设计296
12.3.1步进电机驱动设计296
12.3.2按键控制电机设计301
12.3.3数码管显示电机信息设计303
12.3.4串口输出电机信息设计305
12.3.5蜂鸣器鸣响设计306
12.3.6电机控制系统主函数307
12.4步进电机控制示例结果308
练习题309
第13章嵌入式物联网基础实战311
13.1TCP/IP协议简介311
13.2简单的TCP/IP协议栈312
13.3ENC28J60网卡移植313
13.3.1初始化ENC28J60314
13.3.2实现ENC28J60的操作函数317
13.3.3接收网络数据包318
13.3.4网卡移植测试321
13.4TCP/IP协议栈分层实验324
13.4.1ARP协议实验324
13.4.2IP&ICMP协议实验330
13.4.3UDP协议实验336
13.4.4TCP协议实验339
13.5嵌入式Web服务器344
13.5.1HTTP协议简介344
13.5.2Web服务器实验345
练习题347
|
內容試閱:
|
为什么要写这本书
嵌入式系统的发展确实很快,从早期的8位单片机到目前主流的32位单片机,从早期的裸机程序开发到目前基于嵌入式操作系统的开发,其应用已渗透到生产生活的各方面。处于嵌入式教育行业之中,作者深刻地感受到行业发展需要更多的嵌入式技术人才,具有一定开发经验的嵌入式工程师成为职场上的紧缺人才。
目前,国内大多数高校的电子信息类专业都开设了嵌入式相关课程,以满足嵌入式人才培养的需求。但是现有的嵌入式系统教材,或介绍基于寄存器版本二次封装后推出的标准库,或介绍国外的嵌入式操作系统。根据多年嵌入式系统教学和开发经验,为了介绍ST公司目前主推的HAL库和图形化配置软件STM32CubeMX,加快STM32F1系列微处理器的应用开发进程,同时为了让更多人了解和掌握国产嵌入式操作系统的应用开发,加快RTThread在高校的普及,作者编写了本书。
主要内容
本书共13章,从内容逻辑上分为三部分: 第1~8章为基础篇,第10、11章为操作系统篇,第9、12和13章为实践篇。
第1~8章首先讲述了嵌入式系统的概念及STM32F1的原理,从使用寄存器模式开发GPIO逐渐过渡到基于HAL库的开发模式,包括STM32中最典型的外设与功能模块,即GPIO、中断系统、定时器、串口通信、DMA、ADC与DAC、实时时钟与电源控制的应用开发;除了介绍微控制单元(micro controller unit,MCU)片内外设外,还介绍了LED、按键、蜂鸣器、数码管驱动程序的设计及应用。
第10、11章主要围绕实时操作系统展开,介绍了国产RTThread Nano的核心技术——线程管理、时钟管理、内存管理、中断管理、线程间同步与线程间通信,主要侧重系统应用。学完这部分内容,读者可以很好地入门嵌入式操作系统应用编程。
第9、12和13章分别介绍了使用HAL库的可校时电子钟综合应用实例、基于RTThread和STM32F1的步进电机控制系统和一个在HAL库与RTThread基础上实现的物联网综合实例。这些都是完整的综合性工程示例,可以帮助读者建立模块化思想,提高设计与开发嵌入式综合应用系统的能力。这些实例也适合在嵌入式系统开发实践类课程中使用。
上述章节都有配套的源程序,建议读者边阅读边实践,在学完一章的同时完成该章的示例代码。如果读者能够同步完成每章后面精心设计的练习题,将会获得更佳的学习效果。
配套资源
本书所有实验内容都是在作者设计的经过教学实践反复检验的嵌入式实验板上完成的,实验板的主控芯片为STM32F103VET6,有需要的读者可以联系作者购买。读者也可以使用其他STM32F103系列开发板完成本书实验,只需要改动一下程序中定义的接口即可。
STM32F103VE开发板
本书配套学习资源,为便于提高学习效率,作者精心设计了示例代码,编写了教学大纲,制作了教学课件,读者可登录http://www.tup.com.cn下载或直接与作者联系获得。
致谢
本书得到了温州大学教材建设项目的资助,由多位长期从事嵌入式系统教学的老师集体编写,除了封面所列作者外,温州大学智能锁具研究院技术部周志立博士、陈博博士及陈秋影工程师等也参与了本书代码编写工作,上海睿赛德电子科技有限公司罗齐熙对本书开发提出了宝贵建议。本书对SMT32和HAL库内容的编写参考了武汉安富莱电子有限公司、广州市星翼电子科技有限公司(正点原子)和东莞野火电子技术有限公司发布的开发板资料,对RTThread原理的介绍主要参考了上海睿赛德电子科技有限公司官网上的文档。在此郑重声明,本书内容仅用于教学,其著作权属于原作者。
由于嵌入式技术的发展日新月异,加之作者水平有限,编写时间仓促,书中难免存在一些错误或者不足之处,在此恳请广大读者批评指正。如果读者对本书有任何建议、意见和想法,欢迎和作者联系交流。
作者
2024年11月
|
|