单片机: STM32L476
库: HAL库
通讯: 硬件I2C,直接用STM32CubeMX生成
目标: 实现读写LTC2943库仑计芯片,采集温度、库伦、电压、电流等。
硬件参考电路
ws_drive_ltc2943.h
驱动程序
/*! @file
@ingroup LTC2943
Header for LTC2943: Multicell Battery Gas Gauge with Temperature, Voltage and Current Measurement
*/
#ifndef WS_DRIVE_LTC2943_H
#define WS_DRIVE_LTC2943_H
#include "stm32l4xx_hal.h"
/*! @name LTC2943 I2C Address
@{ */
#define LTC2943_I2C_ADDRESS 0xC8
#define LTC2943_I2C_ALERT_RESPONSE 0x0C
//! @}
#define I2C_READ_BIT 0x01
#define I2C_WRITE_BIT 0x00
#define WITH_ACK 0 //!< Use with i2c_read(WITH_ACK) to read with an acknowledge
#define WITH_NACK 1
/*!
| Name | Value |
| :------------------------------------------------ | :---: |
| LTC2943_STATUS_REG | 0x00 |
| LTC2943_CONTROL_REG | 0x01 |
| LTC2943_ACCUM_CHARGE_MSB_REG | 0x02 |
| LTC2943_ACCUM_CHARGE_LSB_REG | 0x03 |
| LTC2943_CHARGE_THRESH_HIGH_MSB_REG | 0x04 |
| LTC2943_CHARGE_THRESH_HIGH_LSB_REG | 0x05 |
| LTC2943_CHARGE_THRESH_LOW_MSB_REG | 0x06 |
| LTC2943_CHARGE_THRESH_LOW_LSB_REG | 0x07 |
| LTC2943_VOLTAGE_MSB_REG | 0x08 |
| LTC2943_VOLTAGE_LSB_REG | 0x09 |
| LTC2943_VOLTAGE_THRESH_HIGH_MSB_REG | 0x0A |
| LTC2943_VOLTAGE_THRESH_HIGH_LSB_REG | 0x0B |
| LTC2943_VOLTAGE_THRESH_LOW_MSB_REG | 0x0C |
| LTC2943_VOLTAGE_THRESH_LOW_LSB_REG | 0x0D |
| LTC2943_CURRENT_MSB_REG | 0x0E |
| LTC2943_CURRENT_LSB_REG | 0x0F |
| LTC2943_CURRENT_THRESH_HIGH_MSB_REG | 0x10 |
| LTC2943_CURRENT_THRESH_HIGH_LSB_REG | 0x11 |
| LTC2943_CURRENT_THRESH_LOW_MSB_REG | 0x12 |
| LTC2943_CURRENT_THRESH_LOW_LSB_REG | 0x13 |
| LTC2943_TEMPERATURE_MSB_REG | 0x14 |
| LTC2943_TEMPERATURE_LSB_REG | 0x15 |
| LTC2943_TEMPERATURE_THRESH_HIGH_REG | 0x16 |
| LTC2943_TEMPERATURE_THRESH_LOW_REG | 0x17 |
*/
/*! @name Registers
@{ */
// Registers
#define LTC2943_STATUS_REG 0x00
#define LTC2943_CONTROL_REG 0x01
#define LTC2943_ACCUM_CHARGE_MSB_REG 0x02
#define LTC2943_ACCUM_CHARGE_LSB_REG 0x03
#define LTC2943_CHARGE_THRESH_HIGH_MSB_REG 0x04
#define LTC2943_CHARGE_THRESH_HIGH_LSB_REG 0x05
#define LTC2943_CHARGE_THRESH_LOW_MSB_REG 0x06
#define LTC2943_CHARGE_THRESH_LOW_LSB_REG 0x07
#define LTC2943_VOLTAGE_MSB_REG 0x08
#define LTC2943_VOLTAGE_LSB_REG 0x09
#define LTC2943_VOLTAGE_THRESH_HIGH_MSB_REG 0x0A
#define LTC2943_VOLTAGE_THRESH_HIGH_LSB_REG 0x0B
#define LTC2943_VOLTAGE_THRESH_LOW_MSB_REG 0x0C
#define LTC2943_VOLTAGE_THRESH_LOW_LSB_REG 0x0D
#define LTC2943_CURRENT_MSB_REG 0x0E
#define LTC2943_CURRENT_LSB_REG 0x0F
#define LTC2943_CURRENT_THRESH_HIGH_MSB_REG 0x10
#define LTC2943_CURRENT_THRESH_HIGH_LSB_REG 0x11
#define LTC2943_CURRENT_THRESH_LOW_MSB_REG 0x12
#define LTC2943_CURRENT_THRESH_LOW_LSB_REG 0x13
#define LTC2943_TEMPERATURE_MSB_REG 0x14
#define LTC2943_TEMPERATURE_LSB_REG 0x15
#define LTC2943_TEMPERATURE_THRESH_HIGH_REG 0x16
#define LTC2943_TEMPERATURE_THRESH_LOW_REG 0x17
//! @}
/*!
| Command Codes | Value |
| :-------------------------------------------- | :-------: |
| LTC2943_AUTOMATIC_MODE | 0xC0 |
| LTC2943_SCAN_MODE | 0x80 |
| LTC2943_MANUAL_MODE | 0x40 |
| LTC2943_SLEEP_MODE | 0x00 |
| LTC2943_PRESCALAR_M_1 | 0x00 |
| LTC2943_PRESCALAR_M_4 | 0x08 |
| LTC2943_PRESCALAR_M_16 | 0x10 |
| LTC2943_PRESCALAR_M_64 | 0x18 |
| LTC2943_PRESCALAR_M_256 | 0x20 |
| LTC2943_PRESCALAR_M_1024 | 0x28 |
| LTC2943_PRESCALAR_M_4096 | 0x30 |
| LTC2943_PRESCALAR_M_4096_2 | 0x31 |
| LTC2943_ALERT_MODE | 0x04 |
| LTC2943_CHARGE_COMPLETE_MODE | 0x02 |
| LTC2943_DISABLE_ALCC_PIN | 0x00 |
| LTC2943_SHUTDOWN_MODE | 0x01 |
*/
/*! @name Command Codes
@{ */
// Command Codes
#define LTC2943_AUTOMATIC_MODE 0xC0
#define LTC2943_SCAN_MODE 0x80
#define LTC2943_MANUAL_MODE 0x40
#define LTC2943_SLEEP_MODE 0x00
#define LTC2943_PRESCALAR_M_1 0x00
#define LTC2943_PRESCALAR_M_4 0x08
#define LTC2943_PRESCALAR_M_16 0x10
#define LTC2943_PRESCALAR_M_64 0x18
#define LTC2943_PRESCALAR_M_256 0x20
#define LTC2943_PRESCALAR_M_1024 0x28
#define LTC2943_PRESCALAR_M_4096 0x30
#define LTC2943_PRESCALAR_M_4096_2 0x31
#define LTC2943_ALERT_MODE 0x04
#define LTC2943_CHARGE_COMPLETE_MODE 0x02
#define