武汉理工大学
毕业设计(论文)
基于STM32的温度测量系统
学院(系): 信息工程学院
专业班级: 学生姓名: 指导老师:
Word完美格式
可编辑版
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。
作者签名:
年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于1、保密囗,在 年解密后适用本授权书
2、不保密囗 。
(请在以上相应方框内打“√”)
作者签名: 年 月 日
导师签名: 年 月 日
Word完美格式
可编辑版
目 录
摘 要 .............................................................................................................................................. I Abstract .......................................................................................................................................... II 1 绪论 ............................................................................................................................................. 1 2 系统分析 ..................................................................................................................................... 3
2.1 STM32芯片 ...................................................................................................................... 3 2.2 DS18B20 ........................................................................................................................... 5 2.3 TFTLCD ............................................................................................................................ 6 2.4 ATK-HC05蓝牙串口 ....................................................................................................... 7 3 硬件设计 ..................................................................................................................................... 8
3.1 MCU .................................................................................................................................. 8 3.2 JTAG设计 ........................................................................................................................ 9 3.3 TFTLCD电路设计 ........................................................................................................... 9 4 软件设计 ................................................................................................................................... 10
4.1 系统初始化 .................................................................................................................... 10
4.1.1 时钟的初始化 ..................................................................................................... 10 4.1.2 I/O初始化 ............................................................................................................ 11 4.1.3 串口初始化 ......................................................................................................... 13 4.1.4 DMA初始化 ........................................................................................................ 16 4.1.5 中断初始化 ......................................................................................................... 17 4.2 模块功能设计 ................................................................................................................ 19
4.2.1 DS18B20温度模块 ............................................................................................. 19 4.2.2 TFTLCD模块设计 .............................................................................................. 21 4.2.3 ATK-HC05蓝牙模块 .......................................................................................... 24
5 结果与总结 ............................................................................................................................... 26 参考文献 ....................................................................................................................................... 31 致谢 ............................................................................................................................................... 32
Word完美格式
可编辑版
摘 要
温度是日常生活和农业生产中的一个重要参数,传统的温度计有反应缓慢,测量精度不高的和读数不方便等缺点,此外,通常需要人工去观测温度,比较繁琐,因而采用电子技术的温度测量就显得很有意义了。
随着电子技术的发展,出现各种基于芯片的温度测量系统。本文设计了一个基于STM32的温度测量与无线传送的系统,温度采集使用数字化温度传感器DS18B20,无线传输使用ATK-HC05蓝牙模块。
STM32的内核基于cortex-m3,该内核拥有意法半导体独有的130nm专用低泄漏电流制造工艺和优化的节能架构,处于行业领先的节能性能,其高性能、低功耗、低成本的优势正符合本次设计的要求。温度芯片DS18B20采用单总线协议,仅占一个I/O口就能将环境温度转化成数字信号,具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点。无线的传输采用蓝牙技术,成本低,兼容的设备较多,可以降低传统工程的工程量,同时可以节省大量由排线、线路维修、检测上的一些不必要的障碍和消耗,同时,在实时运行阶段也可以明显体现它的便携性,高效性和节能性。
关键词:STM32;蓝牙;DS18B20;温度;TFTLCD
Word完美格式
可编辑版
Abstract
Temperature is an important parameter in the daily life and agricultural production, the traditional thermometer has slow response and reading inconvenient shortcomings, the measurement accuracy is not high , in addition, usually requiring labor to observe the temperature, more cumbersome, and thus the temperature of the use of electronic technology it makes sense to measure it.
With the development of electronic technology, the emergence of various chip-based temperature measurement system. This paper presents an STM32-based temperature measurement and wireless transmission systems, the temperature acquisition using digital temperature sensor DS18B20, wireless transmission using ATK-HC05 Bluetooth module.
The STM32 kernel is based on cortex-m3, the kernel has a unique 130nm STMicroelectronics special low leakage current manufacturing processes and energy optimized architecture, industry-leading energy-saving performance, its high-performance, low-power, low-cost advantage is comply with the requirements of this design. DS18B20 temperature chip single bus protocol, only one I / O port will be able to ambient temperature into digital signals, with miniaturization, low power consumption, high performance, anti-interference ability, easy with microprocessors and other advantages. Wireless transmission using Bluetooth technology, low cost, more compatible devices, you can reduce the amount of traditional engineering projects, and can save a lot by a cable, line maintenance, testing on some of the unnecessary barriers and consumption, while, in real-time operational phase can also be evident in its portability, efficiency, and energy efficiency.
Keywords: STM32;Bluetooth; DS18B20; temperature;TFTLCD
Word完美格式
可编辑版
1 绪论
随着现代工业的不断发展,生产技术的不断进步,对于产品的精度要求也不断提高,而温度是人们生产生活中十分关注的参数,对温度的测量以及监控就显得十分重要。在某些行业中对温度的要求较高,由于工作环境温度的偏差进而引发事故。如化工业中做酶的发酵,必须时刻了解所发酵酶的温度才可以得到所需酶;文物的保护同样也离不开温度的采集,不仅在文物出土的时刻,在博物馆和档案馆中,温度的控制也是藏品保存关键,所以温度的检测对其也是具有重要意义的;另外大型机房的温度的采集,超出此范围会影响服务器或系统的正常工作等等。传统方式监控温度往往很耗费人力,而且实时性差。本文就设计了一个基于STM32的温度测量系统,在测量温度的同时能实现无线传输与控制。
早期使用的是模拟温度传感器,如热敏电阻,随着环境温度的变化,它的阻值也发生线性变化,用处理器采集电阻两端的电压,然后根据某个公式就可计算出当前环境温度。而现在的温度传感器已经走向数字化,本次设计选用美国DALLAS半导体公司推出的数字化温度传感器DS18B20,该芯片采用单总线协议,仅占用一个I/O口,直接将环境温度转化成数字信号,以数字码方式串行输出。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈刚封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,如电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合
MCU选用STM32RBT6,有测量精度高、操作简单、价格低廉等优点。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。同时在编程方面STM32也具有和其他单片机的优势之处,如51单片机必须从最底层开始编程,而STM32所有的初始化和一些驱动的程序都是以模板的形式提供给开发者,在此开发者只需要了些其他的模块功能和工作方式和少量的语法知识便可以进行编程,此优势不但节约了时间,也为STM32的发展做出了强有力的铺垫,而且STM32目前是刚刚被作为主流开发的单片机,所以其前景是无可估量的,这次毕业设计也是看好了其优越的发展趋势来选择的。
无线传输采用蓝牙技术,将采集的温度传输至终端,以此实现远程监控。利用“蓝牙”技术,能够在10米的半径范围内实现单点对多点的无线数据传输,其数据传输带宽可达
Word完美格式
可编辑版
1Mbps。通讯介质为频率在2.402GHz到2.480GHz之间的电磁波。用跳频频谱扩展技术,把频带分成若干个跳频信道,在一次连接中,无线电收发器按伪随机码序列不断地从一个信道“跳”到另一个信道。
硬件设计使用的是Altium Designer软件,Altium Designer 是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统。这套软件把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术进行了完美融合,使用起来很方便。通过原理图的绘制,对整体的结构有了更深一步的了解。
软件部分则是通过RealView MDK来设计的,它是ARM于2006年1月30日推出的针对各种嵌入式处理器的软件开发工具。RealView MDK集成了业内领先的技术,包括Keil μVision3集成开发环境与RealView编译器。支持最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的 Simulation设备模拟,可进行软件仿真。软件仿真时可以查看很多硬件相关的寄存器,通过观察这些寄存器,就能很容易的检查代码的功能是否符合设计要求,出现错误时也方便找出原因。通过Jlink连接处理器后,还能进行在线调试,就能实时跟踪程序在硬件上的执行状况,可以进行复位、执行到断点处、挂起、执行进去、执行过去、执行出去等丰富的操作,例如,单步执行程序,就可以看到每一行代码在硬件的所起的效果,这样更直观,更方便对程序进行改进。这个功能在软件设计的过程中给予我极大的帮助,STM32的寄存器比较繁杂,使用时很容易遗漏某些部分,而在线调试就容易找出问题所在,从而进行纠正。
最后的成品较好的完成了预定的设计要求,能准确的显示温度数据,能与移动终端实现异步双工通信,达到传输温度和远程控制的目的。
通过本次设计,更加深入的理解了stm32的相关寄存器,并掌握其工作原理。更加深入的学习和应用一些工具软件,如Altium Designer、RealView MDK,通过对这些软件的使用,也加深了对相关知识的理解。本次的毕业设计题目相关的知识包括:电路原理、模拟电路、数字电路、c语言、单片机原理、通信原理等,有效的培养分析和解决实际问题的综合能力,得到更加全面的培养和锻炼,使大学所学的基础和专业知识可以再解决实际问题中得到综合的应用。
Word完美格式
可编辑版
2 系统分析
本系统是基于STM32 微控制器所设计的温度测量系统,通过温度芯片DS18B20测量温度,微控制器驱动液晶模块显示当前测得的温度,然后由蓝牙将温度信息发送至手机终端,同时接收终端反馈的控制信息。
整个系统模块分为四个模块:主芯片模块、DS18B20温度模块、液晶显示、蓝牙模块。MCU 是STM32 主芯片的最小板,上面有芯片工作需要的最少资源:时钟控制电路、复位电路、JTAG 控制口以及与外围电路相连的接口。DS18B20和液晶分别是温度测量、控制显示部分。而蓝牙模块负责完成与移动终端的异步双工通信。
2.1 STM32芯片
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
STM32的高性能Cortex-M3内核为1.25DMips/MHz;含有一流的外设:1us的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHZ的I/O翻转速度;在72MHz时消耗36mA,待机时下降的2uA。
内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。
存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。
时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部40 kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。
低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份寄存器供电的VBAT。 调试模式:串行调试(SWD)和JTAG接口。
DMA:12通道DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC和USART。 2个12位的us级的A/D转换器(16通道):A/D测量范围:0-3.6 V。双采样和保持能力。片上集成一个温度传感器。
2通道12位D/A转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。 最多高达112个的快速I/O端口:根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受
Word完美格式
可编辑版
5V以内的输入。
最多多达11个定时器:4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输出。2个看门狗定时器(独立看门狗和窗口看门狗)。Systick定时器:24位倒计数器。2个16位基本定时器用于驱动DAC。
最多多达13个通信接口:2个IIC接口(SMBus/PMBus)。5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。3个SPI接口(18 Mbit/s),两个和IIS复用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。
ECOPACK封装:STM32F103xx系列微控制器采用ECOPACK封装形式。
集成嵌入式Flash和SRAM存储器的ARM Cortex-M3内核。和8/16位设备相比,ARM Cortex-M3 32位RISC处理器提供了更高的代码效率。STM32F103xx微控制器带有一个嵌入式的ARM核,所以可以兼容所有的ARM工具和软件。
嵌入式Flash存储器和RAM存储器:内置多达512KB的嵌入式Flash,可用于存储程序和数据。多达64KB的嵌入式SRAM可以以CPU的时钟速度进行读写(不待等待状态)。
可变静态存储器(FSMC):FSMC嵌入在STM32F103xC,STM32F103xD,STM32F103xE中,带有4个片选,支持四种模式:Flash,RAM,PSRAM,NOR和NAND。3个FSMC中断线经过OR后连接到NVIC。没有读/写FIFO,除PCCARD之外,代码都是从外部存储器执行,不支持Boot,目标频率等于SYSCLK/2,所以当系统时钟是72MHz时,外部访问按照36MHz进行。
嵌套矢量中断控制器(NVIC):可以处理43个可屏蔽中断通道(不包括Cortex-M3的16根中断线),提供16个中断优先级。紧密耦合的NVIC实现了更低的中断处理延迟,直接向内核传递中断入口向量表地址,紧密耦合的NVIC内核接口,允许中断提前处理,对后到的更高优先级的中断进行处理,支持尾链,自动保存处理器状态,中断入口在中断退出时自动恢复,不需要指令干预。
外部中断/事件控制器(EXTI):外部中断/事件控制器由用于19条产生中断/事件请求的边沿探测器线组成。每条线可以被单独配置用于选择触发事件(上升沿,下降沿,或者两者都可以),也可以被单独屏蔽。有一个挂起寄存器来维护中断请求的状态。当外部线上出现长度超过内部APB2时钟周期的脉冲时,EXTI能够探测到。多达112个GPIO连接到16个外部中断线。
时钟和启动:在启动的时候还是要进行系统时钟选择,但复位的时候内部8MHz的晶振被选用作CPU时钟。可以选择一个外部的4-16MHz的时钟,并且会被监视来判定是否成功。在这期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要(例如碰到一个间接使用的晶振失败),PLL时钟的中断管理完全可用。多个预比较器可以用于配置AHB频率,包括高速APB(PB2)和低速APB(APB1),高速APB最高的频率为72MHz,低速APB最高的频率为36MHz。
Boot模式:在启动的时候,Boot引脚被用来在3种Boot选项种选择一种:从用户Flash
Word完美格式
可编辑版
导入,从系统存储器导入,从SRAM导入。Boot导入程序位于系统存储器,用于通过USART1重新对Flash存储器编程。
电源供电方案:VDD ,电压范围为2.0V-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晶振和备份寄存器供电(通过电源切换实现)。
电源管理:设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这条电路一直有效,用于确保从2V启动或者掉到2V的时候进行一些必要的操作。当VDD低于一个特定的下限VPOR/PDR时,不需要外部复位电路,设备也可以保持在复位模式。设备特有一个嵌入的可编程电压探测器(PVD),PVD用于检测VDD,并且和VPVD限值比较,当VDD低于VPVD或者VDD大于VPVD时会产生一个中断。中断服务程序可以产生一个警告信息或者将MCU置为一个安全状态。PVD由软件使能。
电压调节:调压器有3种运行模式:主(MR),低功耗(LPR)和掉电。MR用在传统意义上的调节模式(运行模式),LPR用在停止模式,掉电用在待机模式:调压器输出为高阻,核心电路掉电,包括零消耗(寄存器和SRAM的内容不会丢失)。
低功耗模式: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和相关的时钟源不会停止。
选型片的原则是:看功耗,本次设计的温度系统需要在外场长时间工作,那么就需要功耗较低;看成本,在能满足性能要求的前提下,选择成本较低的。
从这两个方面来看,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz,时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,综合考虑,本次设计选用的mcu为STM32RBT6。
2.2 DS18B20
DS18B20是由DALLAS半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口
Word完美格式
可编辑版
简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~l2位的数字值读数方式。它工作在3—5.5 V的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
2C目前常用的单片机与外设之间进行数据传输的串行总线主要有IIC,SPI和SCI总线。
2其中I2C总线以同步串行二线方式进行通信:一条时钟线,一条数据线。SPI总线则以同步串行三线方式进行通信:一条时钟线,一条数据输入线,一条数据输出线。SCI总线是以异步方式进行通信:一条数据输入线,一条数据输出线。而DS18B20的单总线采用单条信号线,既可传输时钟,又可传输数据,而且数据传输是双向的,因而具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。
ROM中的64位序列号是出厂前被光记好的,它可以看作是该DS18B20的地址序列码,每DS18B20的64位序列号均不相同。64位ROM的排列是:前8位是产品家族码,接着48位是DS18B20的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5 +X4 +1)。ROM作用是使每一个DS18B20都各不相同,这样就可实现一根总线上挂接多个。
DS18B20适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可由数据线供电。在使用中不需要任何外围元件,全部传感元件及转换电路继承在形如一只三极管的集成电路内。可编程分辨率为9~12位,对应的可分辨温度分别为0.5度,0.25度,0.125度,0.0625度,可实现高精度测温。
2.3 TFTLCD
TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。液晶先后避开了困难的发光问题,利用液晶作为光阀的优良特性把发光显示器件分解成两部分,即光源和对光源的控制。作为光源,无论从发光效率、全彩色,还是寿命,都已取得了辉煌的成果,而且还在不断深化之中。LCD发明以来,背光源在不断地进步,由单色到彩色,由厚到薄,由侧置荧光灯式到平板荧光灯式。在发光光源方面取得的最新成果都会为LCD提供新的背光源。随着光源科技的进步,会有更新的更好的光源出现并为LCD所应用。余下的就是对光源的控制,把半导体大规模集成电路的技术和工艺移植过来,研制成功了薄膜晶体管(TFT)生产工艺,实现了对液晶光阀的矩阵寻址控制,解决了液晶显示器的光阀和控制器的配合,从而使液晶显示的优势得以实现。
TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。
TFT实际上指的是薄膜晶体管,可以对屏幕上的各个独立的像素进行控制。显示屏由
Word完美格式
可编辑版
许多可以发出任意颜色的光线的像素组成,只要控制各个像素显示相应的颜色就能达到目的了。在TFT LCD中采用背光技术,为了能精确地控制每一个像素的颜色和亮度就需要在每一个像素之后安装一个类似百叶窗的开关,当“百叶窗”打开时光线可以透过来,而“百叶窗”关上后光线就无法透过来。技术上的实现就是利用了液晶的特性,在上下两层都有沟槽,上层的是纵向排列,下层的是横向排列,当不加电压时液晶处于自然状态,通过适当的结构设计,光线从上层通过夹层后会发生90度的扭曲,从而能在下层顺利通过,加上电压就会生成一个电场,使得液晶都垂直排列,这时光线就无法通过下层。
2.4 ATK-HC05蓝牙串口
ATK-HC05模块,是一款高性能主从一体蓝牙串口模块,可以同各种带蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP等智能终端配对,该模块支持非常宽的波特率范围:4800~1382400,并且模块兼容5V或3.3V单片机系统,使用非常灵活、方便。
在微微网建立之前,所有设备都处于就绪状态。在该状态下,未连接的设备每隔1.28s监听一次消息,设备一旦被唤醒,就在预先设定的32个跳频频率上监听信息。连接进程由主设备初始化。如果一个设备的地址已知,就采用页信息建立连接;如果地址未知,就采用紧随页信息的查询信息建立连接。在微微网中,无数据传输的设备转入节能工作状态。主设备可将从设备设置为保持方式,此时,只有内部定时器工作;从设备也可以要求转入保持方式。设备由保持方式转出后,可以立即恢复数据传输。连接几个微微网或管理低功耗器件时,常使用保持方式。监听方式和休眠方式是另外两种低功耗工作方式。蓝牙基带技术支持两种连接方式:面向连接(SCO)方式,主要用于语音传输;无连接(ACL)方式,主要用于分组数据传输。温度数据就通过无连接方式传输。
蓝牙采用的是跳频和时分多址技术。跳频就是用伪随机码序列进行移频键控,使载波频率不断跳变而扩展频谱的一种方法。在传统的定频通信系统中,发射机中的主振荡器的振荡频率是固定设置的,因而它的载波频率是固定的。为了得到载波频率是跳变的跳频信号,要求主振荡器的频率应能遵照控制指令而改变。这种产生跳频信号的装置叫跳频器。通常,跳频器是由频率合成器和跳频指令发生器构成的。如果将跳频器看作是主振荡器,则与传统的发信机没有区别。被传送的信息可以是模拟的或数字的信号形式,经过调制器的相应调制,便获得副载波频率固定的已调波信号,再与频率合成器输出的主载波频率信号进行混频,其输出的已调波信号的载波频率达到射频通带的要求,经过高通滤波器后馈至天线发射出去。这就是定频信号的发送过程。而时分多址就是把时间分割成互不重叠的帧,再将帧分割成互不重叠的时隙(信道)与用户具有一一对应关系,依据时隙区分来自不同地址的用户信号,从而完成的多址连接。
Word完美格式
可编辑版
3 硬件设计
3.1 MCU
MCU选用的STM32RBT6,64引脚。排阻P3和P1分别用于PORTA和PORTB的IO口引出,其中P2还有部分用于PORTC口的引出。PORTA和PORTB都是按顺序排列的。
P2连接了DS18B20的数据口以及红外传感器的数据线,它们分别对应着PA0和PA1,只需要通过跳线帽将P2和P3连接起来就可以使用了。这里不直接连在一起的原因有二:1,防止红外传感器和DS18B20对这两个IO口作为其他功能使用的时候的影响;2,DS18B20和红外传感器还可以用来给其他板子提供输入。
P4口连接了PL2303的串口输出,对应着STM32的串口1(PA9/PA10),在使用的时候,也是通过跳线帽将这两处连接起来。这样设计使得PA9和PA10用作其他用途使用的时候,不受到PL2303的影响。
P5口是另外一个IO引出排阵,将PORTC和PORTD等的剩余IO口从这里引出。
图3.1 mcu原理图
Word完美格式
可编辑版
3.2 JTAG设计
JTAG(Joint Test Action Group;联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
图3.2 JTAG原理图
3.3 TFTLCD电路设计
TFTLCD采用34引脚,部分对应关系为:LCD_LED对应PC10;LCD_CS对应PC9;LCD_RS对应PC8;LCD_WR对应PC7;LCD_RD对应PC6;LCD_D[17:1];对应PB[15:0]
图3.3 tftlcd原理图
Word完美格式
可编辑版
4 软件设计
软件设计部分,包括两大部分:初始化和功能性设计。
4.1 系统初始化
4.1.1 时钟的初始化
时钟是MCU的驱动源,而STM32有三种不同的时钟源来驱动系统时钟:HSI振荡器时钟、HSE振荡器时钟、PLL时钟。HSI时钟信号由内部8MHz的RC振荡器产生,可在2分频后作为PLL输入,HSE即高速外部时钟信号由两种时钟源产生:HSE外部晶体/陶瓷谐振器、HSE用户外部时钟。而我选用的是PLL时钟。主PLL以HSI时钟除以2或HSE通过一个可配置分频器的PLL2时钟来倍频后输出。PLL2和PLL3由HSE通过一个可配置的分频器提供时钟。必须在使能每个PLL之前完成PLL的配置(选择时钟源、预分频系数和倍频系数等),同时应该在它们的输入时钟稳定(就绪位)后才能使能。一旦使能了PLL,这些参数将不能再被改变。 当改变主PLL的输入时钟源时,必须在选中了新的时钟源(通过时钟配置寄存器(RCC_CFGR)的PLLSRC位)之后才能关闭原来的时钟源。时钟中断寄存器(RCC_CIR),可以在PLL就绪时产生一个中断。 其代码如下:
//系统时钟初始化函数
//pll:选择的倍频数,从2开始,最大值为16 void Stm32_Clock_Init(u8 PLL) {
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1/2=DIV2;AHB=DIV1; PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16 RCC->CFGR|=1<<16; //PLLSRC ON FLASH->ACR|=0x32; //FLASH 2个延时周期 RCC->CR|=0x01000000; //PLLON while(!(RCC->CR>>25));//等待PLL锁定 RCC->CFGR|=0x00000002;//PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功 {
Word完美格式
可编辑版
temp=RCC->CFGR>>2; temp&=0x03; } }
Stm32_Clock_Init函数只有一个变量PLL,就是用来配置时钟的倍频数的,当前所用的晶振为8Mhz,PLL的值设为9,那么STM32将运行在72M的速度下。
此外,在程序中经常用到延时函数,利用CM3内核的处理器内部包含的SysTick定时器来实现延时,它是一个24位的倒计数定时器,当记到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。使用SysTick来实现延时,既不占用中断,也不占用系统定时器。
4.1.2 I/O初始化
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
GPIO端口的每个位可以由软件分别配置成多种模式: 输入浮空 、输入上拉、 输入下拉 、模拟输入、开漏输出 、推挽式输出、推挽式复用功能 、开漏复用功能。每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。下图给出了一个I/O端口位的基本结构。
图4.1 I/O端口结构
Word完美格式
可编辑版
首先为了方便函数的编写,进行IO口的地址映射,如下(列举部分): #define
BITBAND(addr,
bitnum)
((addr
&
0xF0000000)+0x2000000+((addr
&0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
在使用IO口前需要使能相应端口的时钟,然后配置它的模式。与配置相关的两个寄存器位CRL,CRH,其结构如下所示
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0] CNF5[1:0] MODE5[1:0] CNF4[1:0] MODE4[1:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0] CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw位31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位在输入模式下(MODE[1:0]=00):00:模拟输入模式01:浮空输入模式10:上拉/下拉输入模式11:保留在输出模式下(MODE[1:0]>00):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式位29:2825:2421:2017:1613:129:85:41:0MODEy[1:0];端口x的模式位00:输入模式01:输出模式,最大速度10MHZ10:输出模式,最大速度2MHZ11:输出模式,最大速度50MHZ
图4.2 CRL/CRH寄存器结构
该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可以得出:STM32的CRL控制着每个IO端口(A~G)的低8位的模式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可
Word完美格式
可编辑版
以记住几个常用的配置,比如0X0表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。
CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。
RCC->APB2ENR|=1<<2; //使能PORTA时钟 RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;//PA8 推挽输出 GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;//PD2 推挽输出 GPIOD->ODR|=1<<2; //PD2 输出高
GPIOA->ODR|=1<<8; //PA8 输出高
这里PA2与PD2分别对应LED0和LED1。此外,按键的初始化也就是对I/O进行设置,key0与key1分别对应PA13和PA15,都设置为上拉输入。
RCC->APB2ENR|=1<<2; //使能PORTA时钟 GPIOA->CRH&=0X000FFFFF;
GPIOA->CRH|=0X80800000; //PA13,15 设置为输入 GPIOA->ODR|=1<<13; //PA13上拉 GPIOA->ODR|=1<<15; //PA15上拉
4.1.3 串口初始化
本次设计中蓝牙的收发都是通过串口传至STM32内,串口最基本的设置,就是波特率的设置。STM32的串口使用需要开启了串口时钟,并设置相应IO口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息。具体步骤如下。
串口时钟使能。串口作为STM32的一个外设,其时钟由外设时钟使能寄存器控制,其中串口1是在APB2ENR寄存器的第14位。除了串口1的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在APB1ENR寄存器。
串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。串口1的复位是通过配置APB2RSTR寄存器的第14位来实现的。
串口波特率设置。每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的。
串口控制。STM32的每个串口都有3个控制寄存器USART_CR1~3,串口的很多配置
Word完美格式
可编辑版
都是通过这3个寄存器来设置的。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16保留15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0保留 UE M WAKE PCE PS PEIE TXEIE TXIE RXNEIE IDLEID TE RE RWU SBK
图4.3 USART_CR寄存器各位描述
该寄存器的高18位没有用到,低14位用于串口的功能设置。UE为串口使能位,通过该位置1,以使能串口。M为字长选择位,当该位为0的时候设置串口为8个字长外加n个停止位,停止位的个数(n)是根据USART_CR2的[13:12]位设置来决定的,默认为0。PCE为校验使能位,设置为0,则禁止校验,否则使能校验。PS为校验位选择,设置为0则为偶校验,否则为奇校验。TXIE为发送缓冲区空中断使能位,设置该位为1,当USART_SR中的TXE位为1时,将产生串口中断。TCIE为发送完成中断使能位,设置该位为1,当USART_SR中的TC位为1时,将产生串口中断。RXNEIE为接收缓冲区非空中断使能,设置该位为1,当USART_SR中的ORE或者RXNE位为1时,将产生串口中断。TE为发送使能位,设置为1,将开启串口的发送功能。RE为接收使能位,用法同TE。
数据发送与接收。STM32的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内。该寄存器的各位描述如下图所示:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16保留15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DR[8:0] rw rw rw rw rw rw rw rw rw 图4.4 USART_DR寄存器各位描述
串口状态。串口的状态可以通过状态寄存器USART_SR读取。USART_SR的各位描述如下图所示:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16保留15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CTS LBD TXE TC RXNE IDLE ORE NE FE PE
Word完美格式
可编辑版
图4.5 USART_SR寄存器各位描述
RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取USART_DR,通过读USART_DR可以将该位清零,也可以向该位写0,直接清除。
TC(发送完成),当该位被置位的时候,表示USART_DR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读USART_SR,写USART_DR。2)直接向该位写0。 代码如下:
void uart_init(u32 pclk2,u32 bound) { }
float temp; u16 mantissa; u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV mantissa=temp;
//得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分 mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB2ENR|=1<<14; //使能串口时钟 GPIOA->CRH&=0XFFFFF00F;//IO状态设置 GPIOA->CRH|=0X000008B0;
RCC->APB2RSTR|=1<<14; //复位串口1 RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位
//使能接收中断
USART1->CR1|=1<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
mantissa<<=4;
USART1->BRR=mantissa; //波特率设置 #if EN_USART1_RX
#endif
Word完美格式
可编辑版
4.1.4 DMA初始化
DMA全称为:Direct Memory Access,即直接存储器访问。DMA传输方式无需CPU直接控制传输,也没有像中断处理方式那样保留现场和恢复现场的过程,而是通过硬件为RAM与I/O设备开辟一条直接传送数据的通路。本次设计在发送蓝牙数据时就采用了DMA方式。
STM32RBT6有一个DMA控制器,DMA有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。此外,还有一个仲裁器来协调各个DMA请求的优先权。在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。总体来说,每次DMA传送由以下操作组成:从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。然后存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址同取数据时一样都是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。最后执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。
要使用DMA通道,需配置以下信息:
1. 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标。
2. 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址。
3. 在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
4. 在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
5. 在DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。
6. 设置DMA_CCRx寄存器的ENABLE位,启动该通道。
我使用的是串口2,对应着DMA的通道7,那么相应的外设寄存器的地址也就是&USART2->DR;而将USART2_TX_BUF这个数组作为数据存储器,就向DMA_CMARx中写入&USART2_TX_BUF;要传输的数据量通过strlen函数来测量后传输给DMA_CNDTR;因为只需开启一个通道,所以优先级可以随意设置;数据传输方向是从存储器读取;当启动了循环模式,数据传输的数目变为0时,将会自动地被恢复成配置通道时设置的初值,DMA操作将会继续进行,而传输过的温度值,不希望其重复传输,因而关闭循环模式;外设地址不变,存储器选择增量模式,它们的数据宽度都为8位,是为了
Word完美格式
可编辑版
适应蓝牙的数据传输。此外,传输一半和传输完成都无需产生中断,每传一次数据前都会关闭DMA通道,再重新开启通道,
4.1.5 中断初始化
传输数据到串口通过DMA方式,从串口接收数据时需要检测,这时就采用中断方式。 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。其中串口2属于可屏蔽中断,中断向量地址为0x0000_00D8。
对于如此多的中断,优先级的分配也就显得很有意义,IPR——Interrupt Priority Registers,就是控制中断优先级控制的寄存器组,IPR寄存器组由15个32bit的寄存器组成,每个可屏蔽中断占用8bit,这样总共可以表示15*4=60个可屏蔽中断。刚好和STM32的可屏蔽中断数相等。IPR[0]的[31~24],[23~16],[15~8],[7~0]分别对应中中断3~0,依次类推,总共对应60个外部中断。而每个可屏蔽中断占用的8bit并没有全部使用,而是 只用了高4位。这4位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据SCB->AIRCR中中断分组的设置来决定。
STM32将中断分为5个组,组0~4。该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。具体的分配关系如下表所示:
表4.1 AIRCR中断分组设置表
组 0 1 2 3 4
AIRCR[10:8]
111 110 101 100 11
Bit[7:4]分配情况
0:4 1:3 2:2 3:1 4:0
分配结果
0位抢占优先级,4位响应优先级 1位抢占优先级,3位响应优先级 2位抢占优先级,2位响应优先级 3位抢占优先级,1位响应优先级 4位抢占优先级,0位响应优先级
所有的60个中断,每个中断的中断优先寄存器的高四位中的最高3位是抢占优先级,低1位是响应优先级。每个中断,可以设置抢占优先级为0~7,响应优先级为1或0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 如果两个中断的抢占优先级和响应优先级都是一样的话,则中断先发生就先执行。高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
Word完美格式
可编辑版
STM32的5个分组是通过设置SCB->AIRCR的BIT[10:8]来实现的,SCB->AIRCR的修改需要通过在高16位写入0X05FA这个密钥才能修改的,故在设置AIRCR之前,应该把密钥加入到要写入的内容的高16位,以保证能正常的写入AIRCR。在修改AIRCR的时候,采用读->改->写的步骤,来实现不改变AIRCR原来的其他设置。
中断的框图如下所示:
图4.6 中断框图
一般I/O口配置中断的步骤分为:初始化IO口为输入,开启IO口复用时钟,设置IO口与中断线的映射关系,开启与该IO口相对的线上中断/事件,设置触发条件,配置中断分组,并使能中断,最后编写中断服务函数。而串口2有对应的中断向量,就省去了前面的映射步骤,MDK给串口2中断分配了一个固定的函数名USART2_IRQHandler。这里服务函数要实现的功能是判断接收连续2个字符之间的时间差是否大于10ms,如果间隔超过10ms,则认为不是一次连续数据,换句话说就是超过10ms没有接收到任何数据,则表示此次接收完毕。这里利用了通用定时器TIME4实现这个功能,即让TIME4计时10ms,如果这段时间有数据接收则清空TIM4->CNT,TIME4开始重新计数,如果没有,则进入TIME4的中断函数,结束此次接收。
Word完美格式
可编辑版
4.2 模块功能设计
4.2.1 DS18B20温度模块
DS18B20是由DALLAS半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃ ,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~l2位的数字值读数方式。它工作在3—5.5 V的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM中,掉电后依然保存。其内部结构为:
图4.7 DS18B20内部结构
DS18B20只需要一个I/O口,既可传输时钟,又可传输数据,而且数据传输是双向的。高速暂存器RAM和可电擦除E2PROM与温度转换和读取操作密切相关。高速暂存器RAM由9个字节的存储器组成。第0~1个字节是温度的显示位;第2和第3个字节是复制的TH和TL,同时第2和第3个字节的数字可以更新;第4个字节是配置寄存器,同时第4个字节的数字可以更新;第5,6,7三个字节是保留的。可电擦除E2PROM包括温度触发器TH和TL和一个配置寄存器。
温度数据存储在高速RAM的第0和第1字节,共16位,DS18B20的默认配置为12位,其中最高位为符号位,即温度值有11位,单片机读取数据时,一次会读2字节共16位,之后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测得温度值。剩余的4位会和符号位同时变化,为1时,表示读取的温度为负值,且测到的数值需要取反加1再乘以0.0625才可得到实际温度值;为0时,读取的温度为正值,只要将测得的数值乘以0.0625即可得到温度值。
Word完美格式
可编辑版
初始化的顺序:先将数据线置高电平1,延时后在将其拉到0;然后延时750us,即图中的“复位脉冲”,范围应在480~960us;之后将数据线拉到高电平1,开始延时等待,如果初始化成功则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在,同时为了防止程序进入无限的等待,要进行超时判断;若cpu读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起;最后将数据线再次拉到高电平1后结束。如图所示:
控制器Tx “复位脉冲”最小值480us最大值960us控制器RX最小值480us等待15-60usDS18B20 Tx应答脉冲60-240us
图4.8 DS18B20初始化时序图
写数据的时序为:数据线先置低电平0;延时15us,然后按低位到高位的顺序发送一位数据;再延时45us;将数据线拉到高电平1;接着重复上述操作,直到发送完整个字节,最后将数据线拉高到1。时序图如下:
控制器写“0”时隙控制器写“1”时隙 DS18B20 采样MIN TYP MAX15us15us30us>1us DS18B20 采样MIN TYP MAX15us20us15us
图4.9 写数据时序图
Word完美格式
可编辑版
相应的就有读数据的时序,读数据也是一位一位的读,具体为:将数据线拉高到1,延时2us;然后拉低到0,延时6us;再拉高到1,延时4us;这时就可以得到一个状态位了,之后再延时30us;重复这些步骤就能读取完一个字节了。时序图为:
控制器读“0”时隙控制器读“1”时隙控制器采样>1us控制器采样15us15us30us15us
图4.10 读数据时序图
温度的获取过程为:复位发SKIP ROM命令(0XCC)发开始转换命令(0X44)延时复位发送SKIP ROM命令(0XCC)发读存储器命令(0XBE)连续读出两个字节数据(即温度)结束。
4.2.2 TFTLCD模块设计
本次设计的显示模块采用的是8080并口,包含CS:TFTLCD片选信号。 WR:向TFTLCD写入数据。 RD:从TFTLCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFTLCD。 RS:命令/数据标志(0,读写命令;1,读写数据)。
模块的8080并口读/写的过程为:先根据要写入/读取的数据的类型,设置DC为高(数据)/低(命令),然后拉低片选,选中SSD1306,接着根据是读数据,还是要写数据置RD/WR为低,然后: 在RD的上升沿,使数据锁存到数据线(D[7:0])上; 在WR的上升沿,使数据写入到SSD1306里面。SSD1306的8080并口写时序图如下:
Word完美格式
可编辑版
图4.11 8080并口写时序图
SSD1306的8080并口读时序图如下:
图4.12 8080并口读时序图
SSD1306的8080接口方式下,控制脚的信号状态所对应的功能如下表:
表4.2 引脚功能
功能 写命令 读状态 写数据 读数据
RD H 上升沿 H 上升沿
WR 上升沿 H 上升沿 H
CS L L L L
DC L L H H
在8080方式下读数据操作的时候,在读显存的时候需要一个假读命(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是真正要读的数据。一个典型的读显存的时序图,如下图所示:
Word完美格式
可编辑版
图4.13 读显存时序图
可以看到,在发送了列地址之后,开始读数据,第一个是Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。
AM与I/D控制着显示屏的显示方向:当AM=0的时候,地址以行方向更新。当AM=1的时候,地址以列方向更新;地址计数器自动增加还是减少则由I/D控制。如图所示:
图4.14 GRAM显示方向设置图
驱动IC的初始化代码,使用的是厂家推荐的设置,实质是复杂的一系列写数据和写寄存器指令,框图如图所示:
Word完美格式
复位 SSD1306 驱动IC初始化代码 可编辑版
图4.15 SSD1306初始化框图
通过初始化后,就可以设计函数来显示温度了,首先编写显示字符showchar的函数,TFTLCD模块的ASCII字符集取模方式采取的开辟窗口的形式来做的,并不是采用画点函数来做的。这样可以提高写入速度,因为这样可以省掉每次都设置坐标,而是直接写入数据,LCD自动完成坐标的递增。这样的写入方式,在绘图的时候,尤为见效,可以很大程度上提高图片的刷新速度。因为编码方式采用ASCII码,要显示数字只需将数字转化为相应的ASCII码,加上‘0’的ASCII码即可满足要求。
4.2.3 ATK-HC05蓝牙模块
ATK-HC05蓝牙串口模块所有功能都是通过AT指令集控制,进入AT状态有两种方法:1.上电同时或上电之前将KEY设置为VCC,上电后,模块即进入AT指令状态。 2.模块上电后,通过将KEY接VCC,使模块进入AT状态。其引脚如表所示:
表4.3 ATK-HC05模块各引脚功能描述
序号 1 2 3 4 5 6
名称 LED KEY RXD TXD GND VCC
说明
配对状态输出:配对成功输出高电平,未配对则输出低电平 用于进入AT状态;高电平有效(悬空默认为低电平)
模块串口接收脚,可接单片机的TXD 模块串口发送脚,可接单片机的RXD
地 电源(3.3v~5.0v)
模块的指令结构为:AT+ Word完美格式 可编辑版 都是可选的,不过要在发送末尾添加回车符(\\r\\n),否则模块不响应。用到的指令有: 表4.4 AT指令表 指令 AT AT+RESET AT+ROLE= AT+ROLE? 响应 OK OK OK +ROLE: OK 参数 无 无 0--从角色 1--主角色 2--回环角色 首先需检测,ATK-HC05是否连接成功,通过发送测试指令“AT\\r\\n”,若能响应“ok”,则表示连接成功。主角色:查询周围蓝牙从设备,并主动发起连接,从而建立主、从蓝牙设备间的数据传输通道;从角色:被动连接。在这里设置为从角色,以便移动终端的连接。因为回环角色未用到,可以用一个按键来切换主从角色的设置,查询后显示在液晶上。 在初始化部分提到,发送数据时,采用DMA方式直接从存储器传送到串口输出,接收数据时,添加了中断来判断数据的间隔是否大于10ms。 检测蓝牙模块未响应响应报错获取模块角色获取配对状态扫描按键ConnectedKey0按下切换发送状态接受信息key1按下切换角色状态+led1 on点亮液晶+led1 off熄灭液晶其他无操作 Word完美格式 可编辑版 图4.16 蓝牙流程图 获取模块角色后,如果显示的是主角色,则按key1改为从角色,方便与移动终端连接。获取配对状态是根据蓝牙模块上的引脚led的电平来判断,配对成功为高电平,未配对则为低电平;如果匹配未成功则只能进行切换角色操作,而匹配成功后,通过发送+led1 on可以点亮液晶背光,发送+led1 off熄灭液晶背光,用strcmp函数来比较接受数据与这个两个数据即可实现。 5 结果与总结 给stm32上电后,温度正常显示,如图所示: Word完美格式 可编辑版 图5.1 lcd温度显示 第一行“ATK-HC05 Standby”表示检测到蓝牙模块,否则提示错误,第二行的STA显示的是连接状态,此时为“Disconnect”,当蓝牙模块连接时,则会变成“connected”。如图所示: 图5.2 连接成功提示 然后打开手机的蓝牙串口通信软件,就自动开始搜索蓝牙设备,第二次连接的时候则会提示是否继续上次的连接。 Word完美格式 可编辑版 图5.3 蓝牙串口通信软件 图5.4 连接成功 这里选择的是键盘操作模式,此模式下,可以实现双向通信。 Word完美格式 可编辑版 图5.5 手机接收温度 这里我设置了两个按键,如图5.5,“LED1亮”键会发送+led1 on的信息,通过蓝牙发送给stm32后,则会使液晶的背光点亮,而旁边的红色灯闪烁是表示stm32工作正常的,拍结果照片时有亮有灭。“LED1灭”则会发送+led1 off,使液晶背光熄灭 图5.6 控制stm32液晶亮灭 Word完美格式 可编辑版 上两图在同一时间段拍摄,由于液晶亮的时候隔的太近,影响了光线,但还是能很明显能看出液晶的亮灭,结果符合设计要求,顺利的控制液晶的亮灭,有较好的实时性和稳定性。采用蓝牙模块,通信距离有很大限制,但可以通过服务器进行远距离传输,同时它的优点也是很明显的,低功耗,方便使用,通讯安全性好,使用蓝牙就能实现与移动终端的连接,很方便的进行实时控制。使用tftlcd主要是考虑到系统的拓展性,能显示更详细的信息,也使得人机交互界面做的更人性化。 刚开始做毕设时,对STM32并没有什么了解,好在有单片机和微机原理的基础,看起资料来不是很费劲。本次设计使用到了STM32的I/O、串口、DMA、中断、通用定时器TIME4等资源,而它们的寄存器往往都是很繁杂的,以I/O为例,与之相关的寄存器有:GPIOx_CRL、GPIOx_CRH、IDR、ODR、BSRR、BRR、LCKR,面对如此多的寄存器,最大的感触就是要沉下心来看技术手册,找中关键的寄存器,找中相关的位,才能事半功倍。然后就是要细心,例如在配置优先级分组时要特别注意统一分组,组号要一样,否则前面设置的优先级会因为后面的分组不一致发生改变,而产生意料之外的结果;还有抢占优先级与响应优先级之间的区别,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的,而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断,所以配置前得分清是否需要打断;用到的函数都要在头文件里面声明,不然会编译出错。 最重要的还是思路要清晰,知道要做什么,该如何做,能理清寄存器之间、外设与STM32之间的联系。以DMA为例,它不通过CPU,直接建立了外设与存储器之间的连接,所以得先给出外设与存储器的地址;既然是传输数据,就需给出数据量的大小和一次读取的数据宽度;配置好了这些,数据的基本信息就配置好了,然后就思考它们如何传输,在存储器内读取一个字节,应该增还是减地址,然后查找数据手册,找到DMA的配置寄存器DMA_CCRx,位7MINC对应存储器地址增量模式,位6对应外设地址增量模式,串口的地址是不变的相应的外设地址就设置为不增,而数据一般都传输多位,所以将位7设置成存储器地址增量模式。DMA有7个通道,有仲裁器来判断启动哪个,自然就要设置优先级。最后使能DMA,就开启了传输。整个过程看起来繁复,但理清了思路之后,就像用线串了起来,问题都迎刃而解。 看到最终的成果,感觉这几个月来的努力没有白费。在这个过程中,不仅仅是学习了STM32,了解数字温度计DS18B20和蓝牙通信,更为重要的是锻炼了自己分析问题解决问题的能力。 本次设计也存在很多不足之处,未能添加反馈调节温度的模块,只实现了温度测量与显示,及远程控制显示的系统。刚开始设计时急于求成,代码很容易就出错了,没理清头绪时,往往找了很久,好不容易把错误改正,编译不出错,实现的结果又和设想的偏差很大,后来才认识到踏实看技术手册,弄清寄存器作用,理清设计思路的重要性,这样出错也很容易去纠正。 Word完美格式 可编辑版 参考文献 [1] STMicroelectronics Corporation.RM0008 Reference manual[S].2011. [2] STMicroelectronics Corporation.STM32F103XX Datasheet[J].2007. [3] 李宁.基于MDK的STM32处理器应用开发[M].北京:北京航空航天大学出版社.2008 [4] 刘军.例说STM32[M].北京:北京航空航天大学出版社.2011. [5] 刘鹏程.基于ARM的温度测量系统[J].科技信息(学术研究).2008(18).77-78. [6] 樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社.2006. [7] 曾凡鑫.无线通信中的序列设计原理[M].北京:国防工业出版社.2007. [8] 喻金钱.短距离无线通信详解:基于单片机控制[M].北京:航空航天大学出版社.2009. [9] 潘焱.无线通信系统与技术[M].北京:人民邮电出版社[M].2011. [10] STMicroelectronics Corporation.The Definitive Guide to the ARM Cortex-M3[J].2010. Word完美格式 可编辑版 致谢 大学本科的时光即将结束,回顾四年来的学习经历,面对现在的收获,我感到无限欣慰。 首先向指导老师王原丽老师表示衷心的感谢并致以崇高的敬意。王老师给予我很多重要的指导,对学术研究的严谨值得我好好学习,还要感谢老师为学生营造的浓郁学术氛围,以及学习、生活上的无私帮助! 同时向热心帮助过我的所有老师和同学表示由衷的感谢!在论文工作中,一直得到老师和学长的悉心指导,使我的论文可以又快又好的完成,值此论文完成之际,谨向各位老师和同学致以最崇高的谢意! 最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家、教授。 Word完美格式 因篇幅问题不能全部显示,请点此查看更多更全内容