久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2482|回復(fù): 3
收起左側(cè)

自己編寫的基于IAR環(huán)境下STM32F103單片機(jī)讀取BME280程序,沒有太多的寄存器操作

[復(fù)制鏈接]
ID:747769 發(fā)表于 2020-7-16 09:45 | 顯示全部樓層 |閱讀模式
自己編寫的基于IAR環(huán)境下STM32F103單片機(jī)讀取BME280程序,沒有太多的寄存器操作,簡單易懂,可以直接調(diào)用,上電后只要對IO口初始化,調(diào)用函數(shù)Bme_ReadDigValue()讀取校準(zhǔn)寄存器參數(shù)并保存,再調(diào)用函數(shù)Bme_Init()初始化之后就可以用函數(shù)Bme_ReadStatus()讀取傳感器狀態(tài)判斷是否讀取數(shù)據(jù)了,也可不判斷傳感器狀態(tài)直接讀取數(shù)據(jù),讀取數(shù)據(jù)直接調(diào)用函數(shù)ReadBme280()。

單片機(jī)源程序:
  1. void ReadBme280()
  2. {
  3.         u32 value_ad;
  4.         double var1;
  5.         double var2;
  6.         double var3;
  7.         
  8.     double var4;
  9.     double var5;
  10.     double var6;
  11.         
  12.         double pressure;
  13.         double pressure_min = 30000.0;
  14.         double pressure_max = 110000.0;
  15.         
  16.         double humidity;
  17.     double humidity_min = 0.0;
  18.     double humidity_max = 100.0;
  19.         
  20.         u8 temp[10];
  21.         
  22.         ///////////////// temp /////////////////
  23.         Bme_Read(Adds_RegValueTempStart,temp,3);
  24.         value_ad = ( ((temp[0]<<16)+(temp[1]<<8)+(temp[2]&0xf0))>>4 );
  25.         var1 = ( ((value_ad>>3)-(Bme280.dig_T1<<1))*Bme280.dig_T2 )>>11;
  26.         var2 = (((((value_ad>>4)-Bme280.dig_T1)*((value_ad>>4)-Bme280.dig_T1))>>12)*Bme280.dig_T3)>>14;
  27.         Bme280.t_fine = var1+var2;
  28.         Bme280.temp = ( (Bme280.t_fine*5+128)>>8);
  29.         Bme280.temp = Bme280.temp;
  30.         ///////////////// press /////////////////
  31.         Bme_Read(Adds_RegValuePressStart,temp,3);
  32.         value_ad = ( ((temp[0]<<16)+(temp[1]<<8)+(temp[2]&0xf0))>>4 );
  33.         var1 = ((double)Bme280.t_fine / 2.0) - 64000.0;
  34.         var2 = var1 * var1 * ((double)Bme280.dig_P6) / 32768.0;
  35.         var2 = var2 + var1 * ((double)Bme280.dig_P5) * 2.0;
  36.         var2 = (var2 / 4.0) + (((double)Bme280.dig_P4) * 65536.0);
  37.         var3 = ((double)Bme280.dig_P3) * var1 * var1 / 524288.0;
  38.         var1 = (var3 + ((double)Bme280.dig_P2) * var1) / 524288.0;
  39.         var1 = (1.0 + var1 / 32768.0) * ((double)Bme280.dig_P1);
  40.         if (var1 > (0.0))
  41.         {
  42.                 pressure = 1048576.0 - (double)value_ad;
  43.                 pressure = (pressure - (var2 / 4096.0)) * 6250.0 / var1;
  44.                 var1 = ((double)Bme280.dig_P9) * pressure * pressure / 2147483648.0;
  45.                 var2 = pressure * ((double)Bme280.dig_P8) / 32768.0;
  46.                 pressure = pressure + (var1 + var2 + ((double)Bme280.dig_P7)) / 16.0;
  47.                 if (pressure < pressure_min)
  48.                 {
  49.                         pressure = pressure_min;
  50.                 }
  51.                 else if (pressure > pressure_max)
  52.                 {
  53.                         pressure = pressure_max;
  54.                 }
  55.         }
  56.         else
  57.         {
  58.                 pressure = pressure_min;
  59.         }
  60.         Bme280.press = pressure;
  61.         Bme280.press = Bme280.press*100;
  62.         ///////////////// humidity /////////////////
  63.         Bme_Read(Adds_RegValueHumStart,temp,2);
  64.         value_ad = ( (temp[0]<<8)+temp[1] );
  65.         var1 = ((double)Bme280.t_fine) - 76800.0;
  66.         var2 = (((double)Bme280.dig_H4) * 64.0 + (((double)Bme280.dig_H5) / 16384.0) * var1);
  67.         var3 = value_ad - var2;
  68.         var4 = ((double)Bme280.dig_H2) / 65536.0;
  69.         var5 = (1.0 + (((double)Bme280.dig_H3) / 67108864.0) * var1);
  70.         var6 = 1.0 + (((double)Bme280.dig_H6) / 67108864.0) * var1 * var5;
  71.         var6 = var3 * var4 * (var5 * var6);
  72.         humidity = var6 * (1.0 - ((double)Bme280.dig_H1) * var6 / 524288.0);
  73.         if (humidity > humidity_max)
  74.         {
  75.                 humidity = humidity_max;
  76.         }
  77.         else if (humidity < humidity_min)
  78.         {
  79.                 humidity = humidity_min;
  80.         }
  81.         Bme280.hum =  humidity*100;// 結(jié)果包含2位小數(shù)
  82. }
  83. void BmeReset()
  84. {
  85.         u8 temp[50];
  86.         temp[0] = CMD_Bme280Reset;
  87.         Bme_Write(Reg_Bme280Reset,temp,1);
  88. }
復(fù)制代碼


下載:

STM32F103讀取Bme280.rar

5.74 KB, 下載次數(shù): 27, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

ID:342991 發(fā)表于 2020-8-10 20:14 | 顯示全部樓層
難得有人會用IAR的
回復(fù)

使用道具 舉報

ID:342991 發(fā)表于 2020-8-10 20:15 | 顯示全部樓層
你就不能把工程放全了嗎
回復(fù)

使用道具 舉報

ID:468878 發(fā)表于 2025-3-28 16:48 | 顯示全部樓層
xianzhezhishi 發(fā)表于 2020-8-10 20:15
你就不能把工程放全了嗎

估計還是想留一手?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 狠狠爱视频 | 国产美女自拍视频 | 国产主播第一页 | 午夜av影院 | av色噜噜| 91人人看 | 一级毛片免费 | 日韩中文字幕在线视频 | 在线免费av观看 | 午夜精品一区 | 午夜精品久久久久久不卡欧美一级 | 午夜一区二区三区在线观看 | 日本aaaa| 中文字幕亚洲视频 | 亚洲精品视频在线 | 波多野结衣精品 | 四虎在线观看 | aaa在线| 一级aaaaaa毛片免费同男同女 | 欧美一二三四成人免费视频 | 国产乱码精品1区2区3区 | 国产成人免费网站 | 免费黄色片在线观看 | 午夜激情免费视频 | 亚洲社区在线 | 操网站 | 久久精品亚洲欧美日韩精品中文字幕 | 91精品成人久久 | 久久久精品一区二区 | www.亚洲 | 欧美精品video| 久久亚洲视频网 | 欧美成人精品一区二区男人看 | 超碰人人人 | 成人在线播放网站 | 中文字幕亚洲一区 | 成人免费一区二区三区牛牛 | 一级做a爰片性色毛片16美国 | 玖玖在线免费视频 | 国产精品久久久免费 | 久久久久久久久91 |