内容简介
ARM Cortex-M3嵌入式开发及应用(STM32系列)(电子设计与嵌入式开发实践丛书)采用由简到难的编写思路,
首先介绍简单嵌入式发展趋势和概念,然后逐步到功能性开发,举例分析,最后加深难度,介绍高级应用,从而使读者很容易理解和消化。全书共10章,第1~3章介绍了嵌入式系统的基本概念、常用芯片、工具和嵌入式系统的开发过程; 第4章介绍了配套学习板的原理图和设计思路; 第5~7章介绍了STM32的基本使用和各种外设的驱动以及开发应用,并列举了各种典型的应用实例; 第8章介绍了μc/OS�并蛟赟TM32上的应用情况; 第9章详细介绍了STM32嵌入式系统中可以使用的一些经典实用算法; 第10章从实用角度列举了支持MODBUS通信协议的通用控制器开发实例。
本书中列举的实例具有一定难度,适合具有一定嵌入式基础的读者使用,初学者请参考本书提供的共享资料和开发板的应用代码。本书的编写强调实用性和易用性,希望能解决读者学习和开发过程中的一些实际困难和问题。
内页插图
目录
第1章嵌入式系统开发技术
1.1嵌入式开发的基本概念
1.1.1嵌入式系统的基本组成
1.1.2嵌入式系统的特点
1.2嵌入式系统发展历史与现状
1.3嵌入式系统的组成
1.3.1硬件层
1.3.2中间层
1.3.3系统软件层
1.4嵌入式系统相关概念
1.4.1嵌入式处理器
1.4.2嵌入式外围设备
1.4.3嵌入式操作系统
1.4.4嵌入式应用软件
1.5应用领域
第2章ARM技术概述
2.1ARM体系构架
2.1.1哈佛结构
2.1.2冯·诺依曼结构
2.2ARM的RISC结构特性
2.3常用ARM处理器系列
2.4ARM体系结构和技术特征
2.5ARM的流水线
2.6Thumb指令集
2.7Thumb��2指令集
第3章基于STM32的嵌入式系统应用开发
3.1STM32F103系列MCU简介
3.1.1MCU基本功能
3.1.2系统性能分析
3.2低功耗版本STM32L系列
3.3STM32的开发工具
3.4STM32的固件库文件
3.5STM32的启动文件
3.6JTAG简介
3.7JTAG调试STM32F103过程
3.8SWD仿真模式
3.9JTAG接口及仿真器接口定义
3.10ISP下载器及常用工具
ARM Cortex-M3嵌入式开发及应用(STM32系列)
第4章DevStm 4.0开发板硬件及设计
4.1电源电路
4.2MCU外围电路
4.3复位电路
4.4晶振电路
4.5启动模式设置电路
4.6EEPROM电路
4.7串口电路
4.8RS485接口电路
4.9SD卡接口电路
4.10JTAG电路
4.11按键检测电路
4.12开关检测电路
4.13网络接口电路
4.14PWM驱动LED电路
4.15片载A/D转换电路
4.16AD7708 16位高精度A/D转换电路
4.17CAN总线接口电路
4.18OLED显示接口电路
4.19继电器驱动电路
4.20SeiSite接口
4.21开发板原件PCB布局及接口指示说明
第5章STM32基本应用技术
5.1GPIO通用输入/输出接口
5.1.1GPIO端口结构
5.1.2GPIO口输入/输出模式
5.1.3GPIO的库函数操作
5.1.4GPIO使用示例
5.2系统滴答定时器
5.2.1SysTick端口结构
5.2.2SysTick操作相关的库函数
5.2.3SysTick使用示例
5.3复位、系统时钟及实时时钟RTC
5.3.1复位
5.3.2时钟
5.3.3复位及时钟操作相关的库函数
5.3.4时钟使用示例
5.4NVIC嵌套向量中断控制器
5.4.1中断优先级
5.4.2中断函数定义
5.4.3NVIC操作相关的库函数
5.4.4NVIC使用示例
5.5EXTI外部中断
5.5.1GPIO外部中断
5.5.2EXTI操作相关的库函数
5.5.3EXTI使用示例
5.6电源控制PWR
5.6.1独立的A/D转换器供电和参考电压
5.6.2电池备份区域
5.6.3电压调节器
5.6.4电源管理器
5.6.5低功耗模式
5.6.6低功耗模式下的自动唤醒
5.6.7PWR操作相关的库函数
5.6.8PWR使用示例
第6章STM32F103的进阶设计及应用
6.1TIMx定时器
6.1.1TIM1和TIM8高级定时器
6.1.2普通定时器TIMx
6.1.3基本定时器TIM6和TIM7
6.1.4定时器相关的时钟源
6.1.5计数器模式
6.1.6定时器操作相关的库函数
6.1.7TIMx使用示例
6.2外设DMA技术
6.2.1DMA基本概念
6.2.2DMA1和DMA2请求详表
6.2.3DMA操作相关的库函数
6.2.4DMA使用示例
6.3备份域寄存器
6.3.1BKP的工作机制
6.3.2BKP操作相关的库函数
6.3.3BKP使用示例
6.4ADC模/数转换器
6.4.1ADC主要特征
6.4.2ADC功能介绍
6.4.3ADC操作相关的库函数
6.4.4ADC使用示例
6.5DAC数/模转换器
6.5.1DAC的主要特征
6.5.2DAC的功能介绍
6.5.3DAC操作相关的库函数
6.5.4DAC使用示例
6.6看门狗定时器
6.6.1看门狗应用介绍
6.6.2独立看门狗IWDG
6.6.3窗口看门狗WWDG
6.6.4看门狗操作相关的库函数
6.6.5看门狗使用示例
第7章STM32F103的通信接口及应用
7.1USART串行通信技术
7.1.1USART介绍
7.1.2USART主要特性
7.1.3USART功能概述
7.1.4USART操作相关的库函数
7.1.5USART使用示例
7.2SPI通信接口应用
7.2.1SPI简介
7.2.2SPI和I2S主要特征
7.2.3SPI功能介绍
7.2.4时钟信号的相位和极性
7.2.5SPI工作模式
7.2.6SPI操作相关的库函数
7.2.7SPI使用示例
7.3I2C通信接口应用
7.3.1I2C主要特点
7.3.2I2C功能描述
7.3.3I2C从模式
7.3.4SDA/SCL线控制
7.3.5SMBus介绍
7.3.6I2C操作相关的库函数
7.3.7I2C使用示例
7.4CAN总线通信接口应用
7.4.1bxCAN介绍
7.4.2bxCAN主要特点
7.4.3bxCAN总体描述
7.4.4bxCAN工作模式
7.4.5测试模式
7.4.6CAN操作相关的库函数
7.4.7CAN使用示例
7.5SDIO接口应用
7.5.1SD卡内部及引脚示意图
7.5.2SD卡及SPI模式引脚名称
7.5.3Micro SD引脚示意图
7.5.4SD模式
7.5.5SDIO操作相关的库函数
7.5.6SDIO使用示例
第8章μC/OS�并蛟赟TM32上的应用
8.1μC/OS�并虻姆⒄估�史
8.2μC/OS�并蛱逑到峁�
8.2.1任务管理
8.3.2时间管理
8.2.3内存管理
8.2.4通信同步
8.3μC/OS�并蚬丶�函数
8.4μC/OS�并蛑卸媳喑�
8.5μC/OS�并虻难�习方法
8.6μC/OS�并虻氖褂檬道�解析
第9章STM32中嵌入式应用信号处理算法
9.1线性滤波算法
9.1.1卡尔曼滤波算法应用
9.1.2卡尔曼滤波算法机理
9.1.3简单例子
9.2常用滤波算法
9.2.1程序判数滤波
9.2.2中值滤波
9.2.3滑动算术平均值滤波
9.2.4滑动加权平均值滤波
9.2.5防脉冲干扰平均值滤波
9.2.6低通数字滤波
9.3PID过程控制算法
9.3.1模拟控制系统
9.3.2微机过程控制系统
9.3.3数字控制系统
9.3.4模拟PID调节器
9.3.5数字PID控制器
9.3.6PID算法的程序流程
9.3.7标准PID算法的改进
9.3.8积分项的改进
9.3.9采样周期的选择
9.3.10数字PID控制的参数选择
9.3.11数字PID控制的工程实现
9.3.12偏差处理
9.4开关量滤波算法
第10章STM32开发工业级控制器应用
10.1工业级控制器的基本要求
10.2基于STM32F103设计的工业级控制器设计原理图
10.3硬件关键设计驱动解析
10.3.1光耦隔离输入检测电路
10.3.2基于达灵顿管的信号继电器驱动
10.3.3OLED显示驱动接口驱动
10.4Modbus通信协议
10.4.1Modbus协议概述
10.4.2Modbus协议的数据帧
10.4.3Modbus RTU通信结构模型
10.4.4Modbus RTU协议的实现
参考文献
前言/序言
嵌入式系统被描述为“以应用为中心、软件硬件可裁剪的、适应应用系统对功能、可靠性、成本、体积、功耗等严格综合性要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分组成。硬件是支撑,软件是灵魂,几乎所有的嵌入式产品中都需要嵌入式软件来提供灵活多样而且应用特制的功能。由于嵌入式系统应用广泛,嵌入式软件在整个软件产业中占据了重要地位,并受到世界各国的广泛关注,如今已成为信息产业中最为耀眼的“明星”之一。
从20世纪90年代开始,以计算机技术、通信技术和软件技术为核心的信息技术取得了更加迅猛的发展。计算机技术也开始进入一个被称为后PC技术的时代。
20多年来,嵌入式操作系统得到飞速的发展: 微处理器从8位到16位、32位甚至64位; 从支持单一品种的CPU芯片到支持多品种的; 从单一内核到除了内核外还提供其他功能模块,如文件系统、TCP/IP网络系统、窗口图形系统等,并形成包括嵌入式操作系统、中间平台软件在内的嵌入式软件体系。硬件技术的进步,推动了嵌入式系统软件向运行速度更快、支持功能更强、应用开发更便捷的方向不断发展。
各种装备与设备上嵌入式计算与系统的广泛应用大大地推动了行业的渗透性应用。各种各样的新型嵌入式系统设备在应用数量上已经远远超过通用计算机,任何一个普通人可能拥有从大到小的各种使用嵌入式技术的电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、智能家电、车载电子设备。而在工业和服务领域中,使用嵌入式技术的数字机床、智能工具、工业机器人、服务机器人也将逐渐改变了传统的工业和服务方式。
随着嵌入式系统应用的不断深入和产业化程度的不断提升,新的应用环境和产业化需求对嵌入式系统软件提出了更加严格的要求。在新需求的推动下,嵌入式操作系统内核不仅需要具有微型化、高实时性等基本特征,还将向高可信性、自适应性、构件组件化方向发展; 支撑开发环境将更加集成化、自动化、人性化; 系统软件对无线通信和能源管理的功能支持将日益重要。
本书主要内容来自于我们研发团队实践,是研发团队多年来开发嵌入式系统积累的经验汇集,内容更重要地契合于嵌入式开发应用的实践。本书以STM32F103MCU应用为主要内容,详细介绍了STM32F103系列MCU的各种功能及其扩展应用,并且列举了这些功能应用的实例。这些实例都是经过严格测试、可直接应用到实践中的例程应用。读者可以根据自身的需求和功能进行订制和修改。本书所列举的代码都是基于3.5版本最新的库函数驱动。
主要内容
本书采用由简到难的编写思路,首先介绍简单嵌入式发展趋势和概念,然后逐步到功能性开发,举例分析,最后加深难度,介绍到高级应用,从而使读者很容易进行理解和消化。第1~3章介绍了嵌入式系统的基本概念、常用芯片、工具和嵌入式系统的开发过程; 第4章介绍了配套学习板的原理图和设计思路; 第5~7章介绍了STM32的基本使用和各种外设的驱动以及开发应用,并列举了各种典型的应用实例; 第8章介绍了μC/OS�并蛟赟TM32上的应用情况; 第9章详细介绍了STM32嵌入式系统中可以使用的一些经典实用算法; 第10章从实用角度列举了支持MODBUS通信协议的通用控制器开发实例。
本书中列举的实例具有一定难度,适合具有一定基础的读者使用,初学者请参考所带光盘和开发板的应用代码。本书的编写强调实用性和易用性,希望能解决读者学习和开发过程中的一些实际困难和问题。
读者群定位
本书的读者需要具有一定的C语言、单片机以及硬件设计基础,适合从事嵌入式开发的技术人员、STM32的初学者以及大专院校电子类专业的学生,也适合从8位、16位跨越到32位MCU开发平台的开发人员。本书可以作为大专院校课程设计、毕业设计或者电子竞赛的培训和指导教材,也可作为本、专科的单片机和嵌入式系统相关的教材。
书中包含代码下载使用
本书中所包含的代码测试程序均可在WWW.SEIPHER.COM下载,下载内容包括: 开发板的各项功能测试代码、已经移植好的μC/OS Ⅱ的模板代码,读者可以直接下载和编译。编译环境为Keil MDK 5.0以上版本。
读者可以直接使用例程中的代码开发新的应用,并快速完成新产品的开发。
联系作者
读者在使用本书的过程中,如果遇到相关的技术问题,或者对DevStm 4.0开发板有兴趣,可以通过电子邮件和作者联系,作者将尽最大努力与广大读者一起解决开发过程中遇到的问题,共同进步。
致谢
本书在编写过程中,得到了作者所在公司同事和家人的理解和大力支持,清华大学出版社刘星编辑也做了大量的支持工作,感谢王长乐、赵伟萍分别审阅了本书的相关章节内容。
本书编写过程中参考了大量的文献资料,一些资料来源于互联网和开源社区,书后的参考文献未能一一列举,再次对原作者和开源社区表示诚挚的谢意。
由于作者水平有限,加之编写时间仓促,书中难免存在不足和疏漏之处,敬请读者批评指正。
作者
2016年6月
《嵌入式系统设计实战:从理论到实践的全面解析》 内容简介 在日新月异的科技浪潮中,嵌入式系统以其独特的优势,渗透到我们生活的方方面面。从智能手机、家用电器,到汽车电子、工业自动化,再到医疗设备、航空航天,嵌入式系统无处不在,构成了现代科技的基石。本书旨在为广大嵌入式系统爱好者、初学者以及希望提升实战技能的工程师提供一份系统、深入的学习指南。我们不仅仅停留在理论层面,更注重将理论知识与实际项目开发相结合,帮助读者构建扎实的嵌入式系统设计能力,并能独立完成具有挑战性的嵌入式项目。 本书共分为四个主要部分,循序渐进地带领读者探索嵌入式系统的奥秘。 第一部分:嵌入式系统基础理论与核心概念 本部分将为您打下坚实的理论基础,为后续的深入学习铺平道路。我们将从最基本的问题入手:什么是嵌入式系统?它与通用计算机系统有何区别?嵌入式系统的核心组成要素包括哪些? 嵌入式系统的定义与特点: 深入剖析嵌入式系统的定义、关键特性(如专用性、实时性、低功耗、可靠性、集成度高等)及其在不同领域的典型应用场景。通过对比通用计算机,强调嵌入式系统在资源受限环境下的设计哲学。 微处理器与微控制器(MCU)架构: 详细介绍嵌入式系统中至关重要的“大脑”——微处理器和微控制器。我们将讲解它们的基本工作原理,包括CPU的核心架构(如指令集、流水线、缓存)、内存体系(RAM, ROM, Flash)、I/O接口、中断控制器等。重点在于理解不同类型微处理器的优势与劣势,以及选择合适的微控制器在项目中的重要性。 嵌入式操作系统(RTOS)的原理与选型: 实时操作系统(RTOS)是许多复杂嵌入式系统不可或缺的核心。本章将深入浅出地讲解RTOS的基本概念,如任务管理(创建、调度、同步、通信)、中断处理、内存管理、定时器等。我们将分析不同RTOS(如FreeRTOS, Zephyr, RT-Thread等)的架构特点、优缺点,并指导读者如何根据项目需求进行合理的RTOS选型。 嵌入式软件开发流程与方法论: 剖析嵌入式软件从需求分析、系统设计、编码实现、调试测试到部署维护的完整生命周期。介绍敏捷开发、瀑布模型等开发方法论在嵌入式项目中的应用。重点强调版本控制(如Git)在团队协作中的重要性,以及代码规范和重构的实践意义。 硬件-软件接口(HSI)与驱动开发: 嵌入式系统设计的核心挑战之一在于硬件与软件的紧密集成。本章将详细讲解硬件抽象层(HAL)和驱动程序的概念,以及如何编写高效、可靠的硬件驱动程序,使软件能够有效地控制和访问硬件资源。我们将介绍常见的I/O接口(GPIO, UART, SPI, I2C)的工作原理及其驱动程序的编写方法。 第二部分:嵌入式硬件设计与电路分析 扎实的硬件知识是嵌入式系统开发的基础。本部分将带领您深入理解嵌入式系统的硬件组成,并学习基本的电路设计与分析能力。 嵌入式系统硬件构成详解: 详细介绍嵌入式系统常见的硬件模块,包括主控芯片(CPU/MCU)、存储器(RAM, Flash, EEPROM)、电源管理单元(LDO, DC-DC)、时钟电路、复位电路、通信接口模块(Wi-Fi, Bluetooth, Ethernet, CAN)、传感器接口、执行器接口等。我们将分析各模块的功能、工作原理及选型要点。 基本模拟电路与数字电路原理: 涵盖嵌入式系统设计中常用的基础模拟电路(如放大器、滤波器、稳压器)和数字电路(如逻辑门、触发器、计数器、寄存器)的原理。通过实际电路示例,帮助读者理解信号的产生、处理与传输。 PCB(Printed Circuit Board)设计基础: 介绍PCB的设计流程,包括原理图设计、PCB布局布线规则(如信号完整性、电源完整性、EMC/EMI考虑)、多层板设计、阻抗匹配等。指导读者如何使用常见的PCB设计软件(如Altium Designer, KiCad)进行初步的PCB设计。 常用嵌入式硬件接口技术: 深入讲解各种嵌入式硬件接口的工作原理、通信协议及实际应用。包括: GPIO(General Purpose Input/Output): 通用输入输出端口,最基础的数字信号控制。 UART(Universal Asynchronous Receiver/Transmitter): 通用异步收发传输器,常用于设备间串行通信。 SPI(Serial Peripheral Interface): 串行外设接口,高速同步串行通信,常用于连接传感器、存储器等。 I2C(Inter-Integrated Circuit): 集成电路之间总线,两线制半双工串行总线,常用于连接各种低速外设。 CAN(Controller Area Network): 控制器局域网,用于汽车电子和工业自动化领域的高可靠性总线。 USB(Universal Serial Bus): 通用串行总线,广泛应用于人机交互设备和数据传输。 ADC(Analog-to-Digital Converter)与DAC(Digital-to-Analog Converter): 模数转换器与数模转换器,实现模拟信号与数字信号的相互转换。 电源设计与管理: 探讨嵌入式系统中的电源需求、稳压方案(LDO, DC-DC)、低功耗设计策略以及电池管理系统(BMS)的基本原理。 第三部分:嵌入式软件开发与调试技术 本部分将聚焦于嵌入式软件的开发实践,从底层驱动编写到上层应用开发,再到高效的调试技巧,全方位提升您的软件开发能力。 C/C++语言在嵌入式开发中的应用: 深入讲解C/C++语言在嵌入式系统开发中的特性与技巧,包括指针、内存管理、位操作、宏定义、嵌入式汇编等。强调代码的效率、可读性和可移植性。 底层驱动程序开发: 学习如何编写直接与硬件交互的驱动程序。包括寄存器操作、中断服务程序(ISR)编写、DMA(Direct Memory Access)使用等。通过编写常见外设(如GPIO, UART, Timer)的驱动程序,掌握驱动开发的通用流程。 嵌入式操作系统(RTOS)应用开发: 学习如何在RTOS环境下进行应用程序开发。包括任务创建与管理、任务间通信(信号量、互斥锁、消息队列、事件标志组)、中断与任务的交互、内存管理等。通过实例演示,让读者熟练掌握RTOS的使用。 嵌入式Linux系统开发基础: 介绍嵌入式Linux的体系结构,包括引导加载程序(Bootloader)、内核(Kernel)、根文件系统(Root File System)和应用程序。讲解交叉编译环境的搭建、Linux设备驱动模型的理解、以及如何在嵌入式Linux上进行应用程序开发。 嵌入式系统调试技术: 调试是嵌入式开发中至关重要的一环。本章将详细介绍各种调试工具和技术,包括: 仿真器(Emulator)与调试器(Debugger): 如JTAG/SWD接口,配合OpenOCD, GDB等工具进行硬件调试。 串口打印(Printf Debugging): 最简单有效的调试方法。 逻辑分析仪与示波器: 用于分析硬件信号的时序和状态。 内存分析与性能优化: 查找内存泄漏、优化代码执行效率。 异常处理与崩溃分析: 如何定位和解决程序运行时遇到的异常。 第四部分:嵌入式项目实战与进阶 理论结合实践是学习嵌入式系统最有效的方式。本部分将通过一系列精心设计的实战项目,引导读者将所学知识融会贯通,并探索更高级的嵌入式开发领域。 经典嵌入式项目案例分析与实现: 智能家居传感器节点: 基于低功耗MCU,采集温湿度、光照等环境信息,并通过无线通信(如BLE)上传。 物联网(IoT)数据采集与传输: 实现一个能连接Wi-Fi的设备,将传感器数据上传到云平台。 嵌入式GUI应用开发: 利用嵌入式GUI库(如LVGL),在带显示屏的设备上开发用户界面。 电机控制系统: 实现步进电机或直流电机的精确控制。 嵌入式通信协议栈实现: 如MQTT客户端或TCP/IP通信示例。 嵌入式系统安全基础: 介绍嵌入式系统面临的安全威胁,如物理攻击、软件漏洞、通信窃听等,并探讨基础的安全防护措施,如固件加密、安全启动、访问控制等。 嵌入式系统性能优化与功耗管理: 深入研究如何提升嵌入式系统的运行效率和降低功耗。包括算法优化、代码重构、硬件选型、睡眠模式设计等。 嵌入式系统测试与质量保证: 讲解嵌入式系统测试的方法与策略,包括单元测试、集成测试、系统测试、压力测试以及自动化测试的实践。 未来嵌入式技术趋势展望: 探讨人工智能(AI)与嵌入式系统的结合、边缘计算、5G在嵌入式领域的应用、RISC-V架构的兴起等前沿技术。 目标读者 本书适合以下人群: 计算机、电子工程、自动化等相关专业的学生: 作为教材或参考书,系统学习嵌入式系统理论与实践。 嵌入式系统初学者: 从零开始,快速掌握嵌入式开发的基本技能。 希望提升嵌入式开发实战能力的工程师: 通过项目实践,解决实际工程问题。 对物联网、智能硬件、机器人等领域感兴趣的爱好者: 构建实现创意想法的坚实基础。 本书特色 理论与实践高度结合: 每一章都配有相应的代码示例、电路图或项目实现步骤,使读者能够边学边练。 由浅入深,循序渐进: 从基础概念到高级应用,逐步引导读者深入理解嵌入式系统。 内容全面,覆盖广泛: 涵盖了嵌入式系统设计的硬件、软件、操作系统、调试等多个关键方面。 强调动手能力: 鼓励读者通过实际操作,将理论知识转化为解决实际问题的能力。 贴近实际工程应用: 项目案例选择具有代表性,贴近当前嵌入式开发的热点与需求。 通过本书的学习,您将能够独立完成嵌入式系统的设计、开发、调试与优化工作,为您的技术生涯或个人项目打下坚实的基础。我们相信,掌握嵌入式系统开发技术,就是掌握了开启未来智能世界的一把钥匙。