![]() ![]() |
ARM Cortex-M4嵌入式系统原理及应用——基于STM32F407微控制器的HAL库开发 读者对象:本书适合作为高等院校计算机、自动化、电子信息、机电一体化、物联网等专业高年级本科生或研究生嵌入式相关课程的教材, 同时可供从事嵌入式开发的技术和研究人员参考 本书详细阐述了基于ARM Cortex-M4内核的STM32F407微控制器嵌入式系统硬件设计方法和软件开发技术。全书共有十八章,划分为三篇:第一篇(第1~3章)为系统平台,讲述嵌入式系统定义、嵌入式硬件平台和软件环境配置与使用入门。第二篇(第4~10章)为基本外设,分别对STM32嵌入式系统最常用的外设模块进行介绍,包括GPIO、中断、定时器、PWM和嵌入式系统接口技术。第三篇(第11~18章)为扩展外设,分别对STM32嵌入式系统高级外设模块和典型传感器进行讲解,包括USART、SPI、W25Q128、IIC、EEPROM 、ADC、DMA、DAC、RTC和DHT11等。 全书共18章,分为三篇:第一篇(第1~3章)为系统平台模块,介绍嵌入式系统定义、嵌入式硬件平台和软件环境;第二篇(第4~10章)为基本外设模块,介绍STM32嵌入式系统常用的外设模块,包括GPIO、中断、定时器、PWM和嵌入式系统接口技术;第三篇(第11~18章)为扩展外设模块,介绍STM32嵌入式系统高级外设模块和典型的传感器,包括USART、SPI、W25Q128、I2C、EEPROM、ADC、DMA、DAC、RTC、DHT11等。 系统论述基于STM32CubeMX的HAL开发方法。 以读者认知过程为导向编排组织书中章节内容。 项目引领,任务驱动,培养读者工程实践能力。 构建立体化的教学资源,便于课程教学与项目开发。 2020年1月,作者出版了《ARM CortexM3嵌入式原理及应用基于STM32F103微控制器》。该书自出版以来,被国内百余所高校选为教材,年销万余册,并先后荣获清华大学出版社畅销图书、科技类最受读者欢迎图书和苏州大学精品教材等荣誉称号,获得读者的普遍好评,令作者深受鼓舞,决定再编著一部既注重入门,又兼顾提高的嵌入式系统项目式教材。 1. 出版背景 青山遮不住,毕竟东流去!虽然我们已经积累了大量的经典的8位单片机(如MCS51)、16位单片机(如MSP430)的技术资料,但是复杂的指令、较低的主频、有限的存储空间、极少的片上外设,使其在面对复杂应用时,捉襟见肘,难以胜任。8位、16位单片机的应用不会就此结束,32位处理器时代已经到来。 在这个大环境下,ARM CortexM处理器轰轰烈烈地诞生了!它性能更强、功耗更低、易于使用。许多曾经只能求助于高级32位处理器或DSP的软件设计,都能在ARM CortexM处理器上跑得很快。按照ARM公司的经营策略,公司只负责设计处理器IP核,而不生产和销售具体的处理器芯片。在诸多半导体制造商中,意法半导体(ST Microelectronics)公司较早在市场上推出基于ARM CortexM内核的微控制器产品,其根据ARM CortexM内核设计生产的STM32微控制器充分发挥了低成本、低功耗、高性价比的优势,以系列化的方式推出,方便用户选择,受到了广泛的好评。在众多STM32微控制器产品中,基于ARM CortexM3内核的STM32F103微控制器和基于ARM CortexM4内核的STM32F407微控制器较为用户所了解,市场占有率很高,很多嵌入式教材也是以二者之一为蓝本进行讲解的。相比于STM32F103微控制器,STM32F407在内核、资源、外设、性能、功耗等多方面均有较大增强,而二者价格相差并不大,所以本书选择以STM32F407为背景机型进行讲解。 STM32支持的四种开发方式中的寄存器开发方式和LL库开发方式较少使用,嵌入式软件工程师往往会在标准库开发方式和HAL库开发方式之间艰难抉择。近年来,随着硬件性能逐步提升和STM32CubeMX软件的更新升级,HAL库开发方式的高效、便捷和通用性得到进一步的彰显,选择的天平逐渐倾向于HAL库开发方式。作者实践和比较了两种开发方式之后,发现HAL库开发方式较标准库开发方式可以明显减少代码量,大幅降低编程人员翻阅数据手册的频率,研发周期大幅缩短,可靠性显著提升。虽然HAL库开发方式不是完美无瑕,但利远大于弊,它是未来嵌入式开发的技术方向,也是STM32官方主推的开发方式。所以,本书介绍的软件设计是基于图形化配置工具STM32CubeMX的HAL库开发,这是当前技术主流,具有一定的前瞻性。 2. 内容简介 针对上述情况,作者根据多年的嵌入式系统教学和开发经验编写了本书,试图做到循序渐进,理论与实践并重,共性与个性兼顾,将嵌入式系统的理论知识和基于ARM CortexM4内核的STM32F407微控制器的实际开发相结合。 全书共18章,划分为以下三篇。 第一篇(第1~3章)为系统平台。第1章介绍了嵌入式系统定义、ARM内核以及基于ARM CortexM4内核的STM32微控制器; 第2章对STM32F407微控制器和开发板硬件平台各模块进行详细介绍; 第3章介绍STM32软件环境配置与使用入门。 第二篇(第4~10章)为基本外设,分别对STM32嵌入式系统最常用外设模块进行介绍。第4章讲解通用输入输出端口; 第5章讲解LED流水灯与SysTick定时器; 第6章讲解按键输入与蜂鸣器; 第7章讲解FSMC总线与双显示终端; 第8章讲解中断系统与基本应用; 第9章讲解基本定时器; 第10章讲解通用定时器。 第三篇(第11~18章)为扩展外设,分别对STM32嵌入式系统高级外设模块进行介绍。第11章讲解串行通信接口USART; 第12章讲解SPI与字库存储; 第13章讲解I2C接口与EEPROM; 第14章讲解模/数转换与光照传感器; 第15章讲解直接存储器访问; 第16章讲解数/模转换器; 第17章讲解位带操作与温湿度传感器; 第18章讲解RTC与蓝牙通信。 无论是基本外设,还是扩展外设,从第4章开始到第18章结束,每一章先对理论知识进行讲解,然后引入项目实例,给出项目实施具体步骤,项目可以在课堂完成。整个教学理论与实践一体,学中做,做中学。 3. 本书特色 (1) 以学生认知过程为导向,设计本书逻辑,组织章节内容。先硬件后软件,由浅入深,循序渐进; 遵循理论够用,重在实践,容易上手的原则,培养学习兴趣,激发学习动力。 (2) 项目引领,任务驱动,教学做一体,注重学生工程实践能力的培养。对于每个典型外设模块,在简明扼要地阐述原理的基础上,围绕其应用,以案例的形式讨论其设计精髓,并在书中给出了完整的工程案例。 (3) 传承51经典,发扬ARM长处,助推MCU升级。ARM嵌入式系统实际上是8位单片机的升级扩展,但是其高性能必然对应高复杂度。借助8位单片机共性的理念、方法和案例,有助于提升读者学习兴趣,使其轻松入门嵌入式开发。 4. 配套资源 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。学习新东西时,没有什么比实践更重要的了!为此,作者从硬件和软件两个方面为读者创建了良好的实践环境。 在硬件方面,本书设计了如下模块: ①板载CMSISDAP调试器; ②使用FSMC总线同时连接数码管和TFT LCD; ③独立按键/矩阵键盘切换电路; ④使用片外SPI Flash芯片存储中文字库。读者可直接购买本书配套开发板,也可以将本书项目移植到已有开发板,还可以自主设计开发板。 在软件方面,本书提供了配套实例的程序代码,便于读者开发验证。此外,本书还提供了教学课件、教学大纲、实验素材等教学资源。 5. 致谢 在本书的撰写过程中参阅了许多资料,在此对所参考书籍的作者表示诚挚的感谢。本书在编写过程中引用了互联网上最新资讯及报道,在此向原作者和刊发机构表示真挚的谢意,并对不能一一注明来源深表歉意。对于收集到的没有标明出处或找不到出处的共享资料,以及一些进行加工、修改后纳入本书的资料,在此郑重声明,本书内容仅用于教学,其著作权属于原作者,并向他们表示致敬和感谢。 在本书的编写过程中,作者得到了家人的理解和帮助,并且一直得到清华大学出版社盛东亮老师和钟志芳老师的关心和大力支持,清华大学出版社的工作人员也付出了辛勤的劳动,在此谨向支持和关心本书编著的家人、同仁和朋友一并致谢。 由于嵌入式技术发展日新月异,加之作者水平有限,书中难免有疏漏和不足之处,恳请广大读者批评指正。如果读者对本书有任何意见、建议和想法,或希望获取本书配套开发板的更多技术支持,请与作者联系。 作者2024年2月 黄克亚苏州大学副教授、软件设计师、硕士生导师,主要从事智能控制、嵌入式系统开发等领域的教学和科研工作。长期讲授电工电子技术单片机原理与控制技术微机原理及应用嵌入式系统开发与实践传感器应用技术等课程。近年来主持省级课题2项,获授权发明专利2项,登记软件著作权4项,发表SCI/EI/中文核心论文12篇。指导学生获全国软件和信息技术专业人才大赛全国总决赛二等奖2项、全国大学生电子设计竞赛江苏省赛区二等奖2项、江苏省本专科优秀毕业设计(论文)三等奖1项。 第一篇系 统 平 台 第1章ARM Cortex-M4嵌入式系统 1.1嵌入式系统概述 1.1.1什么是嵌入式系统 1.1.2嵌入式系统和通用计算机比较 1.1.3嵌入式系统的特点 1.1.4嵌入式系统的应用领域 1.1.5嵌入式系统范例 1.2嵌入式系统的硬件 1.2.1嵌入式处理器的分类 1.2.2嵌入式处理器的技术指标 1.2.3嵌入式存储器 1.2.4嵌入式I/O设备 1.2.5嵌入式I/O接口 1.3ARM Cortex-M4 处理器 1.3.1ARM公司 1.3.2ARM处理器 1.4STM32微控制器 1.4.1从ARM Cortex-M内核到基于ARM Cortex-M的MCU 1.4.2STM32微控制器产品线 1.4.3STM32微控制器命名规则 1.5嵌入式系统的软件 1.5.1无操作系统的嵌入式软件 1.5.2带操作系统的嵌入式软件 1.5.3典型嵌入式操作系统 1.5.4软件结构选择建议 本章小结 思考拓展 第2章STM32F407与实验平台 2.1STM32F407微控制器 2.1.1STM32F407/STM32F417系列 2.1.2STM32F407功能特性 2.1.3STM32F407内部结构 2.1.4STM32F407存储器映射 2.1.5STM32F407时钟系统 2.1.6STM32F407引脚 2.2开发板总体概况 2.2.1开发板设计背景 2.2.2开发板总体介绍 2.3电源电路 2.3.1电源电路原理图 2.3.2电源电路工作原理 2.4核心板电路 2.4.1芯片电源电路 2.4.2CPU滤波电路 2.4.3外接晶振电路 2.4.4备用电源电路 2.4.5复位电路 2.4.6启动设置电路 2.5I/O模块电路 2.5.1LED模块 2.5.2按键模块 2.5.3显示模块 2.5.4蜂鸣器模块 2.6扩展模块电路 2.6.1温湿度传感器 2.6.2光照传感器 2.6.3A/D采样模块 2.6.4EEPROM 2.6.5Flash存储器 2.6.6波形发生器 2.6.7蓝牙模块 2.6.8I/O引脚外接模块 2.7CMSIS-DAP调试器 本章小结 思考拓展 第3章软件环境配置与使用入门 3.1STM32开发方式 3.1.1STM32Snippets库 3.1.2标准外设库 3.1.3STM32CubeMX HAL库 3.1.4STM32CubeMX LL库 3.1.5开发方式比较与选择 3.2软件资源安装与配置 3.2.1JRE安装 3.2.2STM32CubeMX安装 3.2.3HAL固件包安装 3.2.4MDK-ARM安装 3.2.5器件包安装 3.2.6MDK-ARM注册 3.2.7软件安装总结 3.3基于STM32CubeMX的HAL开发方式 3.3.1STM32CubeMX生成初始化代码 3.3.2MDK-ARM集成开发 3.4CMSIS-DAP调试器使用 3.4.1调试器连接与驱动安装 3.4.2调试选项设置与程序下载 3.5开发经验小结编译器优化与volatile关键字 3.5.1编译器优化 3.5.2volatile关键字 本章小结 思考拓展 第二篇基 本 外 设 第4章通用输入输出端口 4.1GPIO概述及引脚命名 4.2GPIO内部结构 4.2.1输入驱动器 4.2.2输出驱动器 4.3GPIO工作模式 4.3.1输入浮空 4.3.2输入上拉 4.3.3输入下拉 4.3.4模拟输入 4.3.5开漏输出 4.3.6开漏复用输出 4.3.7推挽式输出 4.3.8推挽式复用输出 4.3.9工作模式选择 4.4GPIO输出速度 4.5I/O引脚复用及映射 4.6GPIO控制寄存器 4.7GPIO控制寄存器配置实例 4.8寄存器版LED灯闪烁工程 4.8.1创建寄存器版工程模板 4.8.2LED灯闪烁程序设计 4.9开发经验小结MDK中的C语言数据类型 本章小结 思考拓展 第5章LED流水灯与SysTick定时器 5.1GPIO输出库函数 5.1.1GPIO外设时钟使能 5.1.2函数HAL_GPIO_Init() 5.1.3函数HAL_GPIO_DeInit() 5.1.4函数HAL_GPIO_WritePin() 5.1.5函数HAL_GPIO_TogglePin() 5.1.6输出寄存器访问 5.2LED流水灯控制 5.3SysTick定时器 5.3.1SysTick定时器概述 5.3.2SysTick定时器寄存器 5.3.3延时函数HAL_Delay() 5.3.4HAL_Delay()延时实例 5.3.5微秒级延时的实现 5.3.6综合延时程序实例 5.4开发经验小结C语言中的位运算 5.4.1位运算符和位运算 5.4.2嵌入式系统位运算实例 本章小结 思考拓展 第6章按键输入与蜂鸣器 6.1GPIO输入库函数 6.1.1函数HAL_GPIO_ReadPin() 6.1.2输入数据寄存器访问 6.1.3函数HAL_GPIO_LockPin() 6.2独立按键控制蜂鸣器 6.2.1电路原理 6.2.2按键消抖 6.2.3项目实施 6.3矩阵键盘扫描 6.3.1矩阵键盘电路 6.3.2矩阵键盘扫描原理 6.3.3矩阵键盘实例 6.4开发经验小结复合数据类型 6.4.1结构体数据类型 6.4.2枚举数据类型 本章小结 思考拓展 第7章FSMC总线与双显示终端 7.1FSMC总线 7.2硬件系统设计 7.2.1硬件结构框图 7.2.2FSMC与TFT LCD连接 7.2.3FSMC与数码管连接 7.3数码管接口技术 7.3.1数码管工作原理 7.3.2数码管编码方式 7.3.3数码管显示方式 7.4TFT LCD驱动 7.4.1ILI9341颜色体系 7.4.2ILI9341常用命令 7.5项目实例 7.5.1FSMC读写时序 7.5.2FSMC初始化 7.5.3数码管动态显示学号 7.5.4数码管动态显示时间 7.5.5LCD驱动程序 7.5.6LCD英文显示 7.5.7LCD中文信息显示 7.6开发经验小结C语言指针及其类型转换 7.6.1指针基本概念 7.6.2指针类型转换 本章小结 思考拓展 第8章中断系统与基本应用 8.1中断的基本概念 8.1.1中断的定义 8.1.2中断的优点与应用 8.1.3中断源与中断屏蔽 8.1.4中断处理过程 8.1.5中断优先级与中断嵌套 8.2STM32F407中断系统 8.2.1嵌套向量中断控制器 8.2.2STM32F407中断优先级 8.2.3STM32F407中断向量表 8.2.4STM32F407中断服务函数 8.3STM32F407外部中断/事件控制器EXTI 8.3.1EXTI内部结构 8.3.2EXTI工作原理 8.3.3EXTI主要特性 8.4STM32F407外部中断HAL库函数 8.4.1STM32F407的NVIC相关库函数 8.4.2STM32F407的EXTI相关库函数 8.5EXTI项目实例 8.5.1项目分析 8.5.2项目实施 8.5.3ISR框架总结 8.6开发经验小结前/后台嵌入式软件架构 本章小结 思考拓展 第9章基本定时器 9.1STM32F407定时器概述 9.2基本定时器 9.2.1基本定时器简介 9.2.2基本定时器的主要特性 9.2.3基本定时器的功能 9.2.4基本定时器寄存器 9.3基本定时器的HAL驱动 9.3.1基本定时器主要HAL驱动函数 9.3.2定时器通用操作宏函数 9.3.3定时器中断处理函数 9.4项目实例 9.4.1数字电子钟 9.4.2定时器刷新数码管 9.4.3定时器矩阵键盘扫描 本章小结 思考拓展 第10章通用定时器 10.1通用定时器功能概述 10.1.1通用定时器主要特性 10.1.2通用定时器功能描述 10.2通用定时器工作模式与HAL驱动 10.2.1PWM输出模式 10.2.2输出比较模式 10.2.3输入捕获模式 10.2.4PWM输入模式 10.3通用定时器寄存器 10.4通用定时器中断事件和回调函数 10.5项目实例 10.5.1PWM呼吸灯 10.5.2输出比较模式输出方波信号 10.5.3输入捕获模式测量脉冲频率 10.5.4PWM波频率和占空比测量 本章小结 思考拓展 第三篇扩 展 外 设 第11章串行通信接口USART 11.1数据通信基本概念 11.1.1并行通信与串行通信 11.1.2异步通信与同步通信 11.1.3串行通信的制式 11.1.4串行通信的校验 11.1.5串行通信的波特率 11.2USART工作原理 11.2.1USART介绍 11.2.2USART功能特性 11.2.3UART通信协议 11.2.4USART中断 11.2.5USART相关寄存器 11.3UART的HAL驱动 11.3.1UART常用功能函数 11.3.2UART常用的宏函数 11.3.3UART中断事件与回调函数 11.4串口通信项目实例 11.4.1项目分析 11.4.2微控制器端程序设计 11.4.3上位机程序设计 11.4.4串口通信调试 11.5开发经验小结printf()重定向函数 11.5.1重写fputc()函数 11.5.2选择使用Micro LIB 11.5.3printf()串口打印信息 本章小结 思考拓展 第12章SPI与字库存储 12.1SPI通信原理 12.1.1SPI 12.1.2SPI互连 12.2STM32F407的SPI工作原理 12.2.1SPI主要特征 12.2.2SPI内部结构 12.2.3时钟信号的相位和极性 12.2.4数据帧格式 12.3Flash存储芯片W25Q128 12.3.1硬件接口和连接 12.3.2存储空间划分 12.3.3数据读写原则 12.3.4存储器操作指令 12.4SPI的HAL库驱动 12.4.1SPI寄存器操作的宏函数 12.4.2SPI初始化和阻塞式数据传输 12.4.3中断和DMA方式数据传输 12.5SPI Flash读写测试 12.5.1项目分析 12.5.2项目实施 12.6中文字库存储 12.6.1需求分析 12.6.2字库生成与合并 12.6.3字库存储 12.6.4LCD中文驱动程序 12.7基于SPI闪存的中文显示 12.8开发经验小结条件编译 12.8.1命令形式 12.8.2应用示例 本章小结 思考拓展 第13章I2C接口与EEPROM 13.1I2C通信原理 13.1.1I2C串行总线概述 13.1.2I2C总线的数据传送 13.2STM32F407的I2C接口 13.2.1STM32F407的I2C主要特性 13.2.2STM32F407的I2C内部结构 13.2.3STM32F407的I2C工作模式 13.3I2C接口的HAL库驱动 13.3.1I2C接口的初始化 13.3.2阻塞式数据传输 13.3.3中断方式数据传输 13.3.4DMA方式数据传输 13.4EEPROM存储芯片24C02 13.4.1芯片概述与硬件连接 13.4.2接口与通信协议 13.5EEPROM存储开机密码项目 13.5.1项目分析 13.5.2项目实施 本章小结 思考拓展 第14章模/数转换与光照传感器 14.1ADC概述 14.1.1ADC基本原理 14.1.2ADC性能参数 14.1.3ADC主要类型 14.2STM32F407的ADC工作原理 14.2.1主要特征 14.2.2内部结构 14.2.3通道及分组 14.2.4时序图 14.2.5数据对齐 14.2.6校准 14.2.7转换时间 14.2.8转换模式 14.2.9外部触发转换和触发极性 14.2.10中断和DMA请求 14.2.11多重ADC模式 14.3ADC的HAL库驱动 14.3.1规则通道驱动 14.3.2注入通道驱动 14.3.3多重ADC驱动 14.4项目实例 14.4.1多通道轮询方式模拟信号采集 14.4.2光照传感器模拟与数字同步控制 本章小结 思考拓展 第15章直接存储器访问 15.1DMA的基本概念 15.1.1DMA的由来 15.1.2DMA的定义 15.1.3DMA的优点 15.2STM32F407的DMA工作原理 15.2.1DMA简介 15.2.2DMA通道选择 15.2.3DMA主要特性 15.2.4DMA传输属性 15.3DMA的HAL库驱动 15.3.1DMA的HAL函数概述 15.3.2DMA传输初始化配置 15.3.3启动DMA数据传输 15.3.4DMA中断 15.4项目实例 15.4.1USART接口DMA传输 15.4.2定时器触发DMA传输多通道模拟量采集 15.4.3三重ADC同步转换DMA传输 15.5开发经验小结轮询、中断、DMA 15.5.1轮询 15.5.2中断 15.5.3DMA 本章小结 思考拓展 第16章数/模转换器 16.1DAC概述 16.1.1DAC基本原理 16.1.2DAC性能参数 16.2STM32F407的DAC工作原理 16.2.1DAC结构与特性 16.2.2DAC功能说明 16.3DAC的HAL库驱动 16.3.1DAC驱动宏函数 16.3.2DAC驱动功能函数 16.4项目实例 16.4.1软件触发D/A转换 16.4.2三角波输出 16.4.3使用DMA输出正弦波信号 本章小结 思考拓展 第17章位带操作与温湿度传感器 17.1STM32位带操作 17.1.1位带介绍 17.1.2位带区与位带别名区地址转换 17.1.3位带操作宏定义 17.2温湿度传感器DHT11 17.2.1DHT11功能说明 17.2.2DHT11单总线通信协议 17.3温湿度实时监测 17.3.1项目分析 17.3.2项目实施 本章小结 思考拓展 第18章RTC与蓝牙通信 18.1RTC概述 18.1.1RTC功能 18.1.2RTC工作原理 18.1.3RTC的中断和复用引脚 18.2RTC的HAL库驱动 18.2.1RTC的HAL基础驱动程序 18.2.2周期唤醒相关HAL函数 18.2.3闹钟相关HAL函数 18.3备份寄存器 18.4RTC日历和闹钟项目 18.4.1项目分析 18.4.2项目实施 18.5蓝牙模块通信 18.5.1蓝牙通信概述 18.5.2蓝牙透明传输原理 18.6无线时间同步电子万年历 18.6.1项目分析 18.6.2项目实施 本章小结 思考拓展 附录AASCII码表 附录B运算符和结合性关系表 附录CSTM32F407微控制器引脚定义表 参考文献
你还可能感兴趣
我要评论
|