嵌入式LAB 5:uC/OS室温计

来源:互联网 发布:nginx http2 server 编辑:程序博客网 时间:2024/04/27 16:17

前期工作准备:

Mac OS X + Windows 7虚拟机
安装STM32 ST-LINK Unity。用于烧录程序。
安装STM32 ST-LINK所需要的驱动
安装Keil UVision 5,这是IDE,可以生成Hex文件,也可以烧录到板子上。

器材准备:

STM32F103板子一个
七段数码管LG3641BH
温湿度传感器DHT11
面包板
若干导线

实验流程

uCOS-II工程创建

官方下载ucos源码,我们采用的是micrium_stm32f103-sk_ucos-ii。开发工具版本为MDK511。其实在用Keil之前还下载了STM32f103的包,这样才能新建这样的工程。

1、新建ucos工程,选择STM32F103VE,选择CMSIS下的CORE和Device下的Startup,以及Device下的StdPeriph Drivers下的Framework,RCC,和GPIO。
选择相应的组件
2、工程中和实际目录中都新建几个目录,APP,UCOS,BSP,LIB,CPU,Output。
3、工程上右键,Options,Output页签,Select Folder for Objects,进入Output目录,点击OK。
4、把Micrium\Software\uCOS-II\Source目录中的文件拷贝到UCOS目录下,并添加到工程中。
5、工程Options中,C/C++页签,Include Paths,点击后面省略号可选择include目录,添加UCOS路径。
6、复制Micrium\Software\EvalBoards\ST\STM3210B-EVAL\RVMDK\OS-Probe目录下的文件app_cfg.h,os_cfg.h和includes.h到APP目录中,并在Include Paths中添加APP。
7、复制Micrium\Software\uCOS-II\Ports\arm-cortex-m3\Generic\RealView目录下的所有文件到CPU目录,添加到工程和Include Path中。
8、工程Options中,C/C++页签,Defines中添加 USE_STDPERIPH_DRIVER。
9、把RTE和RTE\Device\STM32F103VE添加进Include Paths中。
10、修改os_cfg.h文件,#define OS_APP_HOOKS_EN 1为0。
11、BSP目录下新建BSP.c文件,添加内容如下:

#include <bsp.h>CPU_INT32U  BSP_CPU_ClkFreq (void) {    RCC_ClocksTypeDef  rcc_clocks;    RCC_GetClocksFreq(&rcc_clocks);    return ((CPU_INT32U)rcc_clocks.HCLK_Frequency);}INT32U  OS_CPU_SysTickClkFreq (void) {    INT32U  freq;    freq = BSP_CPU_ClkFreq();    return (freq);}

12、复制Micrium\Software\EvalBoards\ST\STM3210B-EVAL\RVMDK\BSP目录下的bsp.h到 BSP目录中
13、复制Micrium\Software\uC-CPU\ARM-Cortex-M3\RealView目录和Micrium\Software\uC-CPU目录下的所有文件到CPU目录下,并添加到工程和Include Path中。
14、复制Micrium\Software\uC-LIB目录下的所有.h文件到LIB目录下,并添加到Include Path中。
15、注释掉bsp.h中的#include

#include <includes.h>int main(){  OSInit();  OSStart();  return 0;}

18、
注释掉includes.h文件中的#include “stm32f10x_lib.h” 和
include lcd.h” 这样可以编译通过了。

结构图
结构图

编译成功了
编译成功

7段数码管时分复用

我们的LG3641BH的七段数码管是共阳极的数码管。使得七段数码管的四个数字同时亮起用到了很经典的时分复用的方式,高频率点亮每个数码管,使人眼看起来所有的数字都是同时亮起的。对于共阳数码管,负极低电平时点亮。做过逻辑/计组实验就知道,控制4位7短数码管需要12条线,其中4条线是是位选,表示哪一个位置两期,剩下8位就是7段数码管+小数点。在程序中,我们接线的方法,参考博客。

7段

DHT11数据读取及显示

DHT11是一款有已校准数字信号输出的温湿度传感器。作为一种单总线设备,输入输出均为同一个引脚。使用DHT11的时候,需要连接三个引脚,引脚1接VCC,引脚2接是stm32的某个GPIO口,引脚4接地。而引脚3悬空。
对DHT11来说,数据的传输步骤如下:
stm32输出低电平至少18ms(只有此处为ms,其余均为μs)。
stm32输出高电平20~40μs
DHT11反馈低电平80μs
DHT11反馈高电平80μs

以上为双方握手,以下开始准备接受数据。数据总长40个bit,输入为大端输入,即高位的bit先进行传输。每个byte表示一个数值。按照接受顺序分别表示湿度整数,湿度小数,温度整数,温度小数,校验码。校验码为前方四个byte的和。
对于每个传输的bit,DHT11会首先输出50μs的低电平。而后以输出高电平的时间决定每个bit的值。高电平持续时间为20~30μs的为bit 0,高电平持续时间为70μs的表示bit 1。整个通信过程大约耗时4ms。

连接图
连接图

温度显示:22度
温度

被电吹风吹过之后的温度显示:34度
温度

0 0