1、基于STM32F103的网络温度报警器物联网讲述基于STM32F103 的网络温度报警器设计作品名:基于STM32F103 的网络温度报警器设计作者:陈华健贾从含时间:2015年6月17日目录:1引言 12利用普通二极管 PN结测试环境温度原理 23器件的选择和芯片的介绍 44.UC/0S系统移植 65文件系统的移植与文件系统基本函数的功能 166.Uip及socket实现方法 271引言近年来随着科技的飞速发展, 嵌入式的应用正在不断深入, 同时带动传统控制检测技术 日益更新。在实时检测和自动控制的嵌入式应用系统中, 嵌入式往往作为一个核心部件来使 用,仅嵌入式方面知识是不够的,还应根据具体
2、硬件结构软硬件结合,加以完善。本系统使用 STM32F103 实现了接收由上位机通过 TCP协议发出的温度报警阈值信号,并存于SD片卡中。单片机利用普通二极管的 PN结测试环境温度, 每30s采集一次,将采集到的温度信息补充上时间(时、分、秒、毫秒)标注存储在存储芯片中。并将报警时 的温度值与当前时间的温度进行比较, 当前温度大于阀值温度时, 通过发光二极管或蜂鸣器报警。上位机通过 TCP,向单片机发送“ Readnfo ”命令后,单片机能将 SD卡中存储的 所有数据发到PC机的串口助手中;数据格式美观、易懂。本系统采用普通二极管 PN节的温度特性来测量环境温度不失为一种低成本而又容易实现的环
3、境温度测量方式。使用 STM32自带的ADC模块进一步降低了成本和设计难度。采用大容量存储芯片可以长时采集环境数据, 并且在采集到的温度补充上时间信息使数据更加可信,同时移植了文件系统方便文件在 WINDOWS 下的读取和处理。本系统采用了无线传输的方式配合可靠的电源设备或太阳能设备可以在室外持续的传输回温度信息或其他的气象数据(需配合适当的传感器),减少了人工成本,并且更加适应 于野外大规模投放接点。2.利用普通二极管PN结测试环境温度原理温度是表示物体或环境冷热程度的一种物理量, 而温度传感器是一种能将温度变化转换成电量变化的元器件。由于二极管制造工艺的特殊性,我们可以利用二极管的伏安特性
4、来测量环境的温度,它的伏安特性如下图众所周知,将PN结用外壳封装起来, 并加上电极引线就构成了半导体二极管, 即所谓的二极管。由P区引出的电极为阳极,由 N区引出的电极为阴极,如下图所示困眼3 二樓管转站耳也略图带抽号温度对二极管的性能有较大的影响,温度升高时,二极管的正向压降将减小,每增力口1C,正向压降减小约 2mV,因此可以使用这一特性来测量环境温度。由半导体理论可以得出, PN结所加端电压u与流过它的电流i的关系为:其中,Is为反向饱和电流,对于硅材料来说,Is约为10pA; q为电子的电量,q=1.6*10 的-9次方库伦;k是玻耳茨曼常数,k=1.38*10 的-23次方J/K ;
5、 T为绝对温度, kT/q 可以用UT来代替, 常温下,即T=300K 时,UT约为26mV。对于足够大的电压,二极管方程可以近似写成那么,二极管两端的电压可以推导出为:因此温度的公式为:3.器件的选择和芯片的介绍本系统采用了 ST公司和高性能微控制器一一 STM32F130ZET6 ,该微控制器具有512KROM以及62K RAM 足以满足该项目的需求。本系统使用到的模块有: ENC28J60模块,0.96 OLED模块,SD卡模块,以及2个无线模块和USB-TTL模块。为了满足这些模块的供电需求另外自己用洞洞板做了 AMS1117的稳压模块,以及采用德州仪器公司的 TPS7333稳压芯片制
6、作了稳压模块为无线模块提供稳定可靠的电源使数据的发送和接收更加稳定。AMS1117系列稳压芯片有可调版与多种固定电压版,设计用于提供 1A输出电流且工作压差可低至1V。在最大输出电流时, AMS1117器件的压差保证最大不超过 1.3V,并随 负载电流的减小而逐渐降低。本系统采用的是输出 3.3v的固定电压版本。电路图如下:VCC5VVCCIN OUT3.3U N DTPS7333是由德州仪器公司研发生产的单通道线性稳压芯片 ,具有单输出LDO、500mA、固定电压(3.3V)、集成SVS、低静态电流,性能十分稳定,输出电压纹波低。应 用电路比较简单,电路如下:卞 TPS7326, TPS73
7、30, TPS7333, TPS7348. TPS73S0 (fixed-voltage options)I Capacitor selection is nontnvial See application information section for detailsFigure 2, Typical Application Configuration4.UC/0S系统移植uC/OS是一个微型的实时操作系统,包括了一个操作系统最基本的一些特性, 如任务调度、任务通信、内存管理、中断管理、定时管理等。而且这是一个代码完 全开放的实时操作系统,简单明了的结构和严谨的代码风格,非常适合初涉嵌入式
8、操作系统的人士学习。很多人在学习STM32中,都想亲自移植一下uC/OS,而不是总是用别人已经移 植好的。在我学习 uC/OS的过程中,查找了很多资料,也看过很多关于如何移植 uC/OS到STM32处理器上的教程,但都不尽人意,主要是因为是时间比较赶, 无法 静下心开好房学习,在一个月时间内完成 STM32的学习以及UIP、文件系统的移植还是比较辛苦和困难的。1.首先需要从官网上下载 UC/OS的源码,并且选择STM32F103ZET6由于官方没 有公布KEIL版本的工程只有IAR版本,所以需要进行一定的修改才可用于 KEIL中。 UC/OS的文件结构如下图所示:Section 2 ARM C
9、ortex-M3 / Target BoardFigure 1-1, Relationship between modules.2.按照下图的文件结构搭建 uC/OS工程文件结构1把LED工程所在的文件夹先改名为: STM32+UCOS2在USER文件夹下新建includes.h 头文件。3按照之前给的uC/OS-ll文件结构图,我们在工程的根目录下建立 BSP文件夹、APP文件夹和uCOS-ll文件夹。BSP文件夹存放外设硬件驱动程序。APP文件夹存放应用软件任务uCOS-II文件夹uC/OS-ll的相关代码4把USER文件夹下的led.h 和led.c文件剪切到 BSP文件夹里。在BSP文
10、件夹里新建 BSP.c和BSP.h文件。5在APP文件夹下建立 app.h、app.c和app_cfg.h 文件。拷贝 uC/OS-ll 源代码附件那里的 MicriumSoftwareEvalBoardsST STM32F103ZE-SKIAROS-Probe-LCDos_cfg.h 到此目录。6把uC/OS-ll源代码附件那里的MicriumSoftwareuCOS-II 下的Source文件夹复制到工程里刚才新建的 uCOS-ll文件夹里。把 MicriumSoftwareuCOS-llPortsarm-cortex-m3GenericIAR 下的文件复制到工程uCOS-ll文件夹中新建
11、的 Ports文件夹里。复制后,选中全部文件,右键一一属性一一 去掉只读属性 确定。如下图添加include path3.配置 uC/OS-lla. 修改 os_cfg.h :首先禁用信号量、互斥信号量、邮箱、队列、信号量集、定时器、内存管理,关闭调试模式:#defi ne OS_MBOX_EN 0 / 禁用邮箱禁用互斥信号量#defi ne OS_MUTEX_EN 0 /#defi ne OS_Q_EN 0 / 禁用队列#defi ne OS_SEM_EN 0 / 禁用信 号量#defi ne OS_TMR_EN 0 /#defi ne OS_DEBUG_EN 0 /禁用定时器禁用调试b.
12、修改 os_cpu.h注释掉这三行void OS_CPU_SysTickHa ndler(void);void OS_CPU_SysTickl nit(void);INT32U OS_CPU_SysTickClkFreq(void);c. 修改 os_cpu_c.c把 OS_CPU_SysTickHandler(), OS_CPU_SysTickInit() 及如下图的文件注释掉ineine #define #define AdelineOS CPUy NVIC ST CTRL (VOlatile(*( (volatile Os2cPu2CM32WICZSTlCJRREWT f( (volat
13、ile OSCPUC阳(*(volatile OSCPUC阳nVTcprEo_ST (*(v口latileINT32U OXEOOOEOIO)IHT32U *)OxEOOOE014JINT32U *)OxEOOOEOlS)INT32U OxEOOOEOlC)INT8U *OxEOOOED23)ine 皂:f ine Adeline define #defineOS_CPU_CM3_WIC_ST_CTRL_COUNTP M3 NV IC宜 Tc T区h RCOS2CPUZCH3ZHVICZSTZCTRLIINTK OSCPCN 匸NVICST_CTRL_ENABLE OS-CPUCM3NVIC_
14、PP10 MIN0x00010000x000000040x000000020x00000001OxFFd. 修改 os_cpu_a.asm由于编译器的原因要将下面的 PUBIC改为EXPORT :PUBLIC OS_CPU_SR_Save ; Functions declared in this filePUBLIC OS_CPU_SR_RestorePUBLIC OSStartHighRdyPUBLIC OSCtxSwPUBLIC OSIntCtxSwPUBLIC OS_CPU_PendSVHandler e. 修改 os_dbg.c将#defi ne OS_COMPILER_OPT _ro
15、ot改为#defi ne OS_COMPILER_OPT / _root修改 startup_stm32f10x_hd.s因为本次移植是使用标准外设库 CMSIS中startup_stm32f10x_hd.s 作为启动文件的,还没有设置 OS_CPU_SysTickHandler 。而 startup_stm32f10x_hd.s 文件中,PendSV 中断 向量名为PendSV_Handler ,因此只需把所有出现 PendSV_Handler 的地方替换成OS_CPU_Pe ndSVHa ndler 即可。编写 includes.h#ifndef _INCLUDES_H_#defi ne _INCLUDES_H#i nclude stm32f10x.h定时器相关#in elude stm32f10x_rcc.h /SysTick#i nclude ucos_ii.h /uC/O
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1