cubeMX版本:6.4.0

keil5版本:5.36.0.0

打开cube MX,创建工程文件,这里直接跳过。

配置IIC,选择I2C2,(I2C可选,由硬件电路决定)

I2C Speed Mode有两种模式:标准模式(最大100kHz)、快速模式(最大400kHz)

本次使用快速模式,时钟频率400kHz

其他参数保持默认

点击GENERATE CODE,生成代码,工程文件路径不能包含中文

等待代码生成后打开,至此工程创建完成

为了方便后续使用,为ina219功能创建 ina219.c和ina219.h文件

下载地址:(126条消息) STM32Fx+cubeMX+硬件IIC+INA219(同一个I2C挂载两个芯片)-C文档类资源-CSDN文库https://download.csdn.net/download/qq_28455253/84203175

翻阅ina219芯片手册

Maximum Expected Current:最大电流,由最大分压电压值和分压电阻阻值决定,本次采用40mv和0.003Ω,因此

Maximum Expected Current = U/R = 40 * 0.001 / 0.003 = 40 / 3 = 13.333A

Current_LSB = Maximum Expected Current / 2^15 = 4.069 * 10^-4

Cal = 0.04096 / (4.069 * 10^-a * 0.003) = 33555

ina219.c文件

I2C通信函数

HAL_StatusTypeDef ina219_write(uint8_t channel, uint16_t MemAddress, uint16_t value){
    uint8_t ina219_address = channel==1?INA219_ADDRESS_1 : INA219_ADDRESS_2;
    uint8_t data[2] = {(uint8_t)(value>>8), (uint8_t)(value & 0xFF)};
    return HAL_I2C_Mem_Write(&hi2c2, ina219_address, MemAddress, I2C_MEMADD_SIZE_8BIT, data, 2, 0x1000);
}

HAL_StatusTypeDef ina219_read(uint8_t channel, uint16_t MemAddress, uint8_t *data){
    uint8_t ina219_address = channel==1?INA219_ADDRESS_1 : INA219_ADDRESS_2;
    return HAL_I2C_Mem_Read(&hi2c2, ina219_address, MemAddress, I2C_MEMADD_SIZE_8BIT, data, 2, 0x1000);
}

芯片参数设置函数

void ina219_init(void)
{
    uint16_t INA219_CONFIG_value =     INA219_CONFIG_BVOLTAGERANGE_32V|
                                                                    INA219_CONFIG_GAIN_1_40MV|
                                                                    INA219_CONFIG_BADCRES_12BIT|
                                                                    INA219_CONFIG_SADCRES_12BIT_1S_532US|
                                                                    INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS;
    ina219_write(1, INA219_REG_CONFIG, INA219_CONFIG_value);
    ina219_write(1, INA219_REG_CALIBRATION, INA_CAL);
    ina219_write(2, INA219_REG_CONFIG, INA219_CONFIG_value);
    ina219_write(2, INA219_REG_CALIBRATION, INA_CAL);
}

获取电压、电流、功率函数

double ina219_get_V(uint8_t channel){
    unsigned char data[2];
    ina219_read(channel, INA219_REG_BUSVOLTAGE, data);
    int val = (data[0]<<8) + data[1];
    val >>= 3;
    val *= 4;
    return (double)val / 1000;
}

double ina219_get_v(uint8_t channel){
    unsigned char data[2];
    ina219_read(channel, INA219_REG_SHUNTVOLTAGE, data);
    int val = (data[0]<<8) + data[1];
    return (double)val * 0.040 / 32000;
}

double ina219_get_A(uint8_t channel){
    unsigned char data[2];
    ina219_read(channel, INA219_REG_CURRENT, data);
    int val = (data[0]<<8) + data[1];
    return (double)val * 0.0004069;
}

double ina219_get_W(uint8_t channel){
    unsigned char data[2];
    ina219_read(channel, INA219_REG_POWER, data);
    int val = (data[0]<<8) + data[1];
    return (double)val * 20 * 0.0004069;
}

ina219.h文件

#define INA219_ADDRESS_1  (0x41 << 1)     // A0 = GND, A1 = GND
#define INA219_ADDRESS_2  (0x40 << 1)     // A0 = VCC, A1 = GND

