描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302450177丛书名: 电子设计与嵌入式开发实践丛书
首先介绍简单嵌入式发展趋势和概念,然后逐步到功能性开发,举例分析,*后加深难度,介绍高级应用,从而使读者很容易理解和消化。全书共10章,第1~3章介绍了嵌入式系统的基本概念、常用芯片、工具和嵌入式系统的开发过程; 第4章介绍了配套学习板的原理图和设计思路; 第5~7章介绍了STM32的基本使用和各种外设的驱动以及开发应用,并列举了各种典型的应用实例; 第8章介绍了μc/OSⅡ在STM32上的应用情况; 第9章详细介绍了STM32嵌入式系统中可以使用的一些经典实用算法; 第10章从实用角度列举了支持MODBUS通信协议的通用控制器开发实例。
本书中列举的实例具有一定难度,适合具有一定嵌入式基础的读者使用,初学者请参考本书提供的共享资料和开发板的应用代码。本书的编写强调实用性和易用性,希望能解决读者学习和开发过程中的一些实际困难和问题。
目录
Contents
第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.7Thumb2指令集
第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Ⅱ在STM32上的应用
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协议的实现
参考文献
Foreword
前言
嵌入式系统被描述为“以应用为中心、软件硬件可裁剪的、适应应用系统对功能、可靠性、成本、体积、功耗等严格综合性要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分组成。硬件是支撑,软件是灵魂,几乎所有的嵌入式产品中都需要嵌入式软件来提供灵活多样而且应用特制的功能。由于嵌入式系统应用广泛,嵌入式软件在整个软件产业中占据了重要地位,并受到世界各国的广泛关注,如今已成为信息产业中为耀眼的“明星”之一。从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Ⅱ在STM32上的应用情况; 第9章详细介绍了STM32嵌入式系统中可以使用的一些经典实用算法; 第10章从实用角度列举了支持MODBUS通信协议的通用控制器开发实例。本书中列举的实例具有一定难度,适合具有一定基础的读者使用,初学者请参考所带光盘和开发板的应用代码。本书的编写强调实用性和易用性,希望能解决读者学习和开发过程中的一些实际困难和问题。
读者群定位本书的读者需要具有一定的C语言、单片机以及硬件设计基础,适合从事嵌入式开发的技术人员、STM32的初学者以及大专院校电子类专业的学生,也适合从8位、16位跨越到32位MCU开发平台的开发人员。本书可以作为大专院校课程设计、毕业设计或者电子竞赛的培训和指导教材,也可作为本、专科的单片机和嵌入式系统相关的教材。书中包含代码下载使用本书中所包含的代码测试程序均可在WWW.SEIPHER.COM下载,下载内容包括: 开发板的各项功能测试代码、已经移植好的μC/OS Ⅱ的模板代码,读者可以直接下载和编译。编译环境为Keil MDK 5.0以上版本。读者可以直接使用例程中的代码开发新的应用,并快速完成新产品的开发。联系作者读者在使用本书的过程中,如果遇到相关的技术问题,或者对DevStm 4.0开发板有兴趣,可以通过电子邮件和作者联系([email protected]),作者将尽努力与广大读者一起解决开发过程中遇到的问题,共同进步。致谢本书在编写过程中,得到了作者所在公司同事和家人的理解和大力支持,清华大学出版社刘星编辑也做了大量的支持工作,感谢王长乐、赵伟萍分别审阅了本书的相关章节内容。本书编写过程中参考了大量的文献资料,一些资料来源于互联网和开源社区,书后的参考文献未能一一列举,再次对原作者和开源社区表示诚挚的谢意。由于作者水平有限,加之编写时间仓促,书中难免存在不足和疏漏之处,敬请读者批评指正。
作者2016年6月
意法半导体(STMicroelectronics,ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGSTHOMSON Microelectronics将公司名称改为意法半导体有限公司。从成立之初至今,ST的增长速度超过了半导体工业的整体增长速度。自1999年起,ST始终是世界十大半导体公司之一。据的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居水平。例如,意法半导体是世界大专用模拟芯片和电源转换芯片制造商,世界大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列。意法半导体集团共有员工近50000名,拥有16个先进的研发机构、39个设计和应用中心、15家主要制造厂,并在36个国家或地区设有78个销售办事处。公司总部设在瑞士日内瓦,同时也是欧洲区以及新兴市场的总部; 公司的美国总部设在德克萨斯州达拉斯市的卡罗顿; 亚太区总部设在新加坡; 日本的业务则以东京为总部; 中国区总部设在上海。自1994年12月8日首次完成公开发行股票以来,意法半导体已经在纽约证券交易所(交易代码: STM)和泛欧巴黎证券交易所挂牌上市,1998年6月,又在意大利米兰证券交易所上市。意法半导体拥有近9亿股公开发行股票,其中约71.1%的股票是在各证券交易所公开交易的。另外有27.5%的股票由意法半导体控股II BV.有限公司持有,其股东为Finmeccanica与CDP组成的意大利Finmeccanica财团和Areva及法国电信组成的法国财团; 剩余1.4%的库藏股由意法半导体公司持有。STM32是基于ARM CortexM3内核的32位处理器,具有杰出的功耗控制以及众多的外设,重要的是其性价比高。而且STM32官方在国内的宣传也做得非常不错,并针对8位机市场推出了STM8。STM32F1系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体公司出品,其内核是CortexM3。该系列芯片按片内Flash的大小可分为三大类: 小容量(16KB和32KB)、中容量(64KB和128KB)、大容量(256KB、384KB和512KB)。芯片集成定时器、CAN、ADC、SPI、I2C、USB、UART等多种功能。3.1STM32F103系列MCU简介STM32F103xC、STM32F103xD和STM32F103xE增强型系列使用高性能的ARM CortexM3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达512KB的闪存和64KB的SRAM),丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含3个12位的ADC、4个通用16位定时器和2个PWM定时器,还包含标准和先进的通信接口: 多达2个I2C、3个SPI、2个I2S、1个SDIO、5个USART、1个USB和1个CAN。STM32F103xC、STM32F103xD和STM32F103xE增强型系列工作于-40℃~ 105℃的温度范围,供电电压2.0~3.6V,一系列的省电模式保证了低功耗应用的要求。完整的STM32F103xC、STM32F103xD和STM32F103xE增强型系列产品包括从64引脚至144引脚的五种不同封装形式,根据不同的封装形式,器件中的外设配置不尽相同。3.1.1MCU基本功能1. 内核 ARM 32位的CortexM3; 72MHz工作频率,在存储器的0等待周期访问时可达1.25DMIPS/MHz(DhrystONe2.1); 单周期乘法和硬件除法。2. 存储器 32~512KB的闪存程序存储器(STM32F103XXXX中的第二个X表示Flash容量,其中: “4”=16KB,“6”=32KB,“8”=64KB,B=128KB,C=256KB,D=384KB,E=512KB); 64KB的SRAM。3. 电源管理 2.0~3.6V供电和I/O引脚; 上电/断电复位(POR/PDR)、可编程电压监测器(PVD); 4~16MHz晶振振荡器; 内嵌经出厂调教的8MHz的RC振荡器; 内嵌带校准的40kHz的RC振荡器; 产生CPU时钟的PLL; 带校准的32kHz的RC振荡器。4. 低功耗 睡眠、停机和待机模式; Vbat为RTC和后备寄存器供电。5. 模/数转换器 2个12位模/数转换器,1μs转换时间(多达16个输入通道); 转换范围: 0~3.6V; 双采样和保持功能; 温度传感器。6. DMA 2个DMA控制器,共12个DMA通道: DMA1有7个通道,DMA2有5个通道; 支持的外设: 定时器、ADC、SPI、USB、I2C和UART; 多达112个快速I/O端口(仅Z系列有超过100个引脚); 26/37/51/80/112个I/O口,所有I/O口一起映像到16个外部中断; 几乎所有的端口均可容忍5V信号。7. 调试模式 串行单线调试(SWD)和JTAG接口; 多达8个定时器; 3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入; 1个16位带死区控制和紧急刹车、用于电机控制的PWM高级控制定时器; 2个看门狗定时器(独立的和窗口型的); 系统时间定时器: 24位自减型计数器。8. 多达9个通信接口 2个I2C接口(支持SMBus/PMBus); 5个USART接口(支持ISO7816接口、LIN、IrDA接口和调制解调控制); 2个SPI接口(18M位/秒); CAN接口(2.0B主动); USB 2.0全速接口。9. 计算单元CRC计算单元,96位的新批代码。10. 应用STM32F103R8T6是ST旗下的一款常用的增强型系列微控制器,适用于电力电子系统方面的应用、电机驱动、应用控制、医疗、手持设备、PC游戏外设、GPS平台、编程控制器(PLC)、变频器、扫描仪、打印机、警报系统、视频对讲、暖气通风、空调系统。3.1.2系统性能分析(1) 集成嵌入式Flash和SRAM存储器的ARM CortexM3内核。和8/16位设备相比,ARM CortexM3 32位RISC处理器提供了更高的代码效率。STM32F103xx微控制器带有一个嵌入式的ARM核,可以兼容所有的ARM工具和软件。(2) 嵌入式Flash存储器和RAM存储器: 内置多达512KB的嵌入式Flash,可用于存储程序和数据。多达64KB的嵌入式SRAM可以以CPU的时钟速度进行读/写。(3) 可变静态存储器(FSMC): FSMC嵌入在STM32F103xC、STM32F103xD、STM32F103xE中,带有4个片选,支持4种模式: Flash、RAM、PSRAM、NOR和NAND。3根FSMC中断线经过OR后连接到NVIC。没有读/写FIFO,除PCCARD之外,代码都是从外部存储器执行,不支持Boot,目标频率等于SYSCLK/2,所以当系统时钟是72MHz时,外部访问按照36MHz进行。(4) 嵌套矢量中断控制器(NVIC): 可以处理43个可屏蔽中断通道(不包括CortexM3的16根中断线),提供16个中断优先级。紧密耦合的NVIC实现了更低的中断处理延时,直接向内核传递中断入口向量表地址,紧密耦合的NVIC内核接口,允许中断提前处理,对后到的更高优先级的中断进行处理,支持尾链,自动保存处理器状态,中断入口在中断退出时自动恢复,不需要指令干预。(5) 外部中断/事件控制器(EXTI): 外部中断/事件控制器由19条用于产生中断/事件请求的边沿探测器线组成。每条线可以被单独配置用于选择触发事件(上升沿,下降沿,或者两者都可以),也可以被单独屏蔽。有一个挂起寄存器来维护中断请求的状态。当外部线上出现长度超过内部APB2时钟周期的脉冲时,EXTI能够探测到。多达112个GPIO连接到16根个外部中断线。(6) 时钟和启动: 在启动的时候还是要进行系统时钟选择,但复位的时候内部8MHz的晶振被选用作CPU时钟。可以选择一个外部的4~16MHz的时钟,并且会被监视来判定是否成功。在这期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要(例如碰到一个间接使用的晶振失败),PLL时钟的中断管理完全可用。多个预比较器可以用于配置AHB频率,包括高速APB(APB2)和低速APB(APB1),高速APB的频率为72MHz,低速APB的频率为36MHz。(7) Boot模式: 在启动的时候,Boot引脚被用来在3种Boot选项中选择一种: 从用户Flash导入,从系统存储器导入,从SRAM导入。Boot导入程序位于系统存储器,用于通过USART1重新对Flash存储器编程。(8) 电源供电方案: VDD,电压范围为2.0~3.6V,外部电源通过VDD引脚提供,用于I/O和内部调压器。VSSA和VDDA,电压范围为2.0~3.6V,外部模拟电压输入,用于ADC、复位模块、RC和PLL,在VDD范围之内(ADC被限制在2.4V),VSSA和VDDA必须相应连接到VSS和VDD。VBAT,电压范围为1.8~3.6V,当VDD无效时为RTC,外部32KHz晶振和备份寄存器供电(通过电源切换实现)。(9) 电源管理: 设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这条电路一直有效,用于确保从2V启动或者掉到2V的时候进行一些必要的操作。当VDD低于一个特定的下限VPOR/PDR时,不需要外部复位电路,设备也可以保持在复位模式。设备特有一个嵌入的可编程电压探测器(PVD),PVD用于检测VDD,并且和VPVD限值比较,当VDD低于VPVD或者VDD大于VPVD时会产生一个中断。中断服务程序可以产生一个警告信息或者将MCU置为一个安全状态。PVD由软件使能。(10) 电压调节: 调压器有3种运行模式: 主(MR),低功耗(LPR)和掉电。MR用在传统意义上的调节模式(运行模式),LPR用在停止模式,掉电用在待机模式: 调压器输出为高阻,核心电路掉电,包括零消耗(寄存器和SRAM的内容不会丢失)。(11) 低功耗模式: STM32F103xx支持3种低功耗模式,从而在低功耗、短启动时间和可用唤醒源之间达到一个好的平衡点。休眠模式: 只有CPU停止工作,所有外设继续运行,在中断/事件发生时唤醒CPU。停止模式: 允许以小的功耗来保持SRAM和寄存器的内容。1.8V区域的时钟都停止,PLL、HSI和HSE RC振荡器被禁能,调压器也被置为正常或者低功耗模式。设备可以通过外部中断线从停止模式唤醒。外部中断源可以是16个外部中断线之一、PVD输出或者TRC警告。待机模式: 追求少的功耗,内部调压器被关闭,这样1.8V区域断电,PLL、HSI和HSE RC振荡器也被关闭。在进入待机模式之后,除了备份寄存器和待机电路,SRAM和寄存器的内容也会丢失。当外部复位(NRST引脚)、IWDG复位、WKUP引脚出现上升沿或者TRC警告发生时,设备退出待机模式。进入停止模式或者待机模式时,TRC、IWDG和相关的时钟源不会停止。3.2低功耗版本STM32L系列除了上节中介绍的103系列MCU,意法半导体还推出了低功耗的32位芯片STM32L,可以广泛地应用在大多数的低功耗场合,具有非常明显的低功耗优势。意法半导体的EnergyLite超低功耗技术平台是STM32L取得业内领先的能效性能的关键。这个技术平台也被广泛用于意法半导体的8位微控制器STM8L系列产品。EnergyLite超低功耗技术平台基于意法半导体独有的130nm制造工艺,为实现超低的泄漏电流特性,意法半导体对该平台进行了深度优化。在工作和睡眠模式下,EnergyLite超低功耗技术平台可以限度提升能效。此外,该平台的内嵌闪存采用意法半导体独有的低功耗闪存技术。这个平台还集成了直接访存(DMA)支持功能,在应用系统运行过程中关闭闪存和CPU,外设仍然保持工作状态,从而可为开发人员节省大量的时间。除为突出的与制程有关的节能特色外,STM32L系列还提供了更多其他的功能,开发人员能够优化应用设计的功耗特性。通过六个超低功耗模式,STM32L系列产品能够在任何设定时间以的功耗完成任务。这些可用模式包括(在1.8V/25℃环境的初步数据):
10.4μA低功耗运行模式,32kHz运行频率。 6.1μA低功耗睡眠模式,一个计时器工作。 1.3μA停机模式: 实时时钟(RTC)运行,保存上下文,保留RAM内容。 0.5μA停机模式: 无实时时钟运行,保存上下文,保留RAM内容。 1.0μA待机模式: 实时时钟运行,保存后备寄存器。 270nA待机模式: 无实时时钟运行,保存后备寄存器。STM32L系列新增低功耗运行和低功耗睡眠两个低功耗模式,通过利用超低功耗的稳压器和振荡器,微控制器可大幅度降低在低频下的工作功耗。稳压器不依赖电源电压即可满足电流要求。STM32L还提供动态电压升降功能,这是一项成功应用多年的节能技术,可进一步降低芯片在中低频下运行时的内部工作电压。在正常运行模式下,闪存的电流消耗为230μA/MHz,STM32L的功耗/性能比为185μA/DMIPS。此外,STM32L电路的设计目的是以低电压实现高性能,有效延长电池供电设备的充电间隔。片上模拟功能的工作电源电压为1.8V。数字功能的工作电源电压为1.65V,在电池电压降低时,可以延长电池供电设备的工作时间。3.3STM32的开发工具目前常用的开发版本有Keil MDK和EWARM两种,也有基于开源的IDE环境,但是不常用,建议使用这两种IDE开发环境。1. Keil MDKKeil MDK,也称MDKARM、Realview MDK、IMDK、μVision4等。目前Keil MDK由三家国内代理商提供技术支持和相关服务。MDKARM软件为基于CortexM、CortexR4、ARM7、ARM9处理器设备提供了一个完整的开发环境。MDKARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。MDKARM有四个可用版本,分别是MDKLite、MDKBasic、MDKStandard、MDKProfessional。所有版本均提供一个完善的C/C 开发环境,其中MDKProfessional还包含大量的中间库。目前的Keil μVision IDE的版本号为5.1,在Keil的官网上可以下载,免费版只有5KB的编译容量。2. IAR EWARMEmbedded Workbench for ARM是IAR Systems公司为ARM微处理器开发的一个集成开发环境(下面简称IAR EWARM)。比较其他的ARM开发环境,IAR EWARM具有入门容易、使用方便和代码紧凑等特点。IAR Systems公司目前推出的版本是IAR Embedded Workbench for ARM version 4.30。这里提供的是32KB代码限制、但没有时间限制的Kickstart版。EWARM中包含一个全软件的模拟程序(simulator)。用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境,从中可以了解和评估IAR EWARM的功能和使用方法。3. 开发前准备工作对STM32F103系列MPU开发前,需要准备相应的软硬件。其中硬件主要包括STM32F103开发板(或用户目标板)、JLink下载仿真器等; 软件主要包括Keil μVision IDE开发平台。下面对各自的功能和特点作简要说明。(1) STM32F103开发板(或用户目标板)是开发目标对象。(2) JLink下载仿真器是程序下载的枢纽,它带有的标准20芯扁平电缆可将程序通过JTAG接口下载到处理器内部存储空间; 无须外部供电,用USB连接线与PC连接好后即可工作; 还具有下载速度快、功耗低的特点。(3) Keil μVision IDE是一个基于窗口的软件开发平台,它集成了强大而且现代化的编辑器、工程管理器和make工具,几乎集成了嵌入式系统开发所需的全部工具: C/C 编译器、宏汇编器、链接/定位器、HEX文件生成器等。该软件提供了两种工作模式: 编译和调试模式。在编译模式中,开发者可以创建工程、选择目标器件、新建文件、输入源代码、生成可执行文件; 在调试模式中,开发者可以利用其强大的集成调试器对应用程序进行调试,如设置断点、单步执行等,方便了程序错误的查找和修改。3.4STM32的固件库文件STM32的固件库封装了各种类型及模块的配置文件以及各功能模块的配置以及使用。类似于API,让你少接触底层,就可以写出程序,提高开发效率及降低了门槛。虽然固件库封装了底层的接口,但是作为硬件开发的软件工程师,还是要多看MCU的datasheet,只有熟悉了底层,才能写出更高效的程序。目前STM32的固件库的版本是V3.5,在STM的官网上可以直接下载。解压库文件,里面目录结构有: _htmresc: ST的logo,完全无用,不用理会。Libraries: 比较重要的文件,包含STM32的系统文件和大量头文件,也就是库文件。Project: 包含大量外设的例程和各个软件版本的评估版工程模板。KEIL对应的就是MDKARM文件下的工程模板。开发者也可以利用这个工程模板来修改,得到自己的工程模块,本书不用此法。Utilities: 评估版的相关文件。对于每一个固件库的函数可以在网络上下载V3.5固件库的说明书,详细查看。3.5STM32的启动文件在STM32中所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从里面的内容来看,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,多的有8个定时器。例如,如果开发者用的是STM32F103ZET6,而启动文件用的是STM32F10x.s,则只可以正常使用串口1~3的中断,而串口4和5的中断则无法正常使用。又例如,TIM1~4的中断可以正常使用,而5~8的,则无法使用。在固件库里出现了3个文件: startup_stm32f10x_ld.s、startup_stm32f10x_md.s、startup_stm32f10x_hd.s。其中,ld.s适用于小容量产品; md.s适用于中等容量产品; hd适用于大容量产品。这里的容量是指Flash的大小,判断方法如下: 小容量: Flash≤32KB; 中容量: 64KB≤Flash≤128KB; 大容量: 256KB≤Flash。在开发过程中,开发者一定要根据自己MCU的类型选择合适的启动文件,否则启动就会出现问题。
3.6JTAG简介1. JTAG接口JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线: TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。JTAG初是用来对芯片进行测试的,JTAG的基本原理是在器件内部定义一个TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP(InSystem Programmable,在线编程),对Flash等器件进行编程。JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程,再安装到板上,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快了工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。具有JTAG口的芯片都有如下JTAG引脚定义: TCK——测试时钟输入; TDI——测试数据输入,数据通过TDI输入JTAG口; TDO——测试数据输出,数据通过TDO从JTAG口输出; TMS——测试模式选择,用来设置JTAG口处于某种特定的测试模式; 可选引脚TRST——测试复位,输入引脚,低电平有效。含有JTAG口的芯片种类较多,如CPU、DSP、CPLD等。JTAG内部有一个状态机,称为TAP控制器。TAP控制器的状态机通过TCK和TMS进行状态的改变,实现数据和指令的输入。2. JTAG芯片的边界扫描寄存器JTAG标准定义了一个串行的移位寄存器。寄存器的每一个单元分配给IC芯片的相应引脚,每一个独立的单元称为BSC(BoundaryScan Cell)边界扫描单元。这个串联的BSC在IC内部构成JTAG回路,所有的BSR(BoundaryScan Register)边界扫描寄存器通过JTAG测试激活,平时这些引脚保持正常的IC功能。3. JTAG在线写Flash的硬件电路设计和与PC的连接方式以含JTAG接口的StrongARM SA1110为例,Flash为Intel 28F128J32 16MB容量。SA1110的JTAG的TCK、TDI、TMS、TDO分别接PC并口的2、3、4、11线上,通过程序将对JTAG口的控制指令和目标代码从PC的并口写入JTAG的BSR中。在设计PCB时,必须将SA1110的数据线、地址线及控制线与Flash的地线线、数据线和控制线相连。因SA1110的数据线、地址线及控制线的引脚上都有其相应的BSC,只要用JTAG指令将数据、地址及控制信号送到其BSC中,就可通过BSC对应的引脚将信号送给Flash,实现对Flash的操作。4. 通过使用TAP状态机的指令实现对Flash的操作通过TCK、TMS的设置,可将JTAG设置为接收指令或数据状态。JTAG常用指令如下。 SAMPLE/PRELOAD——用此指令采样BSC内容或将数据写入BSC单元; EXTEST——当执行此指令时,BSC的内容通过引脚送到其连接的相应芯片的引脚,就是通过这种指令实现在线写Flash的; BYPASS——此指令将一个一位寄存器置于BSC的移位回路中,即仅有一个一位寄存器处于TDI和TDO之间。在PCB电路设计好后,可用程序先将JTAG的控制指令通过TDI送入JTAG控制器的指令寄存器中。再通过TDI将要写Flash的地址、数据及控制线信号入BSR中,并将数据锁存到BSC中,用EXTEST指令通过BSC将程序写入Flash。
3.7JTAG调试STM32F103过程
JTAG调试使用的Keil版本为MDK 5.0版本,例如ARM单片机为STM32F103C8T6,设置方法如下。(1) 连接上JLink和STM32开发板及计算机,打开Keil软件,如图31所示,在新建工程后单击设置。
图31Keil MDK开发环境界面
(2) 工程选项设置界面如图32所示。
图32工程选项设置界面
(3) 如图33所示,选择Debug标签。使用如图33所示CM3 JLink方式单击Settings进入配置界面。
图33Debug设置界面
(4) 在Debug标签中选择工作模式,如图34所示。
(5) JTAG工作方式支持2MHz下载和仿真,如图35所示。
SWD方式可以使用值12MB。
图34JTAG工作方式选项
图35SW工作方式选项
(6) 设定完后再打开Flash Download标签设置器件Flash,如图36所示。
图36Flash Download界面
单击Add按钮添加器件,如图37所示,选择目前使用的MCU类型。
图37添加选择器件
(7) 设置完后再进入Utilities标签里选择CM3 JLink,如图38所示。
图38Utilities标签界面
完成设置后便能以JATG或SWD方式调试STM32芯片。
3.8SWD仿真模式1. SWD和传统调试方式的区别(1) SWD模式比JTAG
模式更加可靠。在大数据量的情况下,JTAG下载程序会失败,但是SWD发生的几率会小很多。只要仿真器支持,通常使用JTAG仿真模式的情况下都是可以直接使用SWD模式的,所以推荐读者使用这个模式。(2) 在刚好缺一个GPIO的时候,可以使用SWD仿真,这种模式支持更少的引脚。(3) 在板子的体积有限时推荐使用SWD模式,它需要的引脚少,当然需要的PCB空间也就相应减少。例如开发者可以选择一个很小的2.54间距的5芯端子做仿真接口,但是需要对仿真器接口做特殊处理。2. 市面上常用仿真器对SWD模式的支持情况 JLINK v6支持SWD仿真模式,速度较慢。 JLINK v7比较好地支持SWD仿真模式,速度有了明显的提高,速度是JLINK v6的6倍。 JLINK v8非常好地支持SWD仿真模式,速度可以到10Mbps。 ULINK 1不支持SWD模式。 盗版ULINK 2非常好地支持SWD模式,速度可以达到10Mbps。 正版ULINK 2非常好地支持SWD模式,速度可以达到10Mbps。3.9JTAG接口及仿真器接口定义值得注意的是,不同的IC公司会定义自家产品专属的JTAG接口来下载或调试程序。嵌入式系统中常用的20、14、10针 JTAG的信号排列如图39和图310所示。
图3920针JTAG引脚定义
图31014针及10针JTAG引脚定义
需要说明的是,上述JTAG接口的引脚名称是对IC而言的。例如TDI脚,表示该脚应该与IC上的TDI脚相连,而不是表示数据从该脚进入download cable。实际上10针的JTAG接口只需要接4根线,引脚4是自连回路,不需要连接,引脚1、2连接的都是1引脚,而引脚8、10连接的是GND,也可以不接。附转接板电路如图311所示。
图311多规格转接板示意图
3.10ISP下载器及常用工具ISP是在系统编程(InSystem Programming)的英文缩写。简单地说,可以不用插拔芯片,也不需要编程器,就可以在目标应用板(有单片机的电路板)上直接编程,作程序改动调试。与传统逻辑电路设计比较,在系统可编程技术的优点在于: (1) 实现了在系统编程的调试,缩短了产品上市时间,降低了生产成本。(2) 无须使用专门的编程器,已编程器件无须仓库保管,避免了复杂的制造流程,降低了现场升级成本。(3) 使用ISP器件,能够在已有硬件系统的基础上设计开发自己的系统,真正实现了硬件电路的“软件化”,将器件编程和调试集中到生产终电路板的测试阶段,使系统调试及现场升级变得容易而且便宜。
STM32的下载口就是串口1(不能为重映射的串口1),当BOOT0设为1,BOOT1设为0,上电复位或按复位键后,STM32就进入ISP状态。异常检查步骤: (1) 确认所用的串口线是交叉线,并且线是良好的; (2) 确认PC串口是能正常使用的; (3) 确认BOOT0、BOOT1的跳线位正确; (4) 如果上述检查后还不能用,请检查所用的串口电平转换芯片是不是MAX3232,芯片供电电压是否为3.3V,芯片各脚的电压是否正常。如果确认是MAX3232并使用3.3V供电,但是通信仍不正常,建议更换MAX3232。1. Flash Loader DemoFlash Loader Demo是ST官网提供的一个下载工具软件,下载速度快,可以直接从ST官网上下载,本书配套软件下载内容里面也包含该安装文件,可直接安装,安装后运行界面如图312所示。
图312Flash Loader Demo主界面
2. MCU ISP下载器MCU ISP是一款针对ST公司的STM32F系列单片机和NXP的LPC2xxx系列的ISP程序。该ISP下载器具有一系列优点,可与SSCOM串口调试软件配套,进行ISP盲调。MCU ISP也可以从本书配套软件中获取,其工作界面如图313所示。3. SSCOM串口调试工具SSCOM v4.2绿色版是一款专业的串口调试软件,能够支持110~256000bps波特率,设置数据位(5、6、7、8)、校验(odd,even,mark,space)、停止位(1、1.5、2),并发送任意的字符串。对于dtr、rts信号线也能自由控制输出状态。SSCOM串口调试工具的工作界面如图314所示。
图313MCU ISP下载界面
图314串口调试工具主界面
评论
还没有评论。