新書推薦:
《
可转债投资实战
》
售價:NT$
454.0
《
王氏之死(新版,史景迁成名作)
》
售價:NT$
250.0
《
敢为天下先:三年建成港科大
》
售價:NT$
352.0
《
直观的经营:哲学视野下的动态管理
》
售價:NT$
407.0
《
长高食谱 让孩子长高个的饮食方案 0-15周岁儿童调理脾胃食谱书籍宝宝辅食书 让孩子爱吃饭 6-9-12岁儿童营养健康食谱书大全 助力孩子身体棒胃口好长得高
》
售價:NT$
214.0
《
身体自愈力:解决内在病因的身体智慧指南
》
售價:NT$
449.0
《
非言语沟通经典入门:影响人际交往的重要力量(第7版)
》
售價:NT$
560.0
《
山西寺观艺术壁画精编卷
》
售價:NT$
7650.0
|
編輯推薦: |
? 知识全面 本着由易到难,以及将嵌入式系统理论和应用开发相互融合的原则,本书从嵌入式系统概念、软件开发工具、Cortex-M0 CPU结构、高级微控制器总线结构、Cortex-M0 指令集、汇编语言程序设计基础、C语言程序设计基础、C语言程序设计进阶、外设驱动和控制,以及操作系统等方面对ST公司的STM32G0系列单片机的原理和使用方法进行了全面系统的论述。
? 工具先进 采用ST公司的基于ARM Cortex-M0 的STM32G071单片机和CubeMX软件开发工具,以及ARM公司的Keil μVision软件开发工具。
? 内容权威 在编写本书的过程中,参考了ST公司大学计划提供的教学资源、ST公司官网上提供的教学资源以及ARM大学计划提供的教学资源。
? 实例丰富 书中提供了近100个设计实例,既有STM32G071基本知识点的设计实例,还有一些具有创新应用背景的设计实例。通过这些设计实例,帮助读者从原理和应用两方面真正地掌握ARM Cortex-M系列微控制器的通用开发流程。
? 软硬融合 以软件和硬件协同设计、协同仿真和协同调试为主线,将汇编语言和C语言与ARM嵌
|
內容簡介: |
《ARM Cortex-M0 嵌入式系统原理及应用——STM32G071架构、软件和硬件集成(微课视频版)》以意法半导体公司的基于ARM Cortex-M0 的STM32G071 MCU为硬件平台,以意法半导体公司的STM32CubeMX和ARM公司的Keil μVision 5(ARM版本)集成开发环境(以下简称Keil)为软件平台,以Cortex-M0 处理器核结构、高级微控制总线结构、Cortex-M0 指令集、汇编语言程序设计、C语言程序设计、低功耗控制、外设驱动与控制,以及操作系统为主线,由浅入深、由易到难系统介绍了基于STM32G071 MCU的32位嵌入式系统的开发流程和实现方法。 《ARM Cortex-M0 嵌入式系统原理及应用——STM32G071架构、软件和硬件集成(微课视频版)》侧重于对基于ARM Cortex-M0 MCU的32位嵌入式系统设计方法的讲解。在此基础上,通过典型设计实例说明将嵌入式系统设计方法应用于不同的应用场景的方法,使得所设计的嵌入式系统在满足应用场景的条件下实现成本、功耗和性能之间的**平衡。 《ARM Cortex-M0 嵌入式系统原理及应用——STM32G071架构、软件和硬件集成(微课视频版)》可作为大学本科和高等职业教育嵌入式系统相关课程的教材,也可作为意法半导体公司举办的各种嵌入式系统开发和设计竞赛的参考用书,对于从事基于意法半导体开发嵌入式系统应用的工程师来说,也是很好的工程参考用书。
|
目錄:
|
第1章嵌入式系统设计导论
1.1微控制器和嵌入式系统基本概念
1.1.1微控制器的定义
1.1.2微控制器架构
1.1.3微控制器和微处理器的差异
1.1.4微控制器的主要应用场景
1.1.5嵌入式系统基本概念
1.2STM32 CortexM系列MCU分类和性能
1.2.1CortexM系列处理器IP核
1.2.2STM32 CortexM系列MCU产品
1.2.3STM32G0系列MCU的结构和功能
第2章软件工具下载、安装和应用
2.1STM32CubeMX工具的下载和安装
2.1.1STM32CubeMX工具的下载
2.1.2STM32CubeMX工具的安装
2.1.3STM32G0系列MCU支持包的安装
2.2Keil μVision(ARM版本)工具的下载、安装和授权
2.2.1Keil μVision内嵌编译工具链架构
2.2.2Keil μVision(ARM版本)工具的下载和安装
2.2.3Keil μVision(ARM版本)工具的授权
2.3设计实例: LED的驱动和控制
2.3.1生成简单的工程
2.3.2添加设计代码
2.3.3编译和下载设计
第3章CortexM0 处理器结构
3.1CortexM0 处理器核和核心外设
3.1.1CortexM0 处理器核
3.1.2系统级接口
3.1.3可配置的调试
3.1.4核心外设
3.2CortexM0 处理器的寄存器
3.2.1通用寄存器
3.2.2堆栈指针
3.2.3程序计数器
3.2.4链接寄存器
3.2.5程序状态寄存器
3.2.6可中断重启指令
3.2.7异常屏蔽寄存器
3.2.8优先级屏蔽寄存器
3.2.9控制寄存器
3.3CortexM0 存储器空间结构
3.3.1存储空间映射架构
3.3.2代码区域地址映射
3.3.3SRAM区域地址映射
3.3.4外设区域地址映射
3.3.5PPB地址空间映射
3.3.6SCS地址空间映射
3.3.7系统控制和ID寄存器
3.4CortexM0 的端及分配
3.5CortexM0 处理器异常及处理
3.5.1异常所处的状态
3.5.2异常类型
3.5.3异常优先级
3.5.4向量表
3.5.5异常的进入和返回
3.5.6NVIC中断寄存器集
3.5.7电平和脉冲中断
3.6CortexM0 存储器保护单元
3.6.1MPU寄存器
3.6.2MPU访问权限属性
3.6.3更新MPU区域
3.6.4子区域及用法
3.6.5MPU设计技巧和提示
第4章高级微控制器总线结构
4.1ARM AMBA系统总线
4.2AMBA APB规范
4.2.1AMBA APB写传输
4.2.2AMBA APB读传输
4.2.3AMBA APB错误响应
4.2.4AMBA APB操作状态
4.2.5AMBA3 APB信号
4.3AMBA AHB规范
4.3.1AMBA AHB结构
4.3.2AMBA AHB操作
4.3.3AMBA AHB传输类型
4.3.4AMBA AHB猝发操作
4.3.5AMBA AHB传输控制信号
4.3.6AMBA AHB地址译码
4.3.7AMBA AHB从设备传输响应
4.3.8AMBA AHB数据总线
4.3.9AMBA AHB传输仲裁
4.3.10AMBA AHB分割传输
4.3.11AMBA AHB复位
4.3.12AMBA AHB总线数据宽度
4.3.13AMBA AHB接口设备
第5章CortexM0 处理器指令集
5.1Thumb指令集
5.2Keil MDK汇编语言指令格式要点
5.2.1汇编语言源代码中的文字
5.2.2汇编语言源代码行的语法
5.2.3汇编语言指令后缀的含义
5.3寄存器说明符的限制规则
5.3.1使用0b1111作为寄存器说明符的规则
5.3.2使用0b1101作为寄存器说明符的规则
5.4寄存器传输指令
5.5存储器加载和保存指令
5.5.1存储器加载指令
5.5.2存储器保存指令
5.6多数据加载和保存指令
5.6.1多数据加载指令
5.6.2多数据保存指令
5.7堆栈访问指令
5.8算术运算指令
5.8.1加法指令
5.8.2减法指令
5.8.3乘法指令
5.8.4比较指令
5.9逻辑操作指令
5.10移位操作指令
5.10.1右移指令
5.10.2左移指令
5.11反序操作指令
5.12扩展操作指令
5.13程序流控制指令
5.14存储器屏障指令
5.15异常相关指令
5.16休眠相关指令
5.17其他指令
第6章CortexM0 汇编语言编程基础
6.1汇编语言程序规范、架构和约束
6.1.1统一汇编语言规范
6.1.2ARM汇编语言模块架构
6.1.3标识符的命名规则
6.1.4调用子程序的寄存器使用规则
6.2表达式和操作符
6.2.1变量
6.2.2常量
6.2.3汇编时替换变量
6.2.4标号
6.2.5字符串表达式
6.2.6一元运算符
6.2.7二元运算符
6.2.8运算符的优先级
6.3常用汇编器命令
6.4STM32G0的向量表格式
6.5配置堆和堆栈
6.6设计实例一: 汇编语言程序的分析和调试
6.6.1冒泡排序的基本思想
6.6.2冒泡排序算法的设计实现
6.6.3冒泡排序算法的调试
6.7设计实例二: GPIO的驱动和控制
6.7.1STM32G071的GPIO原理
6.7.2所用寄存器的地址和功能
6.7.3GPIO驱动和控制的实现
6.8设计实例三: 中断的控制和实现
6.8.1扩展中断和事件控制器原理
6.8.2所用寄存器的地址和功能
6.8.3向量表信息
6.8.4应用程序的设计
6.8.5程序代码的调试
第7章CortexM0 C语言编程基础
7.1ARM C/C 编译器选项
7.1.1ARM C编译器的优化级别
7.1.2ARM Compiler 5的参数设置选项
7.2常量和变量
7.2.1常量
7.2.2变量
7.3数据类型
7.3.1Volatile关键字
7.3.2整数类型变量的声明和表示
7.3.3字符类型变量的声明和表示
7.3.4浮点类型变量的声明和表示
7.3.5复数类型变量的声明和表示
7.3.6布尔类型变量的声明和表示
7.3.7自定义数据类型的声明和表示
7.3.8变量的存储类型
7.3.9编译器指定的变量属性
7.4运算符
7.4.1赋值运算符
7.4.2算术运算符
7.4.3递增和递减运算符
7.4.4关系运算符
7.4.5逻辑运算符
7.4.6位运算符
7.4.7复合赋值运算符
7.4.8逗号运算符
7.4.9条件运算符
7.4.10强制类型转换符
7.4.11sizeof运算符
7.5描述语句
7.5.1输入和输出语句
7.5.2输入和输出重定向
7.5.3表达式语句
7.5.4条件语句
7.5.5开关语句
7.5.6循环语句
7.5.7返回语句
7.6数组
7.6.1一维数组的表示方法
7.6.2多维数组的表示方法
7.6.3索引数组元素的方法
7.6.4动态输入数组元素的方法
7.6.5矩阵运算算法的实现
7.7指针
7.7.1指针的概念
7.7.2指向指针的指针
7.7.3指针变量输入
7.7.4指针限定符restrict
7.8函数
7.8.1函数声明
7.8.2函数调用
7.8.3内联函数声明和调用
7.8.4递归函数的调用
7.8.5编译器指定的函数属性
7.8.6数组类型传递参数
7.8.7指针类型传递参数
7.8.8指针函数
7.8.9函数指针
7.9预编译指令
7.9.1宏定义
7.9.2文件包含
7.9.3条件编译
7.9.4编译指示
7.9.5其他预编译命令
7.10复杂数据结构
7.10.1结构
7.10.2联合
7.10.3枚举
7.11ARM C microlib库
7.11.1概述
7.11.2microlib和默认C库之间的区别
7.12C语言设计实例一: 1602字符型LCD的驱动
7.12.11602字符型LCD的原理
7.12.21602字符型LCD的处理流程
7.12.31602字符型LCD和开发板的硬件连接
7.12.4程序代码的设计
7.13C语言设计实例二: 中断控制与1602字符型LCD的交互
7.13.1程序代码的设计
7.13.2C语言中断程序的分析
第8章CortexM0 C语言编程进阶
8.1内联汇编的格式和用法
8.2CMSIS软件架构
8.2.1引入CMSIS的必要性
8.2.2CMSIS的架构
8.2.3CMSIS的优势
8.2.4CMSIS的编程规则
8.2.5CMSIS软件包
8.2.6使用CMSIS访问不同资源
8.3设计实例一: 内联汇编的设计与实现
8.3.1创建设计工程
8.3.2添加新的设计文件
8.3.3设计分析
8.4设计实例二: 软件驱动的设计与实现
8.4.1创建HAL的设计实例
8.4.2创建LL的设计实例
第9章电源、时钟和复位原理及应用
9.1电源系统原理及功能
9.1.1电源系统框架
9.1.2电源监控
9.1.3低功耗模式
9.2RCC中的时钟管理功能
9.2.1RCC中的时钟源
9.2.2RCC中的时钟树结构
9.3RCC中的复位管理功能
9.3.1电源复位
9.3.2系统复位
9.3.3RTC域复位
9.4低功耗设计实例一: 从停止模式唤醒MCU的实现
9.4.1设计策略和实现目标
9.4.2程序设计和实现
9.5低功耗设计实例二: 定时器唤醒功耗分析
9.6低功耗设计实例三: 运行模式和低功耗模式状态的显示
9.6.1第一种设计实现方法
9.6.2第二种设计实现方法
第10章看门狗原理及应用
10.1独立看门狗原理和功能
10.1.1IWDG的结构
10.1.2IWDG的工作原理
10.1.3IWDG时钟基准和超时的设置
10.2独立看门狗设计实例: 实现与分析
10.2.1生成工程框架
10.2.2添加设计代码
10.2.3设计下载和分析
第11章定时器的原理及应用
11.1脉冲宽度调制的原理
11.2直流风扇的驱动原理
11.2.1直流风扇的规范和连线
11.2.2PWM速度控制功能
11.2.3脉冲传感器(转速输出类型)
11.3通用定时器的结构和主要功能
11.3.1时基单元
11.3.2计数器模式
11.3.3时钟选择
11.3.4输入捕获模式
11.3.5PWM模式
11.3.6单脉冲模式
11.4直流风扇驱动和测速的设计与实现
11.4.1系统设计策略
11.4.2系统硬件连接
11.4.3应用程序的设计
第12章异步和同步串行接口的原理及应用
12.1低功耗通用异步收发器的原理
12.1.1模块结构
12.1.2接口信号
12.1.3数据格式
12.1.4FIFO模式
12.1.5单线半双工模式
12.1.6发送器原理
12.1.7接收器原理
12.1.8波特率发生器
12.1.9唤醒和中断事件
12.2设计实例: 基于LPUART和红外接口的串行通信的实现
12.2.1红外串行通信设计思路
12.2.2串口的通信参数配置规则
12.2.3红外发射和接收电路的设计
12.2.4红外接口的原理
12.2.5信号的编码与解码
12.2.6红外通信系统的抗干扰设计
12.2.7发送端应用程序的设计与实现
12.2.8接收端应用程序的设计与实现
第13章人机交互游戏的设计与实现
13.1彩色触摸屏模块的信号定义
13.2STM32G071 MCU对彩屏的访问控制
13.2.1STM32G071 MCU提供给彩屏的写控制信号
13.2.2STM32G071 MCU提供给触摸屏的读控制信号
13.2.3ILI9341读写命令/数据格式
13.3彩屏基本绘图流程
13.4贪吃蛇游戏的设计与实现
13.4.1设计前需要考虑的问题
13.4.2屏幕显示区域的划分
13.4.3图形显示模式的设计
13.4.4字符显示模式的设计
13.4.5外部按键的连接和功能
13.4.6游戏逻辑设计的关键问题
13.4.7寻径算法分析
13.4.8设计优化
|
內容試閱:
|
该教材的编写背景说来也是一段趣事。在2019年,我联系了意法半导体公司(以下简称ST)的丁晓磊女士,当时她也是刚在这个职位上任不久,正好我知道ST和中国有“产学合作、协同育人”项目,在该项目的支持下,最初规划是要基于STM32F4平台编写一本能满足嵌入式系统课程教学的教材,后来因为疫情拖延了一段时间,后来正好又赶上ST新发布了基于ARM CortexM0 处理器核的STM32G0系列MCU。由于该MCU内嵌的CortexM0 处理器核结构简单,外设资源又非常丰富,因此非常适合作为嵌入式系统课程的教学平台,因此和ST负责大学计划的丁晓磊约定,先以STM32 G0系列MCU为平台编写适合嵌入式系统课程教学的教材,待该教材编写完成后,再以STM32F4平台为基础编写适合高阶嵌入式系统应用课程的教材,这样就可以满足不同学校和学生的教学和学习需要。因此,在这本教材出版不久之后,读者会看到以STM32F4为平台的侧重于复杂嵌入式系统应用的教材出版。
ST大学计划对这本教材寄予厚望,除了通过产学合作项目支持外,还为教材的编写赠送了ST官方的开发板作为本书配套的硬件教学平台,并提供了ST公司STM32G0 MCU的培训资源,目的就是能够让作者编写一本真正能用于嵌入式系统课程教学的高质量教材。
既然要编写这本教材,就需要进行充分的前期规划,这样才能不负众望,把这本教材编写好。教材前期的规划应该说比编写教材本身更加耗费精力,这是因为ARM CortexM处理器核本身就比较封闭,而且基于ARM CortexM处理器的嵌入式系统涉及大量的知识点,因此如何组织教材的知识点成为教材前期规划的一个重要的任务。因此,在这里作者将编写教材的思路与老师和同学分享,以帮助他们更好地理解本书的知识脉络,以及教学和学习方法。
(1) 嵌入式系统无论是基于8051、ARM CortexM还是基于其他处理器架构,系统学习的思路都是一致的,从处理器的结构、指令集、汇编语言程序设计、C语言程序设计、外设驱动控制到最终的操作系统,这就是系统学习任何嵌入式系统的一条主线。
对于在讲授嵌入式系统时是不是应该还给学生讲授汇编语言的问题,在这一点上无任何争论。因为到目前为止,汇编语言仍然在嵌入式系统设计中有着不可替代的作用。这是因为:
① 汇编语言是使学生掌握处理器架构和指令集的唯一途径,通过汇编语言和调试器工具可以掌握处理器架构和指令集的特点。这对于学生能真正学懂学通嵌入式系统课程至关重要,当学生掌握这些底层知识后,不管设计什么场景的嵌入式应用,这对一个处于年轻且精力旺盛的学生来说绝对是一件比较容易的事情。
② 汇编语言也是帮助学生建立C语言和底层机器之间的桥梁。这样,学生在学习嵌入式系统的C语言知识时,不是单纯的背语法,而是能够建立C语言和嵌入式硬件底层之间的映射关系,比如不同数据类型在不同硬件上的表示方法、函数的调用机制以及指针的本质含义等。
③ 由于C语言无法完整描述底层硬件的一些操作,因此在设计中,有时候就需要在C语言中嵌入汇编语言进行实现。如果读者有机会看到复杂的Ubuntu操作系统的启动引导代码时,就会发现这些代码都是用汇编语言而不是C语言编写的,因此如果不会汇编语言,你根本就看不懂这些代码。
但是,作者建议在通过C语言让学生能够掌握底层硬件知识后,就可以使用C语言实现不同应用场景的设计需求。这是因为,让学生用汇编语言编写复杂场景的应用也是不现实的。
(2) 正确处理ST图形编程工具以及Keil集成开发环境在嵌入式系统课程教学中的作用。ST公司提供的STM32CubeMX是帮助开发者进行快速嵌入式开发的辅助的图像化开发环境,背后会生成大量复杂的设计代码。因此,在课程教学和学生的学习时,仍然建议先在Keil集成开发环境下,通过系统编写代码的训练以及复杂调试代码的训练过程后,再使用STM32CubeMX工具进行复杂应用的开发,使得学生能够知其然,并知其所以然。这样,学生就能通过嵌入式课程的学习,掌握嵌入式系统开发和调试的通用方法和规则。
(3) 在作者和很多学校老师的交流中,越来越多的学校开始尝试将C语言和嵌入式系统课程进行融合,并取得了很好的效果,并且减轻了学生的学担,提高了课程的学习质量。这是因为借助于嵌入式系统硬件平台和软件开发环境,学生能真正地理解C语言在嵌入式开发中的重要作用,并能在这个学习过程中,将C语言和嵌入式硬件进行系统化深度融合。
(4) 考虑教材的成本和教师的授课课时等因素,教材仅对必要的基本外设的原理和使用方法进行了详细的说明,对于更复杂的外设,如DMA、SPI、I2C、ADC和DAC等内容作者将后续再编写图书呈现这些高级应用,这样既照顾了教学要求也能兼顾社会上从事基于STM32嵌入式系统开发的专业人士的需求。
(5) 本书将提供嵌入式操作系统(RtThread)在STM32G0 MCU的使用方法和设计案例,这部分应该作为本书的第14章内容,同样考虑教材的成本问题,将第14章内容作为电子版赠送给购买该教材的读者。另外,在教学课件(PPT)中也补充了大量的资料供读者学习。
配 套 资 源
工程文件、教学课件(PPT)、教学大纲等,扫描下方二维码或者到清华大学出版社官方网站本书页面下载。
开发板原理图、嵌入式操作系统(RtThread)在STM32G0 MCU的使用方法和设计案例以及一些其他补充资料,也可在配套资源二维码中获取。
配套资源
微课视频(600分钟,70集),扫描正文中各章节相应位置的二维码观看。
在本书的编写过程中,得到了ST公司大学计划经理丁晓磊女士的大力支持和帮助,在这里向她表示衷心的感谢。在编写本书的过程中,李天凌设计并验证了书中大型的复杂应用案例,这些应用案例设计和实现得非常巧妙,对读者学习STM32G0 MCU有非常好的借鉴作用。此外,郑阳扬参与编写了第10章的内容,罗显志参与编写了第11章的内容,在此向他们的辛勤工作也表示衷心的感谢。
编者
2022年3月于北京
|
|