基于HAL库的ads1115程序
时间: 2023-12-06 18:03:59 浏览: 109
ads1115程序
5星 · 资源好评率100%
以下是基于HAL库的ADS1115程序的示例代码,仅供参考:
```c
#include "stm32f1xx_hal.h"
#define ADS1115_ADDR 0x90 // 默认地址为0x48,若A0接地则地址为0x48,若A0接VDD则地址为0x49,若A0接SDA则地址为0x4A,若A0接SCL则地址为0x4B
#define CONFIG_REG 0x01 // 配置寄存器
#define CONVERSION_REG 0x00 // 转换寄存器
#define RANGE_6_144V 0x00 // 增益为2/3,量程为±6.144V
#define RANGE_4_096V 0x02 // 增益为1,量程为±4.096V
#define RANGE_2_048V 0x04 // 增益为2,量程为±2.048V
#define RANGE_1_024V 0x06 // 增益为4,量程为±1.024V
#define RANGE_0_512V 0x08 // 增益为8,量程为±0.512V
#define RANGE_0_256V 0x0A // 增益为16,量程为±0.256V
I2C_HandleTypeDef hi2c1; // I2C句柄
void ADS1115_Init(void)
{
uint8_t config[3] = {CONFIG_REG, 0x83, RANGE_2_048V}; // 配置寄存器,参考手册进行配置
HAL_I2C_Master_Transmit(&hi2c1, ADS1115_ADDR, config, 3, 100); // 发送配置数据
}
int16_t ADS1115_Read(void)
{
uint8_t conversion_reg[1] = {CONVERSION_REG}; // 转换寄存器
uint8_t data[2]; // 存储读取的数据
HAL_I2C_Master_Transmit(&hi2c1, ADS1115_ADDR, conversion_reg, 1, 100); // 发送转换寄存器地址
HAL_I2C_Master_Receive(&hi2c1, ADS1115_ADDR, data, 2, 100); // 读取转换数据
return (data[0] << 8) | data[1]; // 返回16位的转换结果
}
int main(void)
{
HAL_Init();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_I2C1_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
ADS1115_Init(); // 初始化ADS1115
while (1)
{
int16_t data = ADS1115_Read(); // 读取ADS1115转换结果
// TODO:处理读取到的数据
}
}
```
在代码中,我们使用STM32F1系列的HAL库进行I2C通信,读取ADS1115的转换结果。在初始化函数中,我们配置了ADS1115的增益和量程,并将其写入到配置寄存器中。在读取函数中,我们首先向ADS1115发送转换寄存器地址,然后读取2个字节的转换结果。最后,我们将读取到的2个字节的数据合并成一个16位的转换结果。
阅读全文