
本书采用STM32CubeMX的开发方式,选用20个基于STM32嵌入式技术开发的实例,按照“理论够用,突出应用”的原则,采取项目化教学的方式,以作品制作为载体,在作品制作过程中讲解STM32嵌入式技术的基础知识、基本技能和方法,培养学生的爱岗敬业、耐心仔细、抗压抗挫等优良品质和精神,由浅入深地讲解STM32嵌入式技术应用,包括安装开发工具、点亮LED灯、控制LED灯闪烁、制作跑马灯、显示按键的状态、统计按键按下的次数、制作简易秒表、制作呼吸灯、用串口与计算机交换数据、用空闲中断处理串口接收数据、制作用数码管显示的秒表、用键盘控制秒表的运行、用OLED屏显示字符、用OLED屏显示图片、制作电压监测器、制作电压信号发生器、用硬件SPI口控制OLED屏、用硬件I2C接口访问AT24C02、读写Flash存储器、用RTC制作数字钟以及C程序设计技巧。本书立足于应用实践,融入了近年来全国职业技能大赛中有关STM32嵌入式应用技术的内容和1+X职业技能等级考试内容,适于用作高等职业院校物联网、电子信息、智能产品设计、应用电子、机电一体化、机械电子、汽车电子等专业嵌入式技术应用课程的教材,也可作为应用型本科和1+X“传感网应用开发”职业技能等级考试培训教材或者供参加物联网大赛和从事STM32嵌入式技术应用的工程技术人员学习和参考。
STM32嵌入式应用系统的软件开发方式有基于寄存器的开发方式、基于标准外设库的开发方式和基于STM32CubeMX的开发方式3种。基于寄存器的开发方式早已被淘汰,基于标准外设库的开发方式不适用于新推出的STM32微控制器,正逐渐被淘汰,基于STM32CubeMX的开发方式是ST公司最近推出的一种图形化的开发方式,这种开发方式所生成的程序具有很好的可移植性,是现在和今后的主流开发方式,越来越多的企业在STM32嵌入式应用开发中都选用这种开发方式,在全国职业院校技能大赛的许多赛项和“1+X”的许多证书的考试中,例如,物联网应用技术赛项、“1+X”传感网应用开发考证等,在有关STM32嵌入式开发时都采用基于STM32CubeMX的开发方式。鉴于这种现状,我们在人工智能双高专业群建设过程中,结合近年来职业院校技能大赛备赛指导和“1+X”传感网应用开发考证指导工作,编写了这本《嵌入式技术应用(STM32CubeMX版)》,本书具有以下特点。 1.融入思政元素,强化了教材的德育性 教材主要从2方面实施课程思政。一是在每个项目的学习目标中明确地提出了思政目标。二是根据项目任务的内容分别在知识储备、实现方法与步骤、实践总结与拓展或者课后习题中无缝地融入若干思政元素,做到润物无声。例如,在程序调试实践中要学生保持良好的心态,通过仔细观察、耐心实践、努力尝试,从而锻炼学生的意志力,增强学生的抗挫能力;再如在任务9的习题中,我们要求学生利用串口输出社会主义核心价值观的内容,既训练了学生的串口编程技术,又强化了学生的正确价值观。 2.用二维码嵌入讲解视频,方便读者自主学习 本教材提供了大量讲解视频,每个视频时长5分钟左右,从而将教材中的知识点碎片化。这些视频的主要内容是各个任务中重点知识的讲解或者各个任务的实践操作过程的演示。读者只需用手机扫描教材中的对应二维码,就可以观看对应的视频讲解,从而方便读者课前预习和课后复习。 3.按项目构建课程内容,用实例组织单元教学 本书分为7个项目,共20个任务,包括搭建开发环境、GPIO口的应用设计、外部中断和定时器的应用设计、串口通信的应用设计、显示与键盘的应用设计、A/D与D/A的应用设计、外设接口的应用设计。每个项目包含若干个任务。全书采用STM32CubeMX开发方式讲解了STM32嵌入式系统的开发过程、设计方法和基本技能。全书按项目编排,STM32嵌入式应用系统开发所需要的基本知识和基本技能穿插在各个任务的完成过程中进行讲解,每一个任务只讲解完成本任务所需要的基本知识、基本方法和基本技能,从而将知识化整为零,降低了学习的难度。 4.融“教、学、做”于一体,突出了教材的实践性 书中的每一个任务都是按照以下方式组织编排的:①任务要求,②知识储备,③实现方法与步骤,④程序分析,⑤实践总结与拓展。其中,任务要求部分主要介绍做什么和做到什么程度,是读者实践时的目标要求,后续部分都是围绕着任务的实现而展开的。知识储备部分主要介绍STM32嵌入式应用中的一些基本概念、HAL库中所提供的有关函数及其用法,这一部分供读者在完成任务前阅读之用,也是本任务完成后所要掌握的基本知识。实现方法与步骤部分主要介绍怎么做,这一部分详细地讲解了本项目的实施过程,包括电路的搭建、用STM32CubeMX生成初始化代码的方法和步骤、应用程序的编写、程序的编译下载等,读者按照书中所介绍的方法和步骤逐步实施,就可以实现任务要求,这一部分是读者实践时必须亲手做的事情。程序分析部分(目录中未体现,书中有)主要介绍了为什么要这样做,这一部分详细地讲解了程序设计的思路、原则和方法。实践总结与拓展部分主要对知识和技能进行梳理与总结,并适当进行拓展。 5.融入职业技能标准,内容反映了“1+X”考证要求和职业院校技能大赛的要求 《传感网开发职业技能等级标准》是由北京新大陆时代科技有限公司组织编写的,该公司的黄敏恒高级工程师参与了本书的规划和编写;另外,本书的作者多年来一直从事STM32嵌入式技术及应用课程的教学工作、“1+X”传感网应用开发考证指导和全国物联网技术应用技能大赛辅导工作,书中许多制作任务或习题来源于考证试题或者竞赛试题,每个任务中都设置了至少一道与技能大赛、“1+X”考证试题难度相当、题型相似的综合练习题。本书融入了《传感网开发职业技能等级标准》,反映了“1+X”考证要求和物联网技术应用技能大赛的要求。 6.提供了配套的实训平台,避免了教材与实训系统相互脱节 STM32嵌入式技术应用是一门实践性非常强的课程,除了要进行课堂学习之外,还需要强有力的实践性环节与之配合。因此,我们研制并推出了MFIoT实训平台及相关的实训模块,包括ZigBee开发板、CCDebug仿真器、相关传感器模块以及STM32开发板、STLink仿真器、NBIoT开发板、LORA开发板、智能网关等。其中,STM32开发板、STLink仿真器和传感器模块与本书配套,避免了以往出现的教材与实训系统相互脱节的情况,真正做到课堂内外相互统一。如果使用本书的院校在准备器件时有困难,可以与编者联系(E-mail:lizhuqing_ 123@163.com),也可以进入淘宝网,搜索“青竹电子”店铺购买。 7.提供了丰富的教学资源,方便教师备课和读者学习 本书提供了9种教学资源:7个项目中各任务的源程序文件;STM32开发板的电路图;书中所有芯片和传感器的PDF文档;教学课件;STM32嵌入式应用常用的工具软件;近年来全国物联网应用技术技能大赛试题;传感网应用开发“1+X”考证试题;部分习题解答;课程思政活页。其中,各任务的源程序文件供读者学习前观察任务的实现效果之用,各芯片和传感器的PDF文档供读者学习查阅之用,提供常用的工具软件可以节省读者收集开发工具的时间。所有资源可直接从电子工业出版社教材服务网站上下载,也可以与编者联系,部分资源只要扫描书中的二维码就可以直接下载。 在使用本书时,建议采用“教、学、做”一体化的方式组织教学,最好在具有实物投影的实训室内组织教学。教学时,建议先将书中提供的程序下载至开发板中,让学生观看实际效果并体会任务要求的真实含义,激发学生的学习兴趣。然后引导学生边做边学,直至任务的完成,让学生在做中体会和总结STM32嵌入式应用系统的开发技术。 本书由浙江工贸职业技术学院李文华任主编,浙江工贸职业技术学院姚健和北京新大陆时代科技有限公司的黄敏恒高级工程师任副主编。具体编写分工如下:李文华编写了任务9~任务14、任务17~任务20,并负责全书的策划、统稿和任务9~任务12、任务17~任务20的讲解视频的拍摄;姚健编写了任务1~任务8,并负责任务1~任务8、任务13~任务16的讲解视频的拍摄;黄敏恒编写了任务15和任务16,并负责提供工程案例和项目的筛选,参与本教材的规划和内容的制定。 本书是浙江工贸职业技术学院人工智能双高专业群建设成果之一。在本书成稿的过程中,曾得到许多同人和朋友的帮助和支持。浙江工贸职业技术学院的汪焰教授对本书的编写进行了深入指导,湖北第二师范学院的焦启民教授、广东科技职业技术学院的余爱民教授、武汉铁道职业技术学院的郑毛祥教授、温州职业技术学院的张佐理副教授、长江职业技术学院的邓柳副教授、浙江安防职业技术学院的金恩曼副教授、浙江交通职业技术学院的洪顺利副教授等多位老师对本书的编写提出了许多积极宝贵的意见,并给予极大的关心和支持。感谢电子工业出版社的编辑为本书出版所做的辛勤工作,没有他们就没有这本书的出版,谨此表示感谢﹗ 尽管编者在本书的编写方面做了许多努力,但由于编者的水平有限,加之时间紧迫,错误不当之处在所难免,恳请各位读者批评指正,并将意见和建议及时反馈给我们,以便修订时改进。 编 者 2023年3月
项目1 搭建开发环境 1 学习目标 1 任务1 安装开发工具 1 任务要求 1 知识储备 2 1.STM32微控制器 2 2.STM32的软件开发方式 4 实现方法与步骤 4 1.准备开发工具 4 2.解压工具软件 9 3.安装MDK 10 4.安装Keil包 13 5.激活MDK 15 6.安装JRE 16 7.安装STM32CubeMX 17 8.安装STM32CubeMX库 19 9.安装CH340 驱动程序 22 10.查看USB口映射的串口号 23 11.安装STLink驱动程序 24 12.安装程序下载软件 25 实践总结与拓展 27 习题1 27 任务2 点亮LED灯 28 任务要求 28 知识储备 28 1.初识GPIO口 28 2.STM32的时钟源 29 3.STM32的程序启动模式 30 4.STM32的程序调试模式 31 5.发光二极管的控制电路 31 实现方法与步骤 32 1.搭建硬件电路 32 2.新建STM32CubeMX工程 33 3.配置STM32的硬件资源 34 4.管理STM32CubeMX工程 39 5.生成Keil工程代码 41 6.配置Keil工程 42 7.编译连接程序 43 8.下载程序 44 实践总结与拓展 46 习题2 46 项目2 GPIO口的应用设计 48 学习目标 48 任务3 控制LED闪烁 48 任务要求 48 知识储备 49 1.Keil工程的结构 49 2.程序编写规范 50 3.GPIO口输出特性 52 4.GPIO口的输出函数 54 5.延时函数 56 实现方法与步骤 56 1.搭建电路 56 2.生成GPIO口的初始化代码 56 3.编写LED闪烁程序 57 4.编译与下载程序 58 实践总结与拓展 60 习题3 61 任务4 制作跑马灯 62 任务要求 62 知识储备 63 1.位操作运算的应用 63 2.GPIO口的并行输出 65 实现方法与步骤 66 1.搭建电路 66 2.生成GPIO口的初始化代码 66 3.编写跑马灯程序 66 4.配置Keil工程 67 5.调试与下载程序 69 实践总结与拓展 72 1.用查表法实现跑马灯显示 72 2.用访问ODR寄存器的方式 实现跑马灯显示 74 习题4 75 任务5 显示按键的状态 77 任务要求 77 知识储备 77 1.GPIO口的输入特性 77 2.GPIO口的输入函数 78 3.GPIO口的并行输入 79 4.按键电路 79 实现方法与步骤 80 1.搭建电路 80 2.生成GPIO口的初始化代码 80 3.编写显示按键状态程序 81 4.调试与下载程序 82 实践总结与拓展 83 习题5 83 项目3 外部中断和定时器的应用设计 85 学习目标 85 任务6 统计按键按下的次数 85 任务要求 85 知识储备 86 1.中断的相关知识 86 2.嵌套中断向量控制器NVIC 86 3.STM32的外部中断控制器 87 4.HAL库中GPIO口的外部中断 函数 89 实现方法与步骤 91 1.搭建电路 91 2.生成外部中断的初始化代码 91 3.编写统计按键按下次数的程序 95 4.调试与下载程序 97 程序分析 97 实践总结与拓展 98 习题6 98 任务7 制作简易秒表 100 任务要求 100 知识储备 100 1.定时器的分类 100 2.定时器的基本结构 101 3.计数模式 102 4.定时时长的计算 102 5.HAL库中有关定时器的常用 函数 102 实现方法与步骤 104 1.搭建电路 104 2.生成定时器的初始化代码 104 3.编写简易秒表程序 106 程序分析 109 实践总结与拓展 110 习题7 111 任务8 制作呼吸灯 112 任务要求 112 知识储备 113 1.PWM的基本概念 113 2.STM32中PWM的结构 113 3.PWM的工作模式 114 4.定时器各通道的引脚分布 114 5.HAL库中PWM的函数和宏 115 实现方法与步骤 116 1.搭建电路 116 2.生成PWM的初始化代码 116 3.编写呼吸灯程序 120 4.调试与下载程序 122 实践总结与拓展 122 习题8 123 项目4 串口通信的应用设计 124 学习目标 124 任务9 用串口与计算机交换数据 124 任务要求 124 知识储备 125 1.串行通信的基本知识 125 2.STM32F103中通用串行口的结构 126 3.通用串行口的引脚 127 4.双机通信电路 128 5.HAL库中串行通信的常用函数 132 实现方法与步骤 134 1.搭建电路 134 2.生成串口1的初始化代码 135 3.编写串行通信程序 137 4.调试与下载程序 139 程序分析 140 实践总结与拓展 143 习题9 144 任务10 用空闲中断处理串口接收数据 145 任务要求 145 知识储备 146 1.串口的空闲中断 146 2.HAL库中操作空闲中断的宏 146 3.空闲中断的编程方法 147 4.常用的串操作函数 149 实现方法与步骤 150 1.搭建电路 150 2.生成硬件初始化代码 150 3.编写数据接收程序 151 4.编写数据处理程序 154 5.增加include目录 156 6.调试与下载程序 157 程序分析 158 实践总结与拓展 160 习题10 161 项目5 显示与键盘的应用设计 163 学习目标 163 任务11 制作数码管显示的秒表 163 任务要求 163 知识储备 164 1.数码管的显示原理 164 2.数码管的静态显示 165 3.数码管的动态扫描显示 166 实现方法与步骤 172 1.搭建电路 172 2.生成硬件初始化代码 172 3.编写数码管显示程序 173 4.编写秒表应用程序 174 实践总结与拓展 175 习题11 179 任务12 用键盘控制秒表的运行 181 任务要求 181 知识储备 182 1.键盘处理流程 182 2.独立式键盘接口 182 3.矩阵式键盘接口 188 实现方法与步骤 191 1.搭建电路 191 2.生成硬件初始化代码 191 3.修改秒表程序 191 4.添加键盘处理程序 193 实践总结与拓展 195 习题12 195 任务13 用OLED屏显示字符 196 任务要求 196 知识储备 196 1.OLED屏与STM32的接口电路 196 2.SSD1306的显存 198 3.SSD1306的地址模式 199 4.OLED的访问程序 200 实现方法与步骤 205 1.搭建电路 205 2.生成硬件初始化代码 205 3.移植OLED程序 205 4.制作字库 206 5.编写字符显示程序 210 实践总结与拓展 210 习题13 213 任务14 用OLED显示图片 215 任务要求 215 知识储备 215 1.图片显示函数 215 2.图片的显示方法 216 实现方法与步骤 216 1.搭建电路 216 2.用图片处理软件编辑图片文件 217 3.用Image2Lcd软件制作位图文件 220 4.用PCtoLCD软件制作图库文件 221 5.生成硬件初始化代码 222 6.编写显示图片的应用程序 223 7.完善bmp.h头文件 223 8.调试与下载程序 224 实践总结与拓展 224 习题14 225 项目6 A/D与D/A转换器的应用设计 226 学习目标 226 任务15 制作电压监测器 226 任务要求 226 知识储备 227 1.A/D转换的基础知识 227 2.STM32中ADC的结构 227 3.ADC的应用特性 230 4.HAL库中有关ADC的常用函数和宏 232 实现方法与步骤 235 1.搭建电路 235 2.生成ADC的初始化代码 235 3.编写电压监测器的程序 238 4.调试与下载程序 239 程序分析 239 实践总结与拓展 240 习题15 240 任务16 制作电压信号发生器 241 任务要求 241 知识储备 242 1.D/A转换的基础知识 242 2.STM32中DAC的应用特性 242 3.HAL库中有关DAC的常用函数 244 实现方法与步骤 246 1.搭建电路 246 2.生成DAC的初始化代码 246 3.编写信号发生器的程序 246 4.调试与下载程序 248 实践总结与拓展 249 习题16 250 项目7 外设接口的应用设计 252 学习目标 252 任务17 用硬件SPI口控制OLED屏 252 任务要求 252 知识储备 253 1.SPI接口的信号线 253 2.STM32中SPI口的应用特性 253 3.SPI口的设置方法 257 4.HAL库中常用的SPI操作函数 258 实现方法与步骤 260 1.搭建电路 260 2.生成SPI口的初始化代码 260 3.完善SPI通信程序 263 4.编写显示程序 265 5.调试与下载程序 266 实践总结与拓展 266 习题17 267 任务18 用硬件I2C接口访问AT24C02 269 任务要求 269 知识储备 269 1.I2C总线的基本知识 269 2.STM32中I2C接口的应用特性 271 3.HAL库中的I2C访问函数 272 4.AT24C02的应用特性 273 实现方法与步骤 277 1.搭建电路 277 2.生成I2C接口的初始化代码 278 3.编写AT24C02的应用程序 279 4.在main.c文件中编写应用程序 280 5.调试与下载程序 281 实践总结与拓展 281 习题18 282 任务19 读写FLASH存储器 283 任务要求 283 知识储备 283 1.STM32的FLASH存储器 283 2.HAL库中有关FLASH操作的函数 284 3.读写FLASH存储器的方法 286 实现方法与步骤 288 1.搭建电路 288 2.生成硬件初始化代码 288 3.编写读写FLASH存储器的应用程序 288 4.调试与下载程序 291 实践总结与拓展 291 习题19 291 任务20 用RTC制作数字钟 293 任务要求 293 知识储备 294 1.STM32中RTC的应用特性 294 2.HAL库中有关RTC的操作函数 294 实现方法与步骤 300 1.搭建电路 300 2.生成RTC的初始化代码 300 3.编写数字钟的应用程序 302 4.调试与下载程序 306 实践总结与拓展 306 习题20 307 附录A STM32开发板电路图 309 附录B 全国职业院校“物联网应用开发” 大赛试题(STM32部分) 311 附录C 1+X传感网应用开发(中级)试题 (有关STM32部分) 314 参考文献 317