描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121365614
内容简介
STM32是意法半导体(ST)有限公司推出的基于ARM Cortex-M内核的通用型嵌入式微控制器,具有设计灵活、配置丰富、成本低廉、适用性强、性价比高等特点,广泛应用于工业控制、通信、物联网、车联网等领域。本书系统介绍了STM32程序设计的基础知识和实战技巧。本书案例丰富、结构清晰、实用性强。本书可作为高职高专院校电类专业学生的教材使用,也可供相关工程技术人员作为参考用书。
目 录
项目1 STM32的开发步骤及STM32的GPIO端口的输出功能 (1)
任务1-1 控制一颗LED发光二极管闪烁 (1)
1.1 初步认识STM32的GPIO端口的输出功能 (10)
1.2 寄存器及其地址信息 (15)
1.3 volatile修饰符的使用及寄存器定义 (17)
习题1 (18)
项目2 认识模块化编程 (19)
任务2-1 控制一颗LED发光二极管闪烁 (19)
2.1 模块化编程 (24)
2.2 其他C语言注意事项 (25)
2.2.1 用#define和typedef定义类型别名 (25)
2.2.2 一些常见的运算符问题 (25)
2.2.3 文件包含 (26)
2.2.4 关于注释 (27)
习题2 (28)
项目3 认识STM32的存储器结构 (29)
任务3-1 LED0闪烁控制 (29)
3.1 存储器基础知识 (30)
3.2 Cortex-M4内核和STM32的存储器结构 (31)
3.2.1 Cortex-M4内核的存储器结构 (31)
3.2.2 STM32的存储器结构 (33)
3.2.3 位带(Bit Band)及位带别名区(Bit Band Alias)的关系 (37)
3.3 结构体在STM32中的应用 (40)
3.4 通用的I/O端口功能设置函数的设计 (42)
任务3-2 跑马灯的实现 (44)
习题3 (47)
项目4 精确延时的实现—SysTick 定时器的原理及其应用 (48)
任务4-1 蜂鸣器发声控制 (48)
4.1 SysTick定时器介绍 (52)
4.2 嘀嗒定时器的延时应用 (55)
习题4 (57)
项目5 机械按键的识别——初步认识GPIO端口的输入功能 (58)
任务5-1 识别机械按键的按下与弹起 (58)
5.1 STM32的GPIO端口的数据输入功能 (65)
5.1.1 GPIO端口位的数据输入通道 (65)
5.1.2 GPIO端口位的输入配置及上/下拉电阻使能 (66)
5.2 按键状态的判断 (67)
习题5 (68)
项目6 深入了解STM32F407的时钟系统 (69)
6.1 STM32F4的时钟系统简介 (69)
6.2 STM32F4的时钟系统 (69)
6.3 STM32F4的系统时钟和各模块时钟 (72)
6.3.1 系统时钟SYSCLK (72)
6.3.2 由SYSCLK模块提供时钟源的时钟 (73)
6.3.3 RCC模块的相关寄存器及其作用 (75)
习题6 (77)
项目7 认识STM32的串口结构 (78)
任务7-1 使用STM32的串口向PC端发送字符串 (78)
7.1 串口基础知识 (83)
7.2 STM32的串口结构 (84)
7.3 引脚复用 (90)
7.4 端口初始化函数的重新组织 (93)
习题7 (95)
项目8 STM32F407的中断管理 (96)
任务8-1 使用STM32的外部中断 (96)
8.1 内嵌中断向量控制器NVIC对中断的控制 (102)
8.1.1 STM32的中断源 (102)
8.1.2 STM32的中断使能控制 (105)
8.1.3 STM32的中断优先级 (106)
8.1.4 中断函数接口及中断函数的实现 (112)
8.2 外部中断 (113)
8.2.1 外部中断的中断源 (113)
8.2.2 外部中断的设置 (114)
习题8 (116)
项目9 认识STM32的定时器 (118)
任务9-1 使用定时器中断控制LED0的闪烁 (118)
9.1 STM32的定时器概述 (122)
9.2 TIM3内部结构及其计数原理 (122)
9.2.1 TIM3的内部结构 (122)
9.2.2 STM32定时器的定时原理 (124)
9.3 定时器中断的实现 (127)
9.4 应用定时器产生PWM调制信号 (128)
9.4.1 TIM14的PWM调制原理 (130)
9.4.2 TIM14产生PWM信号涉及的寄存器 (132)
9.4.3 TIM14产生PWM信号的实现流程 (133)
任务9-2 使用TIM14产生周期为500s、占空比为80%的脉冲信号 (134)
习题9 (136)
项目10 认识STM32的独立看门狗 (137)
任务10-1 认识STM32的独立看门狗的工作原理 (137)
10.1 看门狗电路概述 (140)
10.2 STM32F407的看门狗电路 (140)
10.3 独立看门狗相关的寄存器 (141)
10.4 独立看门狗的设置、启动及工作流程 (142)
习题10 (143)
项目11 认识STM32F407的实时时钟 (144)
任务11-1 认识STM32的RTC (144)
11.1 RTC实时时钟介绍 (149)
11.2 STM32的RTC的工作原理 (149)
11.3 STM32的RTC的操作步骤 (153)
习题11 (155)
项目12 STM32迷你开发板电路设计 (156)
项目13 认识ARM处理器 (161)
13.1 架构简介 (161)
13.2 Cortex-M4的操作状态、工作模式和访问等级 (161)
13.3 数据长度 (162)
13.4 存储器大小端 (162)
13.5 Cortex-M4的寄存器 (163)
13.6 堆和栈的概念 (166)
13.7 内存分配 (167)
习题13 (170)
项目14 汇编语言基础和 Cortex-M4指令集 (172)
14.1 汇编语言基础 (172)
14.2 Cortex-M4的指令集 (174)
14.3 Cortex-M4的伪操作和伪指令 (180)
14.3.1 伪操作 (180)
14.3.2 伪指令 (186)
习题14 (187)
项目15 认识启动文件startup_stm32f40_41xxx.s (188)
习题15 (191)
附录A STM32F407ZGT6的引脚结构与功能 (192)
附录B STM32F407ZGT6核心电路设计 (203)
附录C STM32F407ZGT6外围电路设计 (204)
附录D 关于编译信息的解释 (205)
参考文献 (207)
任务1-1 控制一颗LED发光二极管闪烁 (1)
1.1 初步认识STM32的GPIO端口的输出功能 (10)
1.2 寄存器及其地址信息 (15)
1.3 volatile修饰符的使用及寄存器定义 (17)
习题1 (18)
项目2 认识模块化编程 (19)
任务2-1 控制一颗LED发光二极管闪烁 (19)
2.1 模块化编程 (24)
2.2 其他C语言注意事项 (25)
2.2.1 用#define和typedef定义类型别名 (25)
2.2.2 一些常见的运算符问题 (25)
2.2.3 文件包含 (26)
2.2.4 关于注释 (27)
习题2 (28)
项目3 认识STM32的存储器结构 (29)
任务3-1 LED0闪烁控制 (29)
3.1 存储器基础知识 (30)
3.2 Cortex-M4内核和STM32的存储器结构 (31)
3.2.1 Cortex-M4内核的存储器结构 (31)
3.2.2 STM32的存储器结构 (33)
3.2.3 位带(Bit Band)及位带别名区(Bit Band Alias)的关系 (37)
3.3 结构体在STM32中的应用 (40)
3.4 通用的I/O端口功能设置函数的设计 (42)
任务3-2 跑马灯的实现 (44)
习题3 (47)
项目4 精确延时的实现—SysTick 定时器的原理及其应用 (48)
任务4-1 蜂鸣器发声控制 (48)
4.1 SysTick定时器介绍 (52)
4.2 嘀嗒定时器的延时应用 (55)
习题4 (57)
项目5 机械按键的识别——初步认识GPIO端口的输入功能 (58)
任务5-1 识别机械按键的按下与弹起 (58)
5.1 STM32的GPIO端口的数据输入功能 (65)
5.1.1 GPIO端口位的数据输入通道 (65)
5.1.2 GPIO端口位的输入配置及上/下拉电阻使能 (66)
5.2 按键状态的判断 (67)
习题5 (68)
项目6 深入了解STM32F407的时钟系统 (69)
6.1 STM32F4的时钟系统简介 (69)
6.2 STM32F4的时钟系统 (69)
6.3 STM32F4的系统时钟和各模块时钟 (72)
6.3.1 系统时钟SYSCLK (72)
6.3.2 由SYSCLK模块提供时钟源的时钟 (73)
6.3.3 RCC模块的相关寄存器及其作用 (75)
习题6 (77)
项目7 认识STM32的串口结构 (78)
任务7-1 使用STM32的串口向PC端发送字符串 (78)
7.1 串口基础知识 (83)
7.2 STM32的串口结构 (84)
7.3 引脚复用 (90)
7.4 端口初始化函数的重新组织 (93)
习题7 (95)
项目8 STM32F407的中断管理 (96)
任务8-1 使用STM32的外部中断 (96)
8.1 内嵌中断向量控制器NVIC对中断的控制 (102)
8.1.1 STM32的中断源 (102)
8.1.2 STM32的中断使能控制 (105)
8.1.3 STM32的中断优先级 (106)
8.1.4 中断函数接口及中断函数的实现 (112)
8.2 外部中断 (113)
8.2.1 外部中断的中断源 (113)
8.2.2 外部中断的设置 (114)
习题8 (116)
项目9 认识STM32的定时器 (118)
任务9-1 使用定时器中断控制LED0的闪烁 (118)
9.1 STM32的定时器概述 (122)
9.2 TIM3内部结构及其计数原理 (122)
9.2.1 TIM3的内部结构 (122)
9.2.2 STM32定时器的定时原理 (124)
9.3 定时器中断的实现 (127)
9.4 应用定时器产生PWM调制信号 (128)
9.4.1 TIM14的PWM调制原理 (130)
9.4.2 TIM14产生PWM信号涉及的寄存器 (132)
9.4.3 TIM14产生PWM信号的实现流程 (133)
任务9-2 使用TIM14产生周期为500s、占空比为80%的脉冲信号 (134)
习题9 (136)
项目10 认识STM32的独立看门狗 (137)
任务10-1 认识STM32的独立看门狗的工作原理 (137)
10.1 看门狗电路概述 (140)
10.2 STM32F407的看门狗电路 (140)
10.3 独立看门狗相关的寄存器 (141)
10.4 独立看门狗的设置、启动及工作流程 (142)
习题10 (143)
项目11 认识STM32F407的实时时钟 (144)
任务11-1 认识STM32的RTC (144)
11.1 RTC实时时钟介绍 (149)
11.2 STM32的RTC的工作原理 (149)
11.3 STM32的RTC的操作步骤 (153)
习题11 (155)
项目12 STM32迷你开发板电路设计 (156)
项目13 认识ARM处理器 (161)
13.1 架构简介 (161)
13.2 Cortex-M4的操作状态、工作模式和访问等级 (161)
13.3 数据长度 (162)
13.4 存储器大小端 (162)
13.5 Cortex-M4的寄存器 (163)
13.6 堆和栈的概念 (166)
13.7 内存分配 (167)
习题13 (170)
项目14 汇编语言基础和 Cortex-M4指令集 (172)
14.1 汇编语言基础 (172)
14.2 Cortex-M4的指令集 (174)
14.3 Cortex-M4的伪操作和伪指令 (180)
14.3.1 伪操作 (180)
14.3.2 伪指令 (186)
习题14 (187)
项目15 认识启动文件startup_stm32f40_41xxx.s (188)
习题15 (191)
附录A STM32F407ZGT6的引脚结构与功能 (192)
附录B STM32F407ZGT6核心电路设计 (203)
附录C STM32F407ZGT6外围电路设计 (204)
附录D 关于编译信息的解释 (205)
参考文献 (207)
前 言
STM32是当前单片机应用领域的主流芯片,在国内Cortex-M市场,STM32市场份额约占45.8%,而ST公司也是中国市场上第二大的通用微控制器厂商。尽管STM32的市场占有率已如此之高,但在高等职业教育领域,目前学生学习的主流芯片依然是51单片机。原因有很多,其中之一就是STM32模块多,功能多,设计复杂,讲解起来相对困难,学习起来也有困难。虽然ST公司为了推广STM32开发了很多易学易用的工具,但学习者很多时候只会应用而不知道其所以然,遇到问题时经常束手无策,所以编写一本尽量能够与51单片机的思路接近,让学生不排斥而又能带领学生入门的STM32方面的教材很有必要。
基于此,我们与正点原子(广州市星翼电子科技有限公司,以下称“正点原子”)联合编写了这本书,书中例程都在正点原子的“探索者”开发板(处理器为STM32F407ZGT6)上运行通过。本书尽量从底层寄存器的控制出发引导读者慢慢进入STM32的学习,且在学习过程中尽量使读者在没有单片机基础而只有C语言、模电、数电基础的情况下能够比较流畅地阅读。
本书主要特点包含以下几个方面。
1.不需要51单片机基础即可流畅阅读
本书编写的目的之一是代替51单片机的教学,而不是在51单片机的教学基础上延续,所以书里面虽然有部分内容涉及51单片机知识,但学起来并不依靠这些知识。本书编写时假设学生只有C语言、模电、数电基础,故本书尽量从底层的原理开始讲解,以便读者阅读和掌握。
2.重在让学习者知道原理和实现过程
在目前使用STM32进行开发的市场中,大部分开发者可能都是使用库函数进行开发的,但从入门角度看,可能采用寄存器方式更加合适。掌握了寄存器的使用后再回过来阅读库函数的代码并使用库函数进行开发更容易一些,但反过来则不一定。因此,书中所有的例程都采用寄存器方式书写,尽量向读者介绍实现的原理及过程。
3.由易到难,化繁为简
介绍函数的实现时尽量先介绍原理,再介绍伪代码,最后介绍函数的定义。同时对工程中使用到的新的模块的寄存器组织及访问方式都进行了详细的介绍。书中所有的例程(除了系统时钟的初始化)并不照搬目前已经公开的程序,而是采用尽量简单的形式来实现,然后再向ST公司或者正点原子的例程过渡。
4.编写形式直观生动,内容连贯,可读性强
每个项目都有教学导航,用于说明每个项目学习的是什么、需要使用什么工具以及该如何学习。另外,书中重要的源码都配有详细的注释,方便读者阅读。
5.尽量多地介绍各模块的核心应用
为了在有限的篇幅内使读者对STM32有更多的认识,书中尽可能多地介绍了一些模块,然后对这些模块的核心应用进行详细的描述,而对模块中不经常用到的功能则由读者在使用时在已有知识的基础上进行探索。
6.兼顾Cortex-M4的指令集的学习
为了让读者了解处理器是如何从汇编语言跳转到C语言执行的,在最后的项目中对启动文件进行了介绍。而介绍启动文件则不能不学习汇编语言,为此,我们花了一定的篇幅对ARM处理器的汇编语言进行了介绍,读者可根据自己的需要有选择性地对这部分内容进行学习。
本书参考学时数为64学时,在使用时可根据具体教学情况酌情增减。欧启标对本书的编写思路与大纲进行了总体策划,指导了全书的编写,对全书进行统稿,并编写了本书的大部分章节。赵振廷编写了项目14,张检保编写了项目15。正点原子的工程师们对本书进行了审校。
最后,感谢我的学生黄灏辉、张榜庆、潘泽宽、郭碧新、邓江海等,他们对书中的例程进行了反复验证,并从初学者的角度对书中的内容进行了多次的模拟阅读,为本书提供了非常好的修改意见。另外,广东机电职业技术学院的张宇、何威、赵金洪、黎旺星、张永亮、潘必超、李建波、赵静、陈榕福、高立新、兰小海等老师对本书的编写提出了很多中肯的意见和建议。正点原子的工程师们也对本书的编写提供了很多的支持与帮助,他们提供了大量的源码和例程,并对书中例程进行了仔细的校对,同时还和编者一起对书中的内容和细节表述进行探讨并给出了很多改进意见,在此一并表示感谢。
为了方便教学,本书配有电子教案、C语言源程序文件等资料,请有需要的读者登录华信教育资源网(www.hxedu.com.cn)免费注册后下载。也可以联系作者索要,作者联系方式为[email protected]。
由于时间紧迫和编者水平有限,书中的错误和缺点在所难免,热忱欢迎各位读者对本书提出批评与建议。
编 者
基于此,我们与正点原子(广州市星翼电子科技有限公司,以下称“正点原子”)联合编写了这本书,书中例程都在正点原子的“探索者”开发板(处理器为STM32F407ZGT6)上运行通过。本书尽量从底层寄存器的控制出发引导读者慢慢进入STM32的学习,且在学习过程中尽量使读者在没有单片机基础而只有C语言、模电、数电基础的情况下能够比较流畅地阅读。
本书主要特点包含以下几个方面。
1.不需要51单片机基础即可流畅阅读
本书编写的目的之一是代替51单片机的教学,而不是在51单片机的教学基础上延续,所以书里面虽然有部分内容涉及51单片机知识,但学起来并不依靠这些知识。本书编写时假设学生只有C语言、模电、数电基础,故本书尽量从底层的原理开始讲解,以便读者阅读和掌握。
2.重在让学习者知道原理和实现过程
在目前使用STM32进行开发的市场中,大部分开发者可能都是使用库函数进行开发的,但从入门角度看,可能采用寄存器方式更加合适。掌握了寄存器的使用后再回过来阅读库函数的代码并使用库函数进行开发更容易一些,但反过来则不一定。因此,书中所有的例程都采用寄存器方式书写,尽量向读者介绍实现的原理及过程。
3.由易到难,化繁为简
介绍函数的实现时尽量先介绍原理,再介绍伪代码,最后介绍函数的定义。同时对工程中使用到的新的模块的寄存器组织及访问方式都进行了详细的介绍。书中所有的例程(除了系统时钟的初始化)并不照搬目前已经公开的程序,而是采用尽量简单的形式来实现,然后再向ST公司或者正点原子的例程过渡。
4.编写形式直观生动,内容连贯,可读性强
每个项目都有教学导航,用于说明每个项目学习的是什么、需要使用什么工具以及该如何学习。另外,书中重要的源码都配有详细的注释,方便读者阅读。
5.尽量多地介绍各模块的核心应用
为了在有限的篇幅内使读者对STM32有更多的认识,书中尽可能多地介绍了一些模块,然后对这些模块的核心应用进行详细的描述,而对模块中不经常用到的功能则由读者在使用时在已有知识的基础上进行探索。
6.兼顾Cortex-M4的指令集的学习
为了让读者了解处理器是如何从汇编语言跳转到C语言执行的,在最后的项目中对启动文件进行了介绍。而介绍启动文件则不能不学习汇编语言,为此,我们花了一定的篇幅对ARM处理器的汇编语言进行了介绍,读者可根据自己的需要有选择性地对这部分内容进行学习。
本书参考学时数为64学时,在使用时可根据具体教学情况酌情增减。欧启标对本书的编写思路与大纲进行了总体策划,指导了全书的编写,对全书进行统稿,并编写了本书的大部分章节。赵振廷编写了项目14,张检保编写了项目15。正点原子的工程师们对本书进行了审校。
最后,感谢我的学生黄灏辉、张榜庆、潘泽宽、郭碧新、邓江海等,他们对书中的例程进行了反复验证,并从初学者的角度对书中的内容进行了多次的模拟阅读,为本书提供了非常好的修改意见。另外,广东机电职业技术学院的张宇、何威、赵金洪、黎旺星、张永亮、潘必超、李建波、赵静、陈榕福、高立新、兰小海等老师对本书的编写提出了很多中肯的意见和建议。正点原子的工程师们也对本书的编写提供了很多的支持与帮助,他们提供了大量的源码和例程,并对书中例程进行了仔细的校对,同时还和编者一起对书中的内容和细节表述进行探讨并给出了很多改进意见,在此一并表示感谢。
为了方便教学,本书配有电子教案、C语言源程序文件等资料,请有需要的读者登录华信教育资源网(www.hxedu.com.cn)免费注册后下载。也可以联系作者索要,作者联系方式为[email protected]。
由于时间紧迫和编者水平有限,书中的错误和缺点在所难免,热忱欢迎各位读者对本书提出批评与建议。
编 者
评论
还没有评论。