编辑推荐
1、《ARM Cortex-M3嵌入式开发与实践——基于STM32F103》按照“认知—应用—提高”的思路,全面介绍STM32F103微控制器内部架构及其常用典型硬件电路。
2、针对片上外设,基于Keil MDK阐述寄存器和库函数两种类型工程程序设计方法。
3、基于嵌入式实时操作系统μC/OS-Ⅱ和库函数类型工程,探讨面向任务程序设计方法。
4、本书配套有教学课件(PPT)和源代码。
内容简介
本书基于ARM Cortex M3内核微控制器STM32F103和嵌入式实时操作系统μC/OS�并颍�详细讲述嵌入式系统的硬件设计与软件开发技术,主要内容包括嵌入式系统概述、STM32F103微控制器、STM32F103学习平台、LED灯控制与Keil MDK工程框架、按键与中断处理、定时器、串口通信、存储器管理、LCD屏与温/湿度传感器、μC/OS Ⅱ系统与移植、μC/OS Ⅱ任务管理、信号量与互斥信号量、消息邮箱与消息队列等。本书的特色在于理论与应用紧密结合,实例丰富,对于基于STM32F1系列微控制器及嵌入式实时操作系统μC/OS Ⅱ的教学和工程应用,都具有一定的指导和参考价值。
本书可作为普通高等院校物联网、电子工程、通信工程、自动化、智能仪器、计算机工程和嵌入式控制等相关专业的高年级本科生教材,也可作为嵌入式系统爱好者和工程开发技术人员的参考用书。
内页插图
目录
第1篇STM32F103硬件系统与Keil MDK工程
第1章嵌入式系统概述
1.1嵌入式系统范例
1.2嵌入式系统概念
1.2.1嵌入式系统与ARM的关系
1.2.2嵌入式系统与嵌入式操作系统的关系
1.2.3嵌入式系统研发特点
1.3ARM发展历程及应用领域
1.3.1ARM发展史及命名规则
1.3.2ARM微处理器系列
1.3.3ARM微处理器应用领域
1.4嵌入式操作系统
1.4.1Windows CE
1.4.2VxWorks
1.4.3嵌入式Linux
1.4.4Android系统
1.5μC/OS�并蛴毽藽/OS�并�
1.5.1μC/OS发展历程
1.5.2μC/OS�并蛱氐�
1.5.3μC/OS�并筇氐�
1.5.4μC/OS应用领域
1.6本章小结
习题
第2章STM32F103微控制器
2.1STM32F103概述
2.2STM32F103ZET6引脚定义
2.3STM32F103架构
2.4STM32F103存储器
2.5STM32F103片内外设
2.6STM32F103异常与中断
2.7本章小结
习题
第3章STM32F103学习平台
ARM Cortex�睲3嵌入式开发与实践——基于STM32F103
3.1STM32F103核心电路
3.2电源电路与按键电路
3.3LED与蜂鸣器驱动电路
3.4串口通信电路
3.5Flash与EEPROM电路
3.6温/湿度传感器电路
3.7LCD屏接口电路
3.8JTAG与复位电路
3.9SRAM电路
3.10本章小结
习题
第4章LED灯控制与Keil MDK工程框架
4.1STM32F103通用目的输入/输出口
4.1.1GPIO寄存器
4.1.2AFIO寄存器
4.2STM32F103库函数用法
4.3Keil MDK工程框架
4.4LED灯闪烁实例
4.4.1寄存器类型工程实例
4.4.2库函数类型工程实例
4.5本章小结
习题
第5章按键与中断处理
5.1NVIC中断工作原理
5.2GPIO外部输入中断
5.3用户按键中断实例
5.3.1寄存器类型工程实例
5.3.2库函数类型工程实例
5.4本章小结
习题
第6章定时器
6.1系统节拍定时器
6.1.1系统节拍定时器工作原理
6.1.2系统节拍定时器实例
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通用定时器寄存器类型实例
6.4.3通用定时器库函数类型实例
6.5本章小结
习题
第7章串口通信
7.1串口通信工作原理
7.2STM32F103串口
7.3串口通信寄存器类型实例
7.4串口通信库函数类型实例
7.5本章小结
习题
第8章存储器管理
8.1SRAM存储器
8.1.1访问SRAM存储器寄存器类型实例
8.1.2访问SRAM存储器库函数类型实例
8.2EEPROM存储器
8.2.1访问EEPROM寄存器类型实例
8.2.2访问EEPROM库函数类型实例
8.3Flash存储器
8.3.1STM32F103同步串行口
8.3.2W25Q128访问控制
8.3.3访问Flash存储器寄存器类型工程实例
8.3.4访问Flash存储器库函数类型工程实例
8.4本章小结
习题
第9章LCD屏与温/湿度传感器
9.1LCD屏显示原理
9.2温/湿度传感器
9.3LCD显示实例
9.3.1寄存器类型实例
9.3.2库函数类型实例
9.4本章小结
习题
第2篇嵌入式实时操作系统μC/OS�并�
第10章μC/OS�并蛳低秤胍浦�
10.1μC/OS�并蛳低骋浦�
10.2μC/OS�并蛳低辰峁褂肱渲�
10.3μC/OS�并蛳低橙挝�
10.3.1空闲任务
10.3.2统计任务
10.3.3定时器任务
10.4本章小结
习题
第11章μC/OS�并蛉挝窆芾�
11.1μC/OS�并蛴没�任务
11.2μC/OS�并蚨嗳挝窆こ淌道�
11.3统计任务实例
11.4系统定时器
11.5本章小结
习题
第12章信号量与互斥信号量
12.1μC/OS�并蛐藕帕�
12.2μC/OS�并蚧コ庑藕帕�
12.3信号量与互斥信号量实例
12.4本章小结
习题
第13章消息邮箱与消息队列
13.1μC/OS�并蛳�息邮箱
13.2μC/OS�并蛳�息队列
13.3消息邮箱与消息队列实例
13.4本章小结
习题
参考文献
精彩书摘
第5章
按键与中断处理
本章将介绍嵌套向量中断控制器NVIC的工作原理,阐述STM32F103ZET6微控制器外部输入中断的工作原理,然后,以用户按键为例,详细解释NVIC中断的寄存器类型和库函数类型的程序设计方法。
本章的学习目标:
�r 了解NVIC中断响应方法;
�r 熟悉GPIO中断响应方法;
�r 熟练应用寄存器或库函数进行GPIO中断程序设计。
5.1NVIC中断工作原理
嵌套向量中断控制器NVIC相关的中断管理工作主要有开放中断、关闭中断、设置中断请求标志、读中断请求标志、清除中断请求标志和配置中断优先级等。嵌套向量中断控制器NVIC的寄存器有ISER0、ISER1、ICER0、ICER1、ISPR0、ISPR1、ICPR0、ICPR1、IABR0、IABR1、IPR0~IPR14和STIR,如表5��1所示。
表5��1NVIC寄存器
序号
地址
寄存器
名称
描述
1
0xE000E100
ISER0
0xE000E104
ISER1中断开放寄存器
ISER0[0]~ISER0[31]、ISER1[0]~ISER1[27]依次对应中断号为0~59的中断,各位写0无效,写1开放中断2
0xE000E180
ICER0
0xE000E184
ICER1
中断关闭寄存器
ICER0[0]~ICER0[31]、ICER1[0]~ICER1[27]依次对应中断号为0~59的中断,各位写0无效,写1关闭中断3
0xE000E200
ISPR0
0xE000E204
ISPR1
中断设置请求状态寄存器
ISPR0[0]~ISPR0[31]、ISPR1[0]~ISPR1[27]依次对应中断号为0~59的中断,各位写0无效,写1请求中断
续表
序号
地址
寄存器
名称
描述
4
0xE000E280
ICPR0
0xE000E284
ICPR1
中断清除请求状态寄存器
ICPR0[0]~ICPR0[31]、ICPR1[0]~ICPR1[27]依次对应中断号为0~59的中断,各位写0无效,写1清中断标志
5
0xE000E300
IABR0
0xE000E304
IABR1
中断活跃位寄存器(只读)
IABR0[0]~IABR0[31]、IABR1[0]~IABR1[27]依次对应中断号为0~59的中断,各位读出1,相应中断活跃
6
0xE000E400~0xE000E438
IPR0~IPR14
中断优先级寄存器
共有16个优先级,优先级号为0~15,优先级号0表示优先级*高,优先级号15表示优先级*低
7
0xE000EF00
STIR
软件触发中断寄存器
第[8:0]位域有效,写入0~59中的某一中断号,则触发相应的中断
下面以ISER0和ISER1为例,介绍开放中断的方法。
根据表5��1,ISER0[0]~ISER0[31]对应着中断号为0~31的NVIC中断,而ISER1[0]~ISER1[27]则对应着中断号为32~59的NVIC中断。由表2��5可知,外部中断2的中断号为8,而USART2中断的中断号为38,开放这两个中断的语句依次为
ISER0= (1uL<<8);
ISER1 = (1uL<<6);
设中断号为IRQn,则这两个语句也可以写为如下统一的语句形式:
ISER0 = 1uL<< (IRQn & 0x1F);
ISER1 = 1uL<< (IRQn & 0x1F);
上述开放中断的方法被用在CMSIS库文件中。
在CMSIS库头文件core_cm3.h中定义了NVIC中断的相关操作,这里重点介绍开放中断、关闭中断、设置中断请求标志、读中断请求标志、清除中断请求标志、设置中断优先级和获取中断优先级的函数,如程序段5��1所示。
程序段5��1NVIC中断相关的CMSIS库函数(摘自core_cm3.h文件)
1typedef struct
2{
3__IO uint32_t ISER[8U]; // 偏移地址:0x000(可读/可写)中断设置使能寄存器
4uint32_t RESERVED0[24U];
5__IO uint32_t ICER[8U]; // 偏移地址:0x080(可读/可写)中断清除使能寄存器
6uint32_t RESERVED1[24U];
7__IO uint32_t ISPR[8U]; // 偏移地址:0x100(可读/可写)中断设置请求寄存器
8uint32_t RESERVED2[24U];
9__IO uint32_t ICPR[8U]; // 偏移地址:0x180(可读/可写)中断清除请求寄存器
10uint32_t RESERVED3[24U];
11__IO uint32_t IABR[8U]; // 偏移地址:0x200(可读/可写)中断活跃标志位寄存器
12uint32_t RESERVED4[56U];
13__IO uint8_t IP[240U]; // 偏移地址:0x300(可读/可写)中断优先级寄存器(8位)
14uint32_t RESERVED5[644U];
15__O uint32_t STIR; // 偏移地址:0xE00(只写)软件触发中断寄存器
16}NVIC_Type;
17
18#define SCS_BASE (0xE000E000UL)
19#define NVIC_BASE (SCS_BASE + 0x0100UL)
20#define NVIC ((NVIC_Type *)NVIC_BASE)
21
第1~16行自定义结构体类型NVIC_Type,各成员的位置与表5��1中各个寄存器的位置对应,再结合第18~20行可知,NVIC为指向首地址0xE000E100的结构体指针,这样(结合表5��1),NVIC��>ISER[0]指向的地址即为ISER0寄存器的地址,NVIC��>ISER[1]指向的地址即为ISER1寄存器的地址,依次类推,NVIC��>STIR指向的地址即为STIR寄存器的地址。
22__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)// 开中断
23{
24NVIC��>ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));
25}
26
第22~25行为开放NVIC中断函数NVIC_EnableIRQ,形参为IRQn_Type类型的变量,该自定义类型定义在stm32f10x.h文件中,如程序段5��2所示。第24行根据IRQn的值设置ISER[0]或ISER[1]相应的位,即开放IRQn对应的NVIC中断。
27__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)// 关中断
28{
29NVIC��>ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));
30}
31
第27~30行为关闭NVIC中断函数NVIC_DisableIRQ,形参为IRQn_Type类型的变量。第29行根据IRQn的值向ICER[0]或ICER[1]相应的位写入1,关闭IRQn对应的NVIC中断。
32__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)// 中断请求
33{
34NVIC��>ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));
……
前言/序言
自1971年*块单片机诞生至今,嵌入式系统的发展经历了初期阶段和蓬勃发展期,现已进入了成熟期。在嵌入式系统发展初期,各种EDA工具还不完善,芯片的制作工艺和成本颇高,嵌入式程序设计语言以汇编语言为主,该时期只有电子工程专业技术人员才能从事嵌入式系统设计与开发工作。到了20世纪80年代,随着MCS��51系列单片机的出现以及C51程序设计语言的成熟,单片机应用系统成为嵌入式系统的代名词,MCS��51单片机迅速在智能仪表和自动控制等相关领域得到普及。同时期,各种DSP芯片、FPGA芯片和SoC芯片也如雨后春笋般涌现出来,应用领域从*初的自动控制应用扩展到各种各样的智能应用系统。随后1997年,ARM公司推出ARM7微控制器,之后推出Cortex系列微控制器和微处理器,成为嵌入式系统设计的首选芯片,标志着嵌入式系统进入蓬勃发展期。
全球的半导体厂商在芯片制造上“百花齐放,百家争鸣”,是嵌入式系统蓬勃发展阶段的突出写照。这段时期,嵌入式系统工程师同时兼做硬件工程师和软件工程师,需要涉猎各种各样的芯片应用知识,并开发各具特色的应用程序。直到21世纪初,开源嵌入式实时操作系统出现,嵌入式系统工程师才真正分为嵌入式系统硬件工程师和嵌入式系统软件工程师,硬件工程师负责硬件电路板设计、芯片外设访问驱动函数开发和嵌入式实时操作系统移植等,软件工程师负责系统资源管理与调度、图形用户交互界面设计和应用程序设计等,这标志着嵌入式系统已经发展到成熟期,从几十个工程师到成百上千的工程师,通过细致分工协力合作进行同一项嵌入式系统研发。
本书内容分为两篇,第1篇主要面向硬件工程师和物联网与电子设计类本科生,第2篇偏向于硬件工程师,同时也兼顾软件工程师。本书由作者近几年来在江西财经大学软件与通信工程学院的“嵌入式系统应用”和“嵌入式系统原理”课程教学的讲义改编而成的,按章节顺序进行教学活动和课程实验。
第1篇包括9章,是全书的硬件基础和芯片级别程序设计部分。第1章介绍嵌入式系统的发展历程和应用领域;第2章介绍ARM Cortex�睲3内核微控制器芯片STM32F103的内部结构、引脚配置、存储器、片内外设、异常与NVIC中断等;第3章介绍ALIENTEK战舰STM32F1学习板的硬件原理,重点介绍本书中使用的电路模块,如STM32F103核心电路、电源电路与按键电路、LED与蜂鸣器电路模块、串口模块、Flash与EEPROM电路模块、温/湿度传感器模块、LCD屏模块和SRAM模块等,这部分内容为后面程序设计的硬件电路基础;第4章讨论STM32F103的GPIO访问方法以及LED灯控制技术,并完整地介绍基于Keil MDK创建工程的方法,后面的工程均基于该工程框架;第5章深入分析NVIC中断的工作原理,重点介绍GPIO口外部输入中断的处理方法,并给出按键响应实例;第6章阐述STM32F103内部通用定时器、看门狗定时器和系统节拍定时器的应用与实例,其中,系统节拍定时器主要用于为嵌入式实时操作系统提供时钟节拍(一般设为100Hz);第7章介绍串口通信,一般借助中断方式从上位机接收串口数据,通过函数调用方式向上位机发送串口数据;第8章介绍STM32F103访问Flash芯片W25Q128和EEPROM芯片24C02的方法;第9章介绍STM32F103驱动TFT LCD屏的方法,介绍LCD屏显示字符和汉字的方法,并阐述温/湿度传感器DHT11的应用方法,展示LCD屏显示环境温/湿度值的应用实例。
第2篇为嵌入式实时操作系统级别的程序设计部分,介绍嵌入式实时操作系统μC/OS�并蛟谖⒖刂破鱏TM32F103上的移植和工程设计方法,包括4章,依次介绍系统组成与移植文件、任务管理与工程框架、信号量与互斥信号量、消息邮箱与消息队列。这篇内容中没有对嵌入式实时操作系统μC/OS�并虻哪诓抗ぷ髟�理进行剖析,感兴趣的读者可参考文献[6]、[8]。
ARM Cortex�睲3嵌入式开发与实践——基于STM32F103
作为教材,需要体现知识的完整性和可扩展性。通过本书的教学活动,展示给学生和读者一个从事嵌入式系统
ARM Cortex-M3嵌入式开发与实践 基于STM32F103/电子设计与嵌入式开发实践丛书 下载 mobi epub pdf txt 电子书 格式
ARM Cortex-M3嵌入式开发与实践 基于STM32F103/电子设计与嵌入式开发实践丛书 下载 mobi pdf epub txt 电子书 格式 2024
ARM Cortex-M3嵌入式开发与实践 基于STM32F103/电子设计与嵌入式开发实践丛书 mobi epub pdf txt 电子书 格式下载 2024