目录
资料下载地址:基于STM32超声波风速风向测量仪
一、功能描述
通过超声波风速风向传感器检测风速风向并在液晶屏幕上显示出来
二、视频展示
基于STM32超声波风速风向测量仪
三、原理图
四、部分代码
#include "main.h"
#include "stm32f1xx.h"
#include <stdlib.h>
#include "./led/bsp_led.h"
#include "./adc/bsp_adc.h"
#include "string.h"
#include "oled.h"
uint16_t value[5];
char strvalue[10];
char strvalue2[100];
float Current_Voltage2;
void Get_val(void);
int main(void)
{
HAL_Init();//HAL库初始化
SystemClock_Config();//系统时钟配置为72M
ADCx_Init();//AD端口初始化
I2C_GPIO_Config();//I2C端口初始化
OLED_init();//OLED液晶屏初始化
while (1)
{
Get_val();//获取风速风向数据
HAL_Delay(500);//延时100ms
}
}
void Get_val(void)
{
value[0] = ADC_Get_Average(0,100);//获取风向模拟量
Current_Voltage = value[0] * 360 / 2482;//求出风向
if(Current_Voltage >= 360 )
Current_Voltage = 360;
sprintf(strvalue,"Direct: %d ",Current_Voltage);//浮点数据转化为字符串
OLED_P8x16Str(15,4,strvalue);//显示风向
value[1] = ADC_Get_Average(6,100);//获取风速模拟量
Current_Voltage2 = value[1] * 30.0f / 2482.0f;//求出风速
sprintf(strvalue2,"Speed: %.1f m/s ",Current_Voltage2);//浮点数据转化为字符串
OLED_P8x16Str(15,6,strvalue2);//显示风速
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 72000000
* HCLK(Hz) = 72000000
* AHB Prescaler = 1
* APB1 Prescaler = 2
* APB2 Prescaler = 1
* HSE Frequency(Hz) = 8000000
* HSE PREDIV1 = 1
* PLLMUL = 9
* Flash Latency(WS) = 2
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef clkinitstruct = {0};
RCC_OscInitTypeDef oscinitstruct = {0};
/* Enable HSE Oscillator and activate PLL with HSE as source */
oscinitstruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
oscinitstruct.HSEState = RCC_HSE_ON;
oscinitstruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
oscinitstruct.PLL.PLLState = RCC_PLL_ON;
oscinitstruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
oscinitstruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&oscinitstruct)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
clkinitstruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
clkinitstruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
clkinitstruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
clkinitstruct.APB2CLKDivider = RCC_HCLK_DIV1;
clkinitstruct.APB1CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&clkinitstruct, FLASH_LATENCY_2)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/