目录

一、项目功能概述

二、材料选择

三、程序设计

四、实物

资料下载地址:基于STM32风向风速检测设计

一、项目功能概述

1、通过风向、风速传感器获取当前风向、风速

2、通过DHT11获取温湿度

3、OLED液晶显示测量数据

4、串口传输数据

二、材料选择

1、风速风向传感器

风速风向传感器输出方式选择RS485

2、DHT11温湿度传感器

3、4线OLED液晶屏

4、RS485模块

三、程序设计

RS485数据收发

#include "./usart/bsp_debug_usart.h"
#include "oled.h"
#include "string.h"UART_HandleTypeDef UartHandle;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
uint32_t mWindSpeed = 0;
uint32_t mWindDirec = 0;_DEF_UART  RS485_Uart1,RS485_Uart2,RS485_Uart3;void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){// Error_Handler();}huart2.Instance = USART2;huart2.Init.BaudRate = 4800;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart2) != HAL_OK){// Error_Handler();}huart3.Instance = USART3;huart3.Init.BaudRate = 4800;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK){// Error_Handler();}__HAL_UART_DISABLE_IT(&huart1,UART_IT_TC);__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);//使能接收中断__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//使能空闲中断HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);__HAL_UART_CLEAR_IDLEFLAG(&huart1);__HAL_UART_DISABLE_IT(&huart2,UART_IT_TC);__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);//使能接收中断__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);//使能空闲中断HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);__HAL_UART_CLEAR_IDLEFLAG(&huart2);__HAL_UART_DISABLE_IT(&huart3,UART_IT_TC);__HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);//使能接收中断__HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE);//使能空闲中断HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);HAL_NVIC_EnableIRQ(USART3_IRQn);__HAL_UART_CLEAR_IDLEFLAG(&huart3);}
void Main_Uart1(void)
{uint16_t CRCVal = 0;memset(RS485_Uart1.Buf,0,50);RS485_Uart1.Buf[0] = 0x01;RS485_Uart1.Buf[1] = 0x03;RS485_Uart1.Buf[2] = 0x03;RS485_Uart1.Buf[3] = mWindDirec >> 8;RS485_Uart1.Buf[4] = mWindDirec;RS485_Uart1.Buf[5] = mWindSpeed >> 8;RS485_Uart1.Buf[6] = mWindSpeed;CRCVal = CRC16(RS485_Uart1.Buf,7);RS485_Uart1.Buf[7] = CRCVal;RS485_Uart1.Buf[8] = CRCVal >> 8;HAL_UART_Transmit(&huart1,RS485_Uart1.Buf,9,1000);delay_ms(10);
}void Main_Uart2(void)
{if(RS485_Uart2.RcvFinish == 0)           return;RS485_Uart2.RcvFinish = 0;Decode_Recv_Usart2(&RS485_Uart2);RS485_Uart2.Cnt = 0;memset(RS485_Uart2.Buf,0,50);delay_ms(10);HAL_UART_Transmit(&huart2,Wind_Direc_Str,8,1000);
}void Main_Uart3(void)
{if(RS485_Uart3.RcvFinish == 0)           return;RS485_Uart3.RcvFinish = 0;Decode_Recv_Usart3(&RS485_Uart3);RS485_Uart3.Cnt = 0;memset(RS485_Uart3.Buf,0,50);delay_ms(10);HAL_UART_Transmit(&huart3,Wind_Speed_Str,8,1000);}unsigned short CRC16(unsigned char* data,int count)
{unsigned char CRC16Lo = 0xFF;unsigned char CRC16Hi = 0xFF;   //CRC???unsigned char SaveHi;unsigned char SaveLo;unsigned char Flag = 0;int i = 0;for (; i < count; i++){CRC16Lo = CRC16Lo ^ data[i]; //??????CRC???????for (Flag = 0; Flag <= 7; Flag++){SaveHi = CRC16Hi;SaveLo = CRC16Lo;CRC16Hi = CRC16Hi >> 1;      //??????                     CRC16Lo = CRC16Lo >> 1;      //??????                     if ((SaveHi & 0x01) == 0x01) //???????????1                     {CRC16Lo = CRC16Lo | 0x80;   //???????????1                     }             //?????0                     if ((SaveLo & 0x01) == 0x01) //??LSB?1,??????????                     {CRC16Hi = CRC16Hi ^ 0xA0;//???&HA001  CRC16Lo = CRC16Lo ^ 0x01;}}}return (CRC16Lo<<8)|CRC16Hi;
}

main.c

int main(void)
{   char ch = 0;HAL_Init();SystemClock_Config();/* 配置系统时钟为72 MHz */RTC_CalendarConfig();MX_USART1_UART_Init();BASIC_TIMx_Init();I2C_GPIO_Config();DHT12_Init();OLED_init();OLED_full();OLED_clear();display();delay_ms(2000);//Get_Wind_Direct();while (1){Main_Uart1();Main_Uart2();Main_Uart3();display();sensor_read();Get_Time();delay_ms(1000);//}
}

四、实物

STM32项目设计:基于STM32的风向风速测量仪相关推荐

  1. 基于python的气象数据分析统计服_基于Python的风向风速数据分析的设计与实现

    基于 Python 的风向风速数据分析的设计与实现 李文倩 ; 刘婕 [期刊名称] < <信息通信> > [年 ( 卷 ), 期] 2019(000)009 [摘要] Pyth ...

  2. 基于51单片机的脉搏测量仪(心率计)

    具体实现功能 本系统由STC89C51/52单片机+LCD1602显示模块+5mm红外接收管+LM358运放电路+按键模块等构成. 具体功能: (1)手指放到红外对管中,2秒内读出心率: (2)LCD ...

  3. 基于51单片机的脉搏测量仪

    基于51单片机的脉搏测量仪 1)红外光电传感器产生脉冲信号,经过放大整形后,输入单片机内进行相应的控制,从而测量出一分钟内的脉搏跳动次数. 2)设定上限次数和下限次数,当测量的范围超过设定的范围则驱动 ...

  4. 基于51单片机的脉搏测量仪设计与实现

    目录 前言 一.设计背景 二.系统功能 三.系统硬件设计 3.1 总体方案设计 3.2 信号采集电路设计 3.3 报警电路设计 3.4 下载电路 3.5 电源电路设计 3.6 OLED显示设计 3.7 ...

  5. 基于51单片机的噪声测量仪仿真

    具体实现功能 具体实现功能: ①LCD1602实时显示噪声分贝值,精度为0.1db: ②可以按键设置报警值,实现声光报警:三个按键:设置键.加键.减键: ③当噪声分贝值未超过阀值时,绿灯闪烁:当超过阈 ...

  6. STM32毕业设计——基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码)——智能家居系统

    基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于STM32+MQTT+WiFi技术的智能家居系统设计与实现,文章末尾附有本毕业设计的论文 ...

  7. STM32毕业设计——基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码)——六足机器人控制系统

    基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于STM32+JAVA+Android的六足机器人控制系统设计与实现,文章末尾附有 ...

  8. STM32项目--基于STM32的办公室安保(智能家居)系统设计

    基于嵌入式系统的办公室安保系统设计 简介 设计一套基于STM32的办公室安防系统,系统内部包括门禁系统.灾害报警系统.人脸识别系统和交互中心四个子系统. 门禁系统:主要实现对门禁卡的存储和读取并识别已 ...

  9. STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32开发板实现传感数据采集-DHT11温湿度采集 一.前言 本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等.本项目采用ARM结构中最为代表的Co ...

