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

標題: 自己編寫的基于IAR環境下STM32F103單片機讀取BME280程序,沒有太多的寄存器操作 [打印本頁]

作者: kongfs    時間: 2020-7-16 09:45
標題: 自己編寫的基于IAR環境下STM32F103單片機讀取BME280程序,沒有太多的寄存器操作
自己編寫的基于IAR環境下STM32F103單片機讀取BME280程序,沒有太多的寄存器操作,簡單易懂,可以直接調用,上電后只要對IO口初始化,調用函數Bme_ReadDigValue()讀取校準寄存器參數并保存,再調用函數Bme_Init()初始化之后就可以用函數Bme_ReadStatus()讀取傳感器狀態判斷是否讀取數據了,也可不判斷傳感器狀態直接讀取數據,讀取數據直接調用函數ReadBme280()。

單片機源程序:
  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;// 結果包含2位小數
  82. }
  83. void BmeReset()
  84. {
  85.         u8 temp[50];
  86.         temp[0] = CMD_Bme280Reset;
  87.         Bme_Write(Reg_Bme280Reset,temp,1);
  88. }
復制代碼


下載:

STM32F103讀取Bme280.rar

5.74 KB, 下載次數: 27, 下載積分: 黑幣 -5


作者: xianzhezhishi    時間: 2020-8-10 20:14
難得有人會用IAR的
作者: xianzhezhishi    時間: 2020-8-10 20:15
你就不能把工程放全了嗎
作者: rsx9583    時間: 2025-3-28 16:48
xianzhezhishi 發表于 2020-8-10 20:15
你就不能把工程放全了嗎

估計還是想留一手?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 羞羞视频在线观看 | 日韩在线中文字幕 | 国产精品区二区三区日本 | 91黄色片免费看 | 日韩中文一区 | 在线国产一区 | 国产区在线视频 | 一区二区三区视频在线 | 国产高清视频在线观看播放 | 久久久久中文字幕 | 日本三级全黄三级三级三级口周 | 一区二区三区在线免费观看 | 国产成人免费视频网站高清观看视频 | 97综合在线 | 国产精品美女一区二区 | 俺去俺来也www色官网cms | 欧美精品在线免费观看 | 国产精品久久久久久久久久久久久 | 国产精品一区在线观看 | 国产高清精品一区二区三区 | 久久精品国产一区老色匹 | 欧美区日韩区 | 国产1区2区在线观看 | www.婷婷亚洲基地 | 欧美一级黄色免费看 | 久久伊人精品一区二区三区 | 亚洲精品18 | 久久99网 | 好姑娘高清在线观看电影 | 精品国产乱码久久久久久闺蜜 | 亚洲一级黄色 | 国产精品中文在线 | 亚洲在线看 | 91久久国产综合久久91精品网站 | 久草www| 欧美一级在线 | 日本黄色的视频 | 日韩久久综合网 | 91免费看片| 91精品国产综合久久久久 | 欧美一级片在线观看 |