久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
YD-BMP180壓力傳感器的STM32程序源碼
[打印本頁]
作者:
gaoyuanweb
時間:
2018-9-19 14:31
標題:
YD-BMP180壓力傳感器的STM32程序源碼
使用編譯環境:MDK4.72A IAR6.30
使用硬件環境:STM32F103RBT6
使用函數庫版本:STM32F10x_StdPeriph_Driver V3.50
工程概要: 主要是完成對bmp180氣壓傳感器的寫操作和讀操作,并計算出當前的氣壓參數和打印出來
調試說明:此例程適用的調試下載器是J-link-ob,也可以用過串口下載調試程序,(請將串口線插在板子J1口
上,并打開超級終端或串口助手,配置波特率115200,8位,一個停止位,無校驗位。
單片機源程序如下:
/******************** (C) COPYRIGHT 源地工作室 ********************************
* 文件名 :main.c
* 描述 :主要是完成對bmp180氣壓傳感器的寫操作和讀操作,并計算出當前的氣壓參數和打印出來
* 庫版本 :V3.50
* 作者 :zhuoyingxingyu
* 調試方式:J-Link-OB
**********************************************************************************/
//頭文件
#include "stm32f10x.h"
#include "led.h"
#include "SYSTICK.h"
#include "usart.h"
#include "i2c.h"
#include "BMP180.h"
#include <stdio.h>
/**
* @file main
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
SYSTICK_Init();
USART1_Config();
LED_GPIO_Config();
I2C_Configuration();
BMP180_Init();
while (1)
{
LEDXToggle(LED1);
LEDXToggle(LED2);
LEDXToggle(LED3);
delay_ms(1000);
BMP180_TEST();
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
復制代碼
/******************** (C) COPYRIGHT 源地工作室 ********************************
* 文件名 :BMP180.c
* 描述 :初始化BMP180及一些基本的操作
* 作者 :zhuoyingxingyu
* 硬件連接: PB6-I2C1_SCL、PB7-I2C1_SDA
* 調試方式:J-Link-OB
**********************************************************************************/
//頭文件
#include "BMP180.h"
#include "usart.h"
#include "math.h"
#include "i2c.h"
u32 Air_pressure=0;
/**
* @file Delay_us(不精確)
* @brief 微妙延時 time_ms ms
* @param time_us 延時時間
* @retval NO
*/
static void delay_us( uint16_t time_us )
{
uint16_t i,j;
for( i=0;i<time_us;i++ )
{
for( j=0;j<11;j++ );//1us
}
}
/**
* @file Delay_Ms(不精確)
* @brief 毫秒延時 time_ms ms
* @param time_ms 延時時間
* @retval NO
*/
static void delay_ms(uint16_t time_ms)
{
uint16_t i;
for( i=0;i<time_ms;i++ )
{
delay_us(11000);
}
}
/**
* @file BMP180_IIC_WriteByte
* @brief 向BMP180寫一字節數據
* @param
* - SendByte: 待寫入數據
* - WriteAddress: 待寫入地址
* @retval 返回為:=1成功寫入,=0失敗
*/
FunctionalState BMP180_IIC_WriteByte(uint8_t WriteAddress,uint8_t SendByte)
{
if(!I2C_Start())return DISABLE;
I2C_SendByte(0xee);
if(!I2C_WaitAck()){I2C_Stop(); return DISABLE;}
I2C_SendByte(WriteAddress); /* 設置低起始地址 */
I2C_WaitAck();
I2C_SendByte(SendByte);
I2C_WaitAck();
I2C_Stop();
return ENABLE;
}
/**
* @file BMP180_IIC_ReadByte
* @brief 從BMP180讀取一串數據
* @param
* - pBuffer: 存放讀出數據
* - length: 待讀出長度
* - ReadAddress: 待讀出地址
* - DeviceAddress: 器件類型(24c16或SD2403)
* @retval 返回為:=1成功讀入,=0失敗
*/
FunctionalState BMP180_IIC_ReadByte( uint8_t ReadAddress, uint16_t length ,uint8_t* pBuffer)
{
if(!I2C_Start())return DISABLE;
I2C_SendByte(0xee); /* 設置高起始地址+器件地址 */
if(!I2C_WaitAck())
{I2C_Stop(); return DISABLE;}
I2C_SendByte(ReadAddress); /* 設置低起始地址 */
I2C_WaitAck();
I2C_Start();
I2C_SendByte(0xef);
I2C_WaitAck();
while(length)
{
*pBuffer = I2C_ReceiveByte();
if(length == 1)
I2C_NoAck();
else I2C_Ack();
pBuffer++;
length--;
}
I2C_Stop();
return ENABLE;
}
/**
* @file BMP180_Init
* @brief BMP180初始化
* @param 無
* @retval 無
*/
void BMP180_Init(void)
{
u8 data[1]={0};
BMP180_IIC_ReadByte (0xd0,1,data);
if(data[0]==0x55)
printf("BMP180ok\r\n\n");
else
printf("BMP180error\r\n\n");
}
/**
* @file BMP180_Calc
* @brief BMP180檢測氣壓參數
* @param 無
* @retval 氣壓參數
*/
u32 BMP180_Calc(void)
{
vu16 x=0,y=0,z=0;
double angle=0;
u8 data[22]={0};
short AC1=0,AC2=0,AC3=0,B1=0,B2=2,MB=0,MC=0,MD=0;
unsigned short AC4=0,AC5=0,AC6=0;
u8 dataUT[2]={0};
long UT=0;
long UP=0;
u8 dataUP[3]={0};
long X1=0,X2=0,B5=0,temp=0;
long B6=0,X3=0,B3=0,p=0;
unsigned long B4=0,B7=0;
BMP180_IIC_ReadByte (0xaa,22,data);
AC1=((data[0]<<8)+data[1]);
AC2=((data[2]<<8)+data[3]);
AC3=((data[4]<<8)+data[5]);
AC4=((data[6]<<8)+data[7]);
AC5=((data[8]<<8)+data[9]);
AC6=((data[10]<<8)+data[11]);
B1=((data[12]<<8)+data[13]);
B2=((data[14]<<8)+data[15]);
MB=((data[16]<<8)+data[17]);
MC=((data[18]<<8)+data[19]);
MD=((data[20]<<8)+data[21]);
BMP180_IIC_WriteByte(0xf4,0x2e);
delay_ms(10);
BMP180_IIC_ReadByte (0xf6,2,dataUT);
UT=((((u32)dataUT[0])<<8)|(u32)dataUT[1]);
BMP180_IIC_WriteByte(0xf4,0x34);
delay_ms(5);
BMP180_IIC_ReadByte (0xf6,2,dataUP);
UP=((((u32)dataUP[0])<<16)+((u32)dataUP[1]<<8)+(u32)dataUP[0])>>8;
X1=((UT-AC6)*AC5)>>15;
X2=(MC<<11)/(X1+MD);
B5=X1+X2;
temp=(B5+8)>>4;
//printf("%ld\r\n",temp);//輸出溫度
B6=B5-4000;
X1=(B2*((B6*B6)>>12))>>11;
X2=(AC2*B6)>>11;
X3=X1+X2;
B3=(((AC1*4+X3)<<0)+2)/4;
X1=(AC3*B6)>>13;
X2=(B1*((B6*B6)>>12))>>16;
X3=((X1+X2)+2)>>2;
B4=(AC4*(unsigned long)(X3+32768))>>15;
B7=((unsigned long)UP-B3)*(50000>>0);
if(B7<0x80000000){p=(B7*2)/B4;}
else
{p=(B7/B4)*2;}
X1=(p>>8)*(p>>8);
X1=(X1*3038)>>16;
X2=(-7357*p)>>16;
Air_pressure=p+((X1+X2+3791)>>4);
return Air_pressure;
}
/**
* @file BMP180_TEST
* @brief BMP180測試氣壓并輸出氣壓參數
* @param 無
* @retval 無
*/
void BMP180_TEST(void)
{
BMP180_Calc();
printf("Air_pressure=%ld\r\n",Air_pressure);//輸出氣壓
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
復制代碼
0.png
(12.46 KB, 下載次數: 30)
下載附件
2018-9-19 16:50 上傳
所有資料51hei提供下載:
23YD-BMP180壓力傳感器實驗.rar
(489.59 KB, 下載次數: 65)
2018-9-19 14:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产一区在线看
|
国产欧美久久久
|
欧美日韩精品一区
|
国产精品欧美日韩
|
欧美一级网站
|
日韩一区二区在线视频
|
99re国产
|
精品一区二区三区免费
|
天堂影院av
|
精品网站999www
|
中文字幕亚洲一区
|
国模一区二区三区
|
精品国产乱码一区二区三
|
自拍偷拍欧美日韩
|
国产高清视频在线播放
|
黄色激情网站
|
69人人
|
a级片在线观看
|
久久久久久爱
|
中文字幕亚洲欧美
|
亚洲精品视频免费在线观看
|
日韩视频中文字幕
|
伊人亚洲
|
国产福利在线
|
欧美福利一区二区
|
欧美a级黄色片
|
黄色片网站在线观看
|
精品国产一区二区三
|
国产一级片在线播放
|
国产综合久久
|
99香蕉视频
|
亚洲爱爱网
|
青青青视频在线
|
国产高潮在线
|
国产黄色三级
|
在线观看av不卡
|
五月网站
|
看片地址
|
色香蕉网
|
波多野结衣一区二区三区在线观看
|
一级片国产
|