编写基于STM32f407的sht85驱动程序
时间: 2023-07-26 07:08:01 浏览: 55
以下是一个基于STM32f407的sht85驱动程序的示例代码,需要注意的是,这里的代码仅供参考,具体实现还需要根据自己的具体情况进行调整和修改。
```c
#include "stm32f4xx.h"
#define SHT85_ADDRESS 0x44 << 1
void I2C_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_I2C1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_I2C1);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
I2C_InitStruct.I2C_ClockSpeed = 100000;
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0x00;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE);
}
void SHT85_Init(void)
{
uint8_t data[2];
data[0] = 0x24;
data[1] = 0x00;
I2C_Write(SHT85_ADDRESS, data, 2);
data[0] = 0x24;
data[1] = 0x00;
I2C_Write(SHT85_ADDRESS, data, 2);
}
float SHT85_ReadTemperature(void)
{
uint8_t data[3];
float temperature;
data[0] = 0x2c;
data[1] = 0x06;
I2C_Write(SHT85_ADDRESS, data, 2);
delay_ms(15);
I2C_Read(SHT85_ADDRESS, data, 3);
temperature = ((((uint16_t)data[0]) << 8) | ((uint16_t)data[1])) * 175.0 / 65535.0 - 45.0;
return temperature;
}
float SHT85_ReadHumidity(void)
{
uint8_t data[3];
float humidity;
data[0] = 0x2c;
data[1] = 0x06;
I2C_Write(SHT85_ADDRESS, data, 2);
delay_ms(15);
I2C_Read(SHT85_ADDRESS, data, 3);
humidity = ((((uint16_t)data[0]) << 8) | ((uint16_t)data[1])) * 100.0 / 65535.0;
return humidity;
}
void I2C_Write(uint8_t address, uint8_t* data, uint16_t length)
{
uint16_t i;
while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1, ENABLE);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, address, I2C_Direction_Transmitter);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
for (i = 0; i < length; i++)
{
I2C_SendData(I2C1, data[i]);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
}
I2C_GenerateSTOP(I2C1, ENABLE);
}
void I2C_Read(uint8_t address, uint8_t* data, uint16_t length)
{
uint16_t i;
while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1, ENABLE);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, address, I2C_Direction_Receiver);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
for (i = 0; i < length; i++)
{
if (i == length - 1)
{
I2C_AcknowledgeConfig(I2C1, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
}
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
data[i] = I2C_ReceiveData(I2C1);
}
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
```
这段代码中,我们首先初始化了I2C总线,然后实现了SHT85的初始化、读取温度和读取湿度功能。其中,SHT85的初始化主要是设置了一些寄存器,包括传输速率等。读取温度和湿度的过程中,我们先向SHT85写入指令,然后等待一段时间后再读取数据。最后,我们还实现了I2C的读和写函数,用于实现与SHT85的通信。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)