STM32项目设计:基于STM32的风向风速测量仪

目录

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

一、视频 

二、项目功能概述

三、材料选择

四、原理图和PCB

五、程序设计

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

一、视频 

基于stm32的风速风向检测设计​​​​

二、项目功能概述

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

2、通过DHT11获取温湿度

3、OLED液晶显示测量数据

4、串口传输数据

三、材料选择

1、风速风向传感器

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

2、DHT11温湿度传感器

 3、4线OLED液晶屏

4、RS485模块

四、原理图和PCB

 

五、程序设计

 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);
  
}



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);//
  }
}

  • 15
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森旺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值