// 寄存器地址
#define INA219_REG_CONFIG                       (uint8_t)(0x00)      // 模式配置寄存器 (R/W)
#define INA219_REG_SHUNTVOLTAGE                 (uint8_t)(0x01)      // 分流电阻电压寄存器 (R)
#define INA219_REG_BUSVOLTAGE                   (uint8_t)(0x02)      // 总线电压寄存器 (R)
#define INA219_REG_POWER                        (uint8_t)(0x03)      // 功率寄存器 (R)
#define INA219_REG_CURRENT                      (uint8_t)(0x04)      // 电流寄存器 (R)
#define INA219_REG_CALIBRATION                  (uint8_t)(0x05)      // 基准值寄存器 (R/W)

//寄存器(0x01)参数定义
#define INA219_CONFIG_RESET                    (0x8000)  // Reset Bit

#define INA219_CONFIG_BVOLTAGERANGE_MASK       (0x2000)  // Bus Voltage Range Mask
#define INA219_CONFIG_BVOLTAGERANGE_16V        (0x0000)  // 0-16V Range
#define INA219_CONFIG_BVOLTAGERANGE_32V        (0x2000)  // 0-32V Range

#define INA219_CONFIG_GAIN_MASK                (0x1800)  // Gain Mask
#define INA219_CONFIG_GAIN_1_40MV              (0x0000)  // Gain 1, 40mV Range        //配置检测电阻上的最大检测电压
#define INA219_CONFIG_GAIN_2_80MV              (0x0800)  // Gain 2, 80mV Range
#define INA219_CONFIG_GAIN_4_160MV             (0x1000)  // Gain 4, 160mV Range
#define INA219_CONFIG_GAIN_8_320MV             (0x1800)  // Gain 8, 320mV Range

#define INA219_CONFIG_BADCRES_MASK             (0x0780)  // Bus ADC Resolution Mask
#define INA219_CONFIG_BADCRES_9BIT             (0x0080)  // 9-bit bus res = 0..511
#define INA219_CONFIG_BADCRES_10BIT            (0x0100)  // 10-bit bus res = 0..1023
#define INA219_CONFIG_BADCRES_11BIT            (0x0200)  // 11-bit bus res = 0..2047
#define INA219_CONFIG_BADCRES_12BIT            (0x0400)  // 12-bit bus res = 0..4097

#define INA219_CONFIG_SADCRES_MASK             (0x0078)  // Shunt ADC Resolution and Averaging Mask
#define INA219_CONFIG_SADCRES_9BIT_1S_84US     (0x0000)  // 1 x 9-bit shunt sample
#define INA219_CONFIG_SADCRES_10BIT_1S_148US   (0x0008)  // 1 x 10-bit shunt sample
#define INA219_CONFIG_SADCRES_11BIT_1S_276US   (0x0010)  // 1 x 11-bit shunt sample
#define INA219_CONFIG_SADCRES_12BIT_1S_532US   (0x0018)  // 1 x 12-bit shunt sample
#define INA219_CONFIG_SADCRES_12BIT_2S_1060US  (0x0048)     // 2 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_4S_2130US  (0x0050)  // 4 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_8S_4260US  (0x0058)  // 8 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_16S_8510US (0x0060)  // 16 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_32S_17MS   (0x0068)  // 32 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_64S_34MS   (0x0070)  // 64 x 12-bit shunt samples averaged together
#define INA219_CONFIG_SADCRES_12BIT_128S_69MS  (0x0078)  // 128 x 12-bit shunt samples averaged together

#define INA219_CONFIG_MODE_MASK                (0x0007)  // Operating Mode Mask
#define INA219_CONFIG_MODE_POWERDOWN           (0x0000)
#define INA219_CONFIG_MODE_SVOLT_TRIGGERED     (0x0001)
#define INA219_CONFIG_MODE_BVOLT_TRIGGERED     (0x0002)
#define INA219_CONFIG_MODE_SANDBVOLT_TRIGGERED (0x0003)
#define INA219_CONFIG_MODE_ADCOFF              (0x0004)
#define INA219_CONFIG_MODE_SVOLT_CONTINUOUS    (0x0005)
#define INA219_CONFIG_MODE_BVOLT_CONTINUOUS    (0x0006)
#define INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS (0x0007)

#define INA_CAL 33555                            //(0x05)寄存器基准值

直接调用获取函数即可

int main(void)

{

...

ina219_init();

while(1)

{

double  p1 = ina219_get_W(1);

double  p2 = ina219_get_W(2);

...

HAL_Delay(100);

}

}

