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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4555|回復: 0
打印 上一主題 下一主題
收起左側

YD-BMP180壓力傳感器的STM32程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
使用編譯環境:MDK4.72A  IAR6.30
使用硬件環境:STM32F103RBT6
使用函數庫版本:STM32F10x_StdPeriph_Driver V3.50
工程概要:  主要是完成對bmp180氣壓傳感器的寫操作和讀操作,并計算出當前的氣壓參數和打印出來
調試說明:此例程適用的調試下載器是J-link-ob,也可以用過串口下載調試程序,(請將串口線插在板子J1口
          上,并打開超級終端或串口助手,配置波特率115200,8位,一個停止位,無校驗位。

單片機源程序如下:
  1. /******************** (C) COPYRIGHT  源地工作室 ********************************
  2. * 文件名  :main.c
  3. * 描述    :主要是完成對bmp180氣壓傳感器的寫操作和讀操作,并計算出當前的氣壓參數和打印出來
  4. * 庫版本  :V3.50
  5. * 作者    :zhuoyingxingyu
  6. * 調試方式:J-Link-OB
  7. **********************************************************************************/

  8. //頭文件
  9. #include "stm32f10x.h"
  10. #include "led.h"
  11. #include "SYSTICK.h"
  12. #include "usart.h"
  13. #include "i2c.h"
  14. #include "BMP180.h"
  15. #include <stdio.h>

  16. /**
  17.   * @file   main
  18.   * @brief  Main program.
  19.   * @param  None
  20.   * @retval None
  21.   */
  22. int main(void)
  23. {
  24.     SYSTICK_Init();
  25.     USART1_Config();
  26.     LED_GPIO_Config();
  27.     I2C_Configuration();
  28.     BMP180_Init();

  29.     while (1)
  30.     {
  31.       LEDXToggle(LED1);
  32.       LEDXToggle(LED2);
  33.       LEDXToggle(LED3);
  34.       delay_ms(1000);
  35.       BMP180_TEST();

  36.     }
  37.    
  38. }
  39. /*********************************************************************************************************
  40.       END FILE
  41. *********************************************************************************************************/
復制代碼
  1. /******************** (C) COPYRIGHT  源地工作室 ********************************
  2. * 文件名  :BMP180.c
  3. * 描述    :初始化BMP180及一些基本的操作
  4. * 作者    :zhuoyingxingyu
  5. * 硬件連接: PB6-I2C1_SCL、PB7-I2C1_SDA
  6. * 調試方式:J-Link-OB
  7. **********************************************************************************/

  8. //頭文件
  9. #include "BMP180.h"
  10. #include "usart.h"
  11. #include "math.h"
  12. #include "i2c.h"

  13. u32 Air_pressure=0;

  14. /**
  15.   * @file   Delay_us(不精確)
  16.   * @brief  微妙延時 time_ms ms
  17.   * @param  time_us 延時時間
  18.   * @retval NO
  19.   */
  20. static void delay_us( uint16_t time_us )
  21. {
  22.   uint16_t i,j;
  23.   for( i=0;i<time_us;i++ )
  24.   {
  25.                 for( j=0;j<11;j++ );//1us
  26.   }
  27. }
  28. /**
  29.   * @file   Delay_Ms(不精確)
  30.   * @brief  毫秒延時 time_ms ms
  31.   * @param  time_ms 延時時間
  32.   * @retval NO
  33.   */
  34. static void delay_ms(uint16_t time_ms)
  35. {
  36.          uint16_t i;
  37.   for( i=0;i<time_ms;i++ )
  38.   {
  39.                 delay_us(11000);
  40.   }
  41.        
  42. }
  43. /**
  44.   * @file   BMP180_IIC_WriteByte
  45.   * @brief  向BMP180寫一字節數據
  46.   * @param  
  47.         *          - SendByte: 待寫入數據
  48.         *          - WriteAddress: 待寫入地址
  49.   * @retval 返回為:=1成功寫入,=0失敗
  50.   */
  51. FunctionalState BMP180_IIC_WriteByte(uint8_t WriteAddress,uint8_t SendByte)
  52. {               
  53.     if(!I2C_Start())return DISABLE;
  54.     I2C_SendByte(0xee);
  55.     if(!I2C_WaitAck()){I2C_Stop(); return DISABLE;}
  56.     I2C_SendByte(WriteAddress);   /* 設置低起始地址 */      
  57.     I2C_WaitAck();       
  58.     I2C_SendByte(SendByte);
  59.     I2C_WaitAck();   
  60.     I2C_Stop();
  61.     return ENABLE;
  62. }       
  63. /**
  64.   * @file   BMP180_IIC_ReadByte
  65.   * @brief  從BMP180讀取一串數據
  66.   * @param  
  67.         *                                        - pBuffer: 存放讀出數據
  68.         *               - length: 待讀出長度
  69.         *         - ReadAddress: 待讀出地址
  70.         *         - DeviceAddress: 器件類型(24c16或SD2403)
  71.   * @retval 返回為:=1成功讀入,=0失敗
  72.   */
  73. FunctionalState BMP180_IIC_ReadByte( uint8_t ReadAddress, uint16_t length  ,uint8_t* pBuffer)
  74. {               

  75.     if(!I2C_Start())return DISABLE;
  76.     I2C_SendByte(0xee); /* 設置高起始地址+器件地址 */
  77.     if(!I2C_WaitAck())
  78.                 {I2C_Stop(); return DISABLE;}
  79.     I2C_SendByte(ReadAddress);   /* 設置低起始地址 */      
  80.     I2C_WaitAck();
  81.     I2C_Start();
  82.     I2C_SendByte(0xef);
  83.     I2C_WaitAck();
  84.     while(length)
  85.     {
  86.       *pBuffer = I2C_ReceiveByte();
  87.       if(length == 1)
  88.                                 I2C_NoAck();
  89.       else I2C_Ack();
  90.       pBuffer++;
  91.       length--;
  92.     }
  93.     I2C_Stop();
  94.     return ENABLE;
  95. }
  96. /**
  97.   * @file   BMP180_Init
  98.   * @brief  BMP180初始化
  99.   * @param  無
  100.   * @retval 無
  101.   */
  102. void BMP180_Init(void)
  103. {
  104.                 u8 data[1]={0};               
  105.                 BMP180_IIC_ReadByte (0xd0,1,data);
  106.                 if(data[0]==0x55)
  107.                 printf("BMP180ok\r\n\n");
  108.                 else
  109.                 printf("BMP180error\r\n\n");       
  110. }

  111. /**
  112.   * @file   BMP180_Calc
  113.   * @brief  BMP180檢測氣壓參數
  114.   * @param  無
  115.   * @retval 氣壓參數
  116.   */
  117. u32 BMP180_Calc(void)
  118. {
  119.   vu16 x=0,y=0,z=0;
  120.         double angle=0;
  121.         u8 data[22]={0};       
  122.         short AC1=0,AC2=0,AC3=0,B1=0,B2=2,MB=0,MC=0,MD=0;
  123.         unsigned short AC4=0,AC5=0,AC6=0;
  124.   u8 dataUT[2]={0};
  125.         long UT=0;
  126.         long UP=0;  
  127.         u8 dataUP[3]={0};
  128.         long X1=0,X2=0,B5=0,temp=0;
  129.         long B6=0,X3=0,B3=0,p=0;
  130.         unsigned long B4=0,B7=0;



  131.   BMP180_IIC_ReadByte (0xaa,22,data);
  132.         AC1=((data[0]<<8)+data[1]);
  133.         AC2=((data[2]<<8)+data[3]);
  134.         AC3=((data[4]<<8)+data[5]);
  135.         AC4=((data[6]<<8)+data[7]);
  136.         AC5=((data[8]<<8)+data[9]);
  137.         AC6=((data[10]<<8)+data[11]);
  138.         B1=((data[12]<<8)+data[13]);
  139.         B2=((data[14]<<8)+data[15]);
  140.         MB=((data[16]<<8)+data[17]);                 
  141.         MC=((data[18]<<8)+data[19]);
  142.         MD=((data[20]<<8)+data[21]);
  143.   BMP180_IIC_WriteByte(0xf4,0x2e);
  144.         delay_ms(10);
  145.         BMP180_IIC_ReadByte (0xf6,2,dataUT);
  146.         UT=((((u32)dataUT[0])<<8)|(u32)dataUT[1]);       
  147.         BMP180_IIC_WriteByte(0xf4,0x34);
  148.         delay_ms(5);
  149.         BMP180_IIC_ReadByte (0xf6,2,dataUP);
  150.         UP=((((u32)dataUP[0])<<16)+((u32)dataUP[1]<<8)+(u32)dataUP[0])>>8;       
  151.         X1=((UT-AC6)*AC5)>>15;
  152.         X2=(MC<<11)/(X1+MD);
  153.         B5=X1+X2;
  154.         temp=(B5+8)>>4;
  155.        
  156.         //printf("%ld\r\n",temp);//輸出溫度

  157.   B6=B5-4000;
  158.         X1=(B2*((B6*B6)>>12))>>11;
  159.         X2=(AC2*B6)>>11;
  160.         X3=X1+X2;
  161.         B3=(((AC1*4+X3)<<0)+2)/4;
  162.         X1=(AC3*B6)>>13;
  163.         X2=(B1*((B6*B6)>>12))>>16;
  164.         X3=((X1+X2)+2)>>2;
  165.         B4=(AC4*(unsigned long)(X3+32768))>>15;
  166.         B7=((unsigned long)UP-B3)*(50000>>0);
  167.         if(B7<0x80000000){p=(B7*2)/B4;}
  168.         else
  169.         {p=(B7/B4)*2;}
  170.         X1=(p>>8)*(p>>8);
  171.         X1=(X1*3038)>>16;
  172.         X2=(-7357*p)>>16;
  173.         Air_pressure=p+((X1+X2+3791)>>4);
  174.        
  175.         return Air_pressure;
  176. }
  177. /**
  178.   * @file   BMP180_TEST
  179.   * @brief  BMP180測試氣壓并輸出氣壓參數
  180.   * @param  無
  181.   * @retval 無
  182.   */
  183. void BMP180_TEST(void)
  184. {
  185.                 BMP180_Calc();
  186.                 printf("Air_pressure=%ld\r\n",Air_pressure);//輸出氣壓       

  187. }
  188. /*********************************************************************************************************
  189.       END FILE
  190. *********************************************************************************************************/
復制代碼



所有資料51hei提供下載:
23YD-BMP180壓力傳感器實驗.rar (489.59 KB, 下載次數: 65)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色免费网站在线看 | 国产十日韩十欧美 | 国产97在线视频 | 久久婷婷av| 免费国产一区二区 | 欧美日韩视频在线播放 | 尤物视频在线免费观看 | 特黄色一级毛片 | 精品国产一区二区三区在线观看 | 日本在线看片 | 亚洲午夜精品 | 欧美一区日韩一区 | 精品国产一区二区三区久久影院 | 亚洲人成人一区二区在线观看 | 小草久久久久久久久爱六 | 国产精品久久久久久久免费大片 | 精品粉嫩aⅴ一区二区三区四区 | 一级全黄少妇性色生活免费看 | 亚洲高清在线视频 | 国产福利小视频 | 九九热精品视频 | 一区二区三区四区在线播放 | 国产精品黄| 国产精品日日夜夜 | 四季久久免费一区二区三区四区 | 午夜精品一区二区三区在线观看 | 国产久 | 欧美精品在线观看 | 久草青青| 欧美国产精品一区二区三区 | 欧美一级片在线看 | 玩丰满女领导对白露脸hd | www国产亚洲精品久久网站 | 成人免费三级电影 | 国产精品xxxx| 日韩精品一区二区三区在线观看 | www日本在线 | 国产精品久久久久久一级毛片 | 国产成人精品久久二区二区91 | 亚洲午夜精品一区二区三区他趣 | 国产亚洲一区二区三区 |