sstm32内部flash读写温度数据发送到电脑上程序

基于STM32的数据采集器-百合电子工作室
网站导航:
基于STM32的数据采集器
文章编号:
文章分类:
关 键 词:
文章来源:
数据采集器以一片STM32F103C8为主体,通过一片MAX1270完成A/D转换。STM32微控制器通过SPI接口与MAX1270相连,通过USB接口与PC主机相连...
5.6 应用实例:基于STM32的数据采集器
随着数据采集需求的不断变化,传统的纯硬件采集器系统在数据处理方面能力的不足越来越明显,现在数据采集系统多采用软硬件结合的方式,USB总线凭借其即插即用、热插拔以及较高的传输速率等优点,成为PC机与外设连接的普遍标准。STM32微控制器片上集成了全速USB 2.0接口,而且提供诸如SPI等多种通信接口,这些特性使得STM32 MCU成为数据采集器的核心的首选。这里我们将介绍了一个基于STM32微控制器的数据采集器的设计与实现。
5.6.1 硬件设计
数据采集器以一片STM32F103C8为主体,通过一片MAX1270完成A/D转换。STM32微控制器通过SPI接口与MAX1270相连,通过USB接口与PC主机相连。
1. STM32F103C8
STM32F103C8是属于STM32F103xx系列中的一块微控制器芯片。片上带64K Flash和10K SRAM。据有USB2.0全速接口、2个SPI接口和多个定时器。关于该系列芯片特点、结构、编程使用的更多信息请参考本书第二章 STM32 系列微控制器和第三章 STM32系统微控制器存储器和外设。
2. 数据采集芯片MAX1270
MAX1270是8通道、多量程双极性输入、串行输出、逐次逼近型12 位AD转换器。其封装形式有24脚Narrow PDIP和28脚SSOP两种。我们这里采用的是PDIP封装,其引脚排列如图1所示。各有用引脚功能如下:
1-VDD,+5V电源输入端;2、4-DGND,数字地;5-SCLK,串行时钟输入端;6-/CS,片选输入端,低电平有效;7-DIN,串行数据输入,即AD转换控制字输入端;8-SSTRB,串行数据输出选通输出端;10-DOUT,串行数据输出端;11-/SHDN,掉电模式控制输入端,低电平有效;12-AGND,模拟地;13~20-CH0~CH7,模拟信号输入端;21-REFADJ,参考电压输出/外部调节输入;23-REF,参考电压缓冲输出/ADC的参考输入。
MAX1270的控制字
MAX1270的8位控制字及其功能如表1所示。最高位START为起始位(高电平),标志控制字的开始。/CS为低电平期间,控制字在时钟脉冲SCLK作用下先高位后低位通过DIN端输入。
BIT7(MSB) BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
START SEL2 SEL1 SEL0 RNG BIP PD1 PD0
时钟模式与转换速率
PD1PD0为掉电/时钟模式选择位。PD1PD0=10、11时为省电模式。正常工作时MAX1270有外部时钟与内部时钟两种工作模式。PD1PD0=01时为外部时钟模式,串行数据的移入、移出以及数据采集、转换都由SLCK端的输入脉冲控制。外部时钟模式分为25SCLK/s和18 SCLK/s两种方式,后者转换速率稍快的原因是在全部数据转换期间/CS始终维持有效电平。我们这里采用18 SCLK/s的外部时钟模式,其采样时序图如图5.90所示。
通道选择与输入范围
SEL2~SEL0为通道选择位,000~111分别选择输入通道CH0~CH7。RNG~BIP为输入范围选择位,MAX1270有4种输入范围。RNG~BIP置00时 0~5V单极性输入, 置01时0~+10V单极性输入; 置10时 -5~+5V双极性输入;置11时-10~+10V双极性输入。
传输函数与输出数据格式
对单极性输入,1LSB=FS/4096,输出数据为12位二进制码。对双极性输入,1LSB=FS/2048,输出数据为12位二进制补码。
MAX1270可使用芯片内的4.096V参考电压,也可使用外部参考。这里我们将使用内部参考电压。
3. 系统结构框图
STM32微控制器起到连接PC和MAX1270的作用。PC通过USB总线下传用户命令,微控制器通过SPI总线与MAX1270通信,包括发送命令字和收集采样数据。由于MAX1270自身不带采样率控制,所以必须通过STM32微控制器的定时器来触发采样操作,从而实现采样率的控制。STM32微控制器同时将采样得到的数据通过USB总线上传到PC。具体的连接可参见图5.92 数据采集器原理图。
5.6.2 软件设计
在本系统中,软件设计分为三个部分:固件设计,USB驱动设计和PC程序设计。
1. 固件(firmware)设计
固件需要完成的任务包括两方面,一是与PC的数据交互,二是采样控制。
1) 与PC的数据交互:通过USB接口实现。STM32F103C8嵌入的USB2.0接口支持全速12Mbit/s。有8个可配置端点。端点支持控制传输、同步传输和批量传输多种模式。在这里我们将实现2个批量传输,端点1用于批量传输IN,端点2用于批量传输OUT(注意:端点0总是用于单缓冲模式下的控制传输)。传输的数据内容主要包括下传的控制命令和上传的采样数据。其中控制命令主要是开始采样和停止采样,开始采样命令中带有三个参数,通道、采样范围和采样率。
2) 采样控制:微控制器通过SPI1与MAX1270连接,MAX1270自身不带有控制功能,是通过在其DIN引脚上传入命令字(其格式说明参见MAX1270介绍章节)进行采样的。命令字中需要的配置参数(通道和采样范围)是由PC下传的控制命令决定的。而采样率控制是通过微控制器的一个定时器TIM2来实现的。根据采样率设置定时器TIM2,在每个TIM2的中断中向MAX1270发送一个命令字完成一次采样。采样得到的数据通过SPI1读取,然后通过USB上传到PC。为了减轻微控制器的CPU负荷,可以充分利用STM32微控制器DMA性能,通过DMA来实现采样数据从SPI1的接收缓冲区到USB发送缓冲区的转移。
固件的程序流程图如图5.93所示。
固件可以在Keil或者IAR环境下开发。关于这两个开发平台的使用请参考本章前两部分。
STM32固件库提供了很强大的封装,大大简化了用户程序的开发。在本例中我们主要用到TIM、SPI和USB,关于这三种外设的使用请参阅本书第三章 STM32系列微控制器存储器和外设 和 第四章 STM32固件库。另外在STM_DK的示例程序中都有相关的例子,只要稍加修改,进行一些整合,就可以很顺利地完成固件程序的开发。
最新开源项目
本站相关产品&&&
本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
友情链接:基于STM32的多路数字式温度采集系统_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于STM32的多路数字式温度采集系统
上传于||暂无简介
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩34页未读,继续阅读
你可能喜欢查看: 1257|回复: 3
手动校准STM32内部温度传感器
主题帖子精华
新手上路, 积分 39, 距离下一级还需 11 积分
在线时间0 小时
不知道为什么我手上的STM32F103ZET6的Vrefint 读出来的值是1.089V,准确的应该是1.2V,如果相差这么多的话看见温度传感器肯定不准了。
还有看到有些朋友的温度读出来44C,在常温下面温升也有十几度,对stm32是不可以理解的。我的在没有校准下读到的是58C,室温感觉应该在25C。
还是来看看代码我怎么校准的吧
void DMA_Config(void)
&DMA_InitTypeDef DMA_InitS//定义DMA初始化结构体
&DMA_DeInit(DMA1_Channel1);//复位DMA通道1
&DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_A //定义 DMA通道外设基地址=ADC1_DR_Address
&DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedV //定义DMA通道存储器地址
&DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外设为源地址
&DMA_InitStructure.DMA_BufferSize = 3;//定义DMA缓冲区大小3
&&& //BufferSize=2,因为ADC转换序列有2个通道
&&& //如此设置,使序列1结果放在AD_Value[0],序列2结果放在AD_Value[1]
&DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_D//当前外设寄存器地址不变
&DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_E//当前存储器地址不变
&DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfW//定义外设数据宽度16位
&DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfW //定义存储器数据宽度16位
&DMA_InitStructure.DMA_Mode = DMA_Mode_C//DMA通道操作模式位环形缓冲模式
&DMA_InitStructure.DMA_Priority = DMA_Priority_H//DMA通道优先级高
&DMA_InitStructure.DMA_M2M = DMA_M2M_D//禁止DMA通道存储器到存储器传输
&DMA_Init(DMA1_Channel1, &DMA_InitStructure);//初始化DMA通道1
&DMA_Cmd(DMA1_Channel1, ENABLE); //使能DMA通道1
/*************************************************
函数: void ADC_Config(void)
功能: ADC配置
**************************************************/
void ADC_Config(void)
& ADC_InitTypeDef ADC_InitS//定义ADC初始化结构体变量
& ADC_InitStructure.ADC_Mode = ADC_Mode_I//ADC1和ADC2工作在独立模式
& ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能扫描
& ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
& ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_N//有软件控制转换
& ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R//转换数据右对齐
& ADC_InitStructure.ADC_NbrOfChannel = 3;//转换通道为通道1
& ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
&&&& //ADC内置温度传感器使能(要使用片内温度传感器,切记要开启它)
& ADC_TempSensorVrefintCmd(ENABLE);
& ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5);
&ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);& //常规转换序列2:通道16(内部温度传感器),采样时间&2.2us,(239cycles)
& ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 3, ADC_SampleTime_239Cycles5);& //常规转换序列2:通道16(内部温度传感器),采样时间&2.2us,(239cycles)
& //ADC1选择信道14,音序器等级1,采样时间239.5个周期
& ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
& ADC_Cmd(ADC1, ENABLE);//使能ADC1
& ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器
& while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
& ADC_StartCalibration(ADC1);//开始ADC1校准
& while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
& ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
上面是ADC和DMA配置。ADC CH8不用管,做其他用处。
u16 GetTemp(void)
&&& vu16 Current_T
//&&& ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:
//&&&&&&&&& V25 - VSENSE
//& T(℃) = ------------& + 25
//&&&&&&&&&& Avg_Slope
//&& V25:& 温度传感器在25℃时 的输出电压,典型值1.43 V。
//& VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为:
//&&&&&&&&&&& ADC_ConvertedValue * Vdd
//& VSENSE = --------------------------
//&&&&&&&&&&& Vdd_convert_value(0xFFF)
//& Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。
&&& Current_Temp = (1.42 - (ADC_ConvertedValue[1]*3.3/4096)/(ADC_ConvertedValue[2]*3.3/1.2/4096))* + 25;
&&& return (s16)Current_T
ADC_ConvertedValue[2]*3.3/4096 是读出的Vrefint的电压。除以1.2得到一个系数,用温度传感器的值除以它,得到修正的温度电压。
校准后的电压度数为27C,可以接受的值
主题帖子精华
在线时间130 小时
这个东西,仅供参考而已。
用内部温度传感器,误差大大的...
我的淘宝小店:
主题帖子精华
新手上路, 积分 39, 距离下一级还需 11 积分
在线时间0 小时
是的,内部传感器误差太大
主题帖子精华
新手上路, 积分 21, 距离下一级还需 29 积分
在线时间0 小时
屋子里22度,能读出32度......是不是ST官方资料有问题,完全按照它的算法做的
Powered by您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于STM32的温湿度监测.doc31页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
《物联网工程设计与实施》项目设计
项目课题:
基于STM32的温湿度检测
计算机科学与技术学院
物联网工程
项目经理:
1座机电话号码
副 经 理:
1座机电话号码
项目成员:
1座机电话号码
项目成员:
1座机电话号码
项目成员:
1座机电话号码
1座机电话号码
1座机电话号码
1座机电话号码
指导教师:
一.设计目标 4
二.设计方案 4
三.实验所需器材 5
四.设计内容 5
4.1 STM32模块 5
4.2 AM2302介绍 6
4.2.1 产品概述 6
4.2.2 应用范围 7
4.2.3 产品亮点 7
4.2.4 单总线接口定义 7
4.2.5 传感器性能 8
4.2.6 单总线通信 9
4.3 Nokia 5110 介绍 10
4.3.1 SPI接口时序写数据/命令 11
4.3.2 显示汉字 11
4.3.4 显示图形 11
4.4 原理图设计 11
4.5 PCB板设计 13
五.实验软件设计 13
5.1 温湿度传感器DHT22的程序 13
5.2 湿度显示函数 17
5.3主函数程序 18
5.3.1显屏程序 19
六.作品实物展示 27
七.设计总结 28
基于STM 32 的温湿度检测
随着现代社会的高速发展,越来越多的科学技术被应用于农业生产领域。在温室大棚中对温湿度、二氧化碳浓度等外部参数的实时准确的测量和调节更是保证农业高效生产的重要前提。 本次课程设计中实现了一个基于STM32F103VET6的智能温湿度检测系统,目的是实现温湿度的采集和显示,温湿度的采集是作为自动化科学中一个必
正在加载中,请稍后...君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于是stm32温度测量系统
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 stm32 内部晶振 程序 的文章

 

随机推荐