STM32Fx+cubeMX+硬件IIC+INA219(同一个I2C挂载两个芯片)相关推荐

  1. STC8H_硬件IIC

    STC8H_硬件IIC 原理图部分 I2C相关的寄存器 I2C配置寄存器(I2CCFG),总线速度控制 I2C从机状态寄存器(I2CSLST) I2C从机地址寄存器(I2CSLADR) I2C数据寄存 ...

  2. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)

    [STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...

  3. 基于cubemx的硬件iic SHT30的iic调试

    一直对stm32的硬件iic敬而远之,好像说是有问题的,就一直用的模拟iic实现,今天用sht30试了一下,发现基于cubemx来配置iic还挺方便的.现做如下记录 首先是硬件平台:stm32f103 ...

  4. STM32CubeMx HAL库使用硬件IIC读写AT24C02

    介绍使用硬件IIC接口读写AT24C02,STM32自带硬件IIC,比较好用,没必要千篇一律的使用模拟IIC.作为一个IIC的使用例子,可以适当修改用于其他IIC接口设备通信控制. 一.测试环境 ST ...

  5. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...

    转载于 : http://blog.csdn.net/zqixiao_09/article/details/50917655 关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸 ...

  6. CubeMx笔记 -- IIC(位带操作实现)+ IO拓展

    文章目录 1.理论基础 1.1.物理层特点 1.2.通信过程 1.3.IIC架构 2.工程建立(硬件iic) 2.1.配置步骤 2.2.cubemx具体配置 3.应用(软件iic) 3.1.原理图 3 ...

  7. GD32F303调试小记(三)之IIC(硬件IIC+PCF8563实时时钟)

    前言 前面的文章介绍了在单片机中常用的两种通信协议(USART和SPI),并给出了GD32F303对应的配置流程.这次介绍第三种常见的通信协议IIC.这此使用GD32的硬件IIC通信PCF8563实时 ...

  8. u8g2库stm32移植记录(硬件IIC)

    这是用stm32cubemx,hal库,硬件IIC的方式移植u8g2的教程: 0.移植其实非常简单,文中代码较多只是因为我把官方的模板放上来了,实际上要写的代码只有三部分,代码量非常小的!如果不想看那 ...

  9. 【STM32-I2C学习总结】STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC

    STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC 一 .I2C物理层 二.协议层 1.I2C基本读写过程 (1)主机写数据到从机 (2)主机由从机中读数据 (3)I2C 通讯复合 ...

最新文章

  1. java 空语句_Java空语句怎么写才正确?这样的Java基础知识才是你需要的
  2. Python的线程/进程间通讯对象分析
  3. JAVA编写的7个规范
  4. Hive小文件问题:如何产生、造成影响、解放办法
  5. 名校博士被撤销学位,只因7行文字抄袭及1张互联网图片​……
  6. 【css】响应式布局 @media媒介 适配平板手机
  7. 4. Spring Boot 过滤器、监听器
  8. 华三 h3c ospf、rip 路由引入和路由策略
  9. python 释放内存_python深入之python内存管理机制(重点)
  10. 鲜为人知的软件项目管理原则
  11. ROS——RPLIDAR A1 SDK详解
  12. 【所见即所得】数据分析最有用的25个 Matplotlib图【附代码】
  13. 2 SAP SCC1同一服务器传请求号
  14. 等保(公安部82号令)
  15. 箱体图如何排除异常点
  16. 用mpx框架自定义小程序底部tabbar
  17. weblogic(10.3.6)
  18. 兆隆计算机学院新建大楼网络设计项目方案
  19. 页面布局常用,让子级div排排坐
  20. 【转知乎】异地恋如何维持之电子本科生

热门文章

  1. android 8.0 一加5,一加5如何升级安卓8.0 一加5升级安卓8.0图文教程
  2. 4-20校招面试总结
  3. 广东省一本大学哪些学计算机,广东九所一本高校填报攻略
  4. 使用itextpdf在pdf模板中插入对应数据
  5. 微计算机原理与接口,微计算机原理与接口技术概要
  6. c语言循环左移程序,用C语言实现循环左移,右移
  7. 2022R2移动式压力容器充装考试题及答案
  8. 【数据结构与算法】思维导图
  9. 制作 JS 广告的简易入门(二)利用 CSS3 技术制作广告
  10. typescript 如何反推数组的类型