最新文章

  1. [ZZ]好的测试应该具备哪些特质?
  2. 获取文件绝对路径和目录
  3. Star 10.9K!这份Google面试攻略,牛逼了!
  4. javafx 打开新窗口_新的JMetro JavaFX 11兼容版本
  5. [css] 使用css如何设置背景虚化?
  6. python新奇检测_3种Python检测URL状态
  7. 面试官:Redis中的缓冲区了解吗
  8. android相关论文,android
  9. leetcode 删除链表的倒数第N个节点
  10. L1-053 电子汪 (10 分)—团体程序设计天梯赛
  11. 韩顺平JAVA学习笔记(入门自用)
  12. 计算机图形学代码之三角形绘制
  13. 【Android】EasyClient与EasyCamera的移植学习
  14. 服务器pe安装win7系统安装教程,win7 winpe安装过程图文教程
  15. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day8】 —— Redis2
  16. RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
  17. pyQt5图片放大和缩小
  18. [IMX6Q][Android5.1]移植笔记 --- Kernel启动无法挂载文件系统
  19. TEASLA M40安装问题记录
  20. AI崛起,阿里的科技孵化力|甲子光年

热门文章

  1. JAVA学习总结(2)
  2. (winform)winform 通过 PictureBox添加图片的四种方法。
  3. 语音翻译成文字的翻译方法
  4. DSRC通信协议标准
  5. Qt Quick 3D学习:模型加载
  6. profit from/prove to/provide with等动词词组
  7. 无聊猿将与 Coinbase 共同制作电影三部曲进军好莱坞
  8. 小白打boss之路——2020fintech训练营数据赛道
  9. 电脑连不上网络,怎么办?
  10. matlab黑白棋盘格,请不要一再错过!黑白棋盘格魔法瓷砖(组图)