本实例基于STM32W108的SimpleMac协议栈,利用无线节点完成对温度、湿度、超声波、烟雾、声音、光敏等传感器的控制及数据采集,并实时将数据发送到STM32W108开发板,完成传感器数据的汇集,并通过串口传送给PC机。
13.4 传感器数据采集程序设计与实现
下面将根据不同的传感器分别进行传感器数据采集程序的设计说明,最后给出数据包的发送、接收及主函数部分的详细内容。
13.4.1 温度传感器
temperature.h文件内容:
#ifndef __TEMPERATURE_H__ #define __TEMPERATURE_H__ #define TEMP_BUS PORTA_PIN(5) //PA5 #define TEMP_BUS_INPUT_GPIO GPIO_PAIN //端口A输入寄存器 #define TEMP_BUS_OUTPUT_GPIO GPIO_PAOUT //端口A输出寄存器 #define TEMP_BUS_GPIO_PIN PA5_BIT //PA5_BIT的值为4 #define TEMP_BUS_WAKE_SOURCE 0x00000080 #define TEMP_BUS_SET (GPIO_PASET_ADDR+((GPIO_PBCFGL_ADDR -GPIO_PACFGL_ADDR)*(TEMP_BUS/8))) #define TEMP_BUS_CLR (GPIO_PACLR_ADDR+((GPIO_PBCFGL_ADDR -GPIO_PACFGL_ADDR)*(TEMP_BUS/8))) extern u16 Read_Temperature();// 读温度函数 #endif |
temperature.c文件:
#include PLATFORM_HEADER #include BOARD_HEADER #include "temperature.h" #include "hal/micro/micro-common.h" #include "hal/micro/cortexm3/micro-common.h"
#define LOW 0//低电平 #define HIGH 1//高电平
/************************************************************************** 功能描述:设置端口,将端口置高或置低 输入参数:status:电平的参数,高电平或低电平 输出参数:无 *************************************************************************/ static void SetPort(int8u Statu) { halGpioConfig(TEMP_BUS, GPIOCFG_OUT); //设置总线为输出状态 if(TEMP_BUS/8 < 3) { if(Statu==HIGH)//高电平 *((volatile int32u *)TEMP_BUS_SET) = BIT(TEMP_BUS&7); //设置寄存器bit4 else *((volatile int32u *)TEMP_BUS_CLR) = BIT(TEMP_BUS&7); //清除寄存器bit4 } }
/************************************************************************** 功能描述:获取端口状态 输入参数:无 输出参数:u8类型值,1或0,0表示低电平,1 |