77范文网 - 专业文章范例文档资料分享平台

基于stm32的温度测量系统(5)

来源:网络收集 时间:2019-04-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

武汉理工大学毕业设计(论文)

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位,是为了适应蓝牙的数据传输。此外,传输一半和传输完成都无需产生中断,每传一次数据前都会关闭DMA通道,再重新开启通道,

16

武汉理工大学毕业设计(论文)

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。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 如果两个中断的抢占优先级和响应优先级都是一样的话,则中断先发生就先执行。高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。

STM32的5个分组是通过设置SCB->AIRCR的BIT[10:8]来实现的,SCB->AIRCR的修改需要通过在高16位写入0X05FA这个密钥才能修改的,故在设置AIRCR之前,应该把密钥加入到要写入的内容的高16位,以保证能正常的写入AIRCR。在修改AIRCR的时候,采用读->改->写的步骤,来实现不改变AIRCR原来的其他设置。

17

武汉理工大学毕业设计(论文)

中断的框图如下所示:

图4.6 中断框图

一般I/O口配置中断的步骤分为:初始化IO口为输入,开启IO口复用时钟,设置IO口与中断线的映射关系,开启与该IO口相对的线上中断/事件,设置触发条件,配置中断分组,并使能中断,最后编写中断服务函数。而串口2有对应的中断向量,就省去了前面的映射步骤,MDK给串口2中断分配了一个固定的函数名USART2_IRQHandler。这里服务函数要实现的功能是判断接收连续2个字符之间的时间差是否大于10ms,如果间隔超过10ms,则认为不是一次连续数据,换句话说就是超过10ms没有接收到任何数据,则表示此次接收完毕。这里利用了通用定时器TIME4实现这个功能,即让TIME4计时10ms,如果这段时间有数据接收则清空TIM4->CNT,TIME4开始重新计数,如果没有,则进入TIME4的中断函数,结束此次接收。

4.2 模块功能设计

4.2.1 DS18B20温度模块

DS18B20是由DALLAS半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接

18

武汉理工大学毕业设计(论文)

口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-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即可得到温度值。

初始化的顺序:先将数据线置高电平1,延时后在将其拉到0;然后延时750us,即图中的“复位脉冲”,范围应在480~960us;之后将数据线拉到高电平1,开始延时等待,如果初始化成功则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在,同时为了防止程序进入无限的等待,要进行超时判断;若cpu读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起;最后将数据线再次拉到高电平1后结束。如图所示:

19

武汉理工大学毕业设计(论文)

控制器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 写数据时序图

相应的就有读数据的时序,读数据也是一位一位的读,具体为:将数据线拉高到1,延时2us;然后拉低到0,延时6us;再拉高到1,延时4us;这时就可以得到一个状态位了,之后再延时30us;重复这些步骤就能读取完一个字节了。时序图为:

20

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于stm32的温度测量系统(5)在线全文阅读。

基于stm32的温度测量系统(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/584245.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: