ADS1115HAL库驱动
时间: 2023-07-11 09:29:27 浏览: 175
STM32 HAL ads1115 驱动
ADS1115是一款16位精度的模数转换器,适用于模拟信号转数字信号的转换。ADS1115的HAL库驱动,可以使用STM32 HAL库来驱动ADS1115芯片。以下是一个基于STM32 HAL库的ADS1115驱动示例代码:
```c
#include "stm32f4xx_hal.h"
#define ADS1115_ADDRESS (0x90) //ADS1115芯片I2C地址
/* ADS1115寄存器定义 */
#define ADS_REG_POINTER_CONVERT 0x00
#define ADS_REG_POINTER_CONFIG 0x01
#define ADS_REG_POINTER_LOWTHRESH 0x02
#define ADS_REG_POINTER_HITHRESH 0x03
/* ADS1115配置寄存器定义 */
#define ADS_OS_SINGLE 0x8000
#define ADS_MUX_DIFF_0_1 0x0000
#define ADS_MUX_DIFF_0_3 0x1000
#define ADS_MUX_DIFF_1_3 0x2000
#define ADS_MUX_DIFF_2_3 0x3000
#define ADS_MUX_SINGLE_0 0x4000
#define ADS_MUX_SINGLE_1 0x5000
#define ADS_MUX_SINGLE_2 0x6000
#define ADS_MUX_SINGLE_3 0x7000
#define ADS_PGA_6_144V 0x0000
#define ADS_PGA_4_096V 0x0200
#define ADS_PGA_2_048V 0x0400
#define ADS_PGA_1_024V 0x0600
#define ADS_PGA_0_512V 0x0800
#define ADS_PGA_0_256V 0x0A00
#define ADS_MODE_CONTIN 0x0000
#define ADS_MODE_SINGLE 0x0100
#define ADS_DR_128SPS 0x0000
#define ADS_DR_250SPS 0x0020
#define ADS_DR_490SPS 0x0040
#define ADS_DR_920SPS 0x0060
#define ADS_DR_1600SPS 0x0080
#define ADS_DR_2400SPS 0x00A0
#define ADS_DR_3300SPS 0x00C0
#define ADS_CMODE_TRAD 0x0000
#define ADS_CMODE_WINDOW 0x0010
#define ADS_CPOL_ACTVLOW 0x0000
#define ADS_CPOL_ACTVHI 0x0008
#define ADS_CLAT_NONLAT 0x0000
#define ADS_CLAT_LATCH 0x0004
#define ADS_CQUE_1CONV 0x0000
#define ADS_CQUE_2CONV 0x0001
#define ADS_CQUE_4CONV 0x0002
#define ADS_CQUE_NONE 0x0003
/**
* @brief ADS1115读取指定通道的数据
* @param hi2c: I2C句柄
* @param channel: 要读取的通道
* ADS_MUX_SINGLE_0: 读取AIN0通道
* ADS_MUX_SINGLE_1: 读取AIN1通道
* ADS_MUX_SINGLE_2: 读取AIN2通道
* ADS_MUX_SINGLE_3: 读取AIN3通道
* @retval 读取的数据
*/
int16_t ADS1115_Read(I2C_HandleTypeDef *hi2c, uint16_t channel) {
uint8_t config[2];
uint8_t data[2];
int16_t result;
config[0] = ADS_REG_POINTER_CONFIG;
config[1] = ADS_OS_SINGLE | channel | ADS_PGA_6_144V | ADS_MODE_SINGLE |
ADS_DR_128SPS | ADS_CMODE_TRAD | ADS_CPOL_ACTVLOW |
ADS_CLAT_NONLAT | ADS_CQUE_NONE;
/* 向ADS1115写入配置信息 */
HAL_I2C_Master_Transmit(hi2c, ADS1115_ADDRESS, config, 2, 1000);
/* 等待转换完成 */
HAL_Delay(10);
/* 读取结果 */
config[0] = ADS_REG_POINTER_CONVERT;
HAL_I2C_Master_Transmit(hi2c, ADS1115_ADDRESS, config, 1, 1000);
HAL_I2C_Master_Receive(hi2c, ADS1115_ADDRESS, data, 2, 1000);
result = (int16_t)((data[0] << 8) | data[1]);
return result;
}
```
上述代码中,使用了STM32 HAL库提供的I2C读写函数来读取ADS1115芯片。在读取之前,需要先配置ADS1115芯片的转换通道、转换速率、增益等参数,并向ADS1115芯片写入配置信息。然后等待转换完成,最后读取转换结果。
阅读全文