栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32单片机BMP180气压传感器(仿真+程序)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32单片机BMP180气压传感器(仿真+程序)

本设计:
基于STM32的BMP180气压传感器(仿真+程序)
Proteus仿真版本:proteus 8.9
程序编译器:keil 5
编程语言:C语言
编号C0026

设计说明:
通过STM32读取BMP180输出的数据通过串口及LCD显示屏,将高度,温度大气压强信息显示出来。
注:仿真效果有些许误差,不能100%还原传感器,误差大概1%

仿真图(提供源文件):

源程序(提供源文件):

#include "main.h"
#include "stm32f1xx.h"
#include "./usart/bsp_debug_usart.h"
#include "./led/bsp_led.h"
#include "./i2c/bsp_i2c_ee.h"
#include "BMP180.h"
#include "LCD.h"
#include "math.h"
uint8_t cal_flag = 0;
uint8_t k;
typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;

long double double_buffer[7] = {0};
int int_bufffer[7] = {0};

#define DOUBLE_ADDR       10
#define LONGINT_ADDR      70


int main(void)
{
    char str[80];
    extern long   result_UT;
    extern long  result_UP;	
    u32 result_UPP,temp;
    float altitude;	  
  HAL_Init();        
   
  SystemClock_Config();

  
  DEBUG_USART_Config();
  
	printf("rn 这是一个EEPROM 读写小数和长整数实验 rn");
//LCD1602_GPIO_Config();   //开启GPIO口
  HAL_Delay(10);  //延时一段时间	
  
  i2c_CfgGpio();
	Init_BMP180();        //初始化bmp180	
	LCD_init();
	HAL_Delay(10);          
  while (1)
  {  
      
  
    bmp180Convert();//添加报警 气压过低时候 高原地区气压低于600mmhg,而1mmhg=133.3p。所以为80000p
		altitude=44330.0*(1-pow((float)result_UP/101325,1/5.255));            //计算高度
//		OLED_ShowNum(77,32,altitude,4,12);  
    result_UPP=result_UP/100;
		printf("大气压强 %d.%d 帕rn",result_UPP,result_UP%100);
    result_UPP=altitude;
    printf(" 高度%d mrn",result_UPP);
    sprintf(str, "%dM %d.%dPa",result_UPP ,result_UP/100,result_UP%100);
    LCD_write_string(1, 0, (char *)str);
//		OLED_ShowNum(77,52,(u8)(result_UT*0.1),4,12);     //显示温度整数部分 因为测量值例如为245没有小数点.....                                         //可以加一个判断 报警
		temp=result_UT;                         //计算小数部分
    printf("温度  %d.%d 摄氏度rn",temp/10,temp%10);
    sprintf(str, " %d.%d C",temp/10 ,temp%10);
    LCD_write_string(1, 1, (char *)str);
    HAL_Delay(1000);

      
  }
}
void SystemClock_Config(void)
{
   RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
//    Error_Handler();
  }
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
//    Error_Handler();
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
//    Error_Handler();
  }

    
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

内容如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号