資源簡介
氣壓傳感器BMP180驅動程序,IIC協議,STM32f103,主頻72M,直接可用。

代碼片段和文件信息
#include?“BMP180.h“
#include?“delay.h“
//PA6--SCL????PA7--SDA
//I2C總線初始化
//配置SDA信號線為輸入模式
u8?BMP_communication_sta?=?1;
void?BMP180_SDA_Input_Mode()
{
GPIO_InitTypeDef?GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin?=?BMP180_SDA;
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_2MHz;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IPD; ?
??GPIO_Init(BMP180_I2C_PORT?&GPIO_InitStructure);
}
//配置SDA信號線為輸出模式
void?BMP180_SDA_Output_Mode()
{
GPIO_InitTypeDef?GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin?=?BMP180_SDA;
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_2MHz;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
??GPIO_Init(BMP180_I2C_PORT?&GPIO_InitStructure);
}
void?BMP180_SDA_Output(?uint16_t?val?)
{
if?(?val?)?{
GPIO_SetBits(BMP180_I2C_PORTBMP180_SDA);
}?else?{
GPIO_ResetBits(BMP180_I2C_PORTBMP180_SDA);
}
}
//
uint8_t?BMP180_SDA_Input()
{
return?GPIO_ReadInputDataBit(BMP180_I2C_PORT?BMP180_SDA);
}
//
void?BMP180_SCL_Output(?uint16_t?val?)
{
if?(?val?)?{
GPIO_SetBits(BMP180_I2C_PORTBMP180_SCL);
}?else?{
GPIO_ResetBits(BMP180_I2C_PORTBMP180_SCL);
}
}
//延時程序
void?BMP180_delay1(unsigned?int?n)
{
unsigned?int?i;
for?(?i=0;i }
//I2C總線啟動
void?BMP180_I2CStart(void)
{
BMP180_SDA_Output(1);BMP180_delay1(500);
BMP180_SCL_Output(1);BMP180_delay1(500);
BMP180_SDA_Output(0);BMP180_delay1(500);
BMP180_SCL_Output(0);BMP180_delay1(500);
}
//I2C總線停止
void?BMP180_I2CStop(void)
{
BMP180_SCL_Output(0);?BMP180_delay1(500);
BMP180_SDA_Output(0);?BMP180_delay1(500);
BMP180_SCL_Output(1);?BMP180_delay1(500);
BMP180_SDA_Output(1);?BMP180_delay1(500);
}
//等待應答
unsigned?char?BMP180_I2CWaitAck(void)
{
unsigned?short?cErrTime?=?5;
BMP180_SDA_Input_Mode();?
BMP180_delay1(500);
BMP180_SCL_Output(1);
BMP180_delay1(500);
while(BMP180_SDA_Input())
{
cErrTime--;
BMP180_delay1(500);
if?(0?==?cErrTime)
{
BMP180_SDA_Output_Mode();
BMP_communication_sta?=?0;
BMP180_I2CStop();
return?0;
}
}
BMP180_SDA_Output_Mode();
BMP180_SCL_Output(0);
BMP180_delay1(500);?
return?1;
}
//發送應答位
void?BMP180_I2CSendAck(void)
{
BMP180_SDA_Output(0);
BMP180_delay1(500);
BMP180_delay1(500);
BMP180_SCL_Output(1);?
BMP180_delay1(500);
BMP180_SCL_Output(0);?
BMP180_delay1(500);
}
//
void?BMP180_I2CSendNotAck(void)
{
BMP180_SDA_Output(1);
BMP180_delay1(500);
BMP180_SCL_Output(1);?
BMP180_delay1(500);
BMP180_SCL_Output(0);?
BMP180_delay1(500);
}
//通過I2C總線發送一個字節數據
void?BMP180_I2CSendByte(unsigned?char?cSendByte)
{
unsigned?char??i?=?8;
while?(i--)
{
BMP180_SCL_Output(0);
BMP180_delay1(500);?
BMP180_SDA_Output(cSendByte?&?0x80);?
BMP180_delay1(500);
cSendByte?+=?cSendByte;
BMP180_delay1(500);?
BMP180_SCL_Output(1);
BMP180_delay1(500);?
}
BMP180_SCL_Output(0);
BMP180_delay1(500);?
}
//從I2C總線接收一個字節數據
unsigned?char?BMP180_I2CReceiveByte(void)
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8079??2018-05-05?12:39??BMP180\BMP180.c
?????文件????????512??2018-05-05?12:38??BMP180\BMP180.h
?????目錄??????????0??2018-09-16?16:40??BMP180
-----------?---------??----------?-----??----
?????????????????8591????????????????????3
- 上一篇:iOS逆向技術視頻教程
- 下一篇:CPLEX 學術版安裝指南
評論
共有 條評論