• xxcxzczxcxzcqweqw
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2019-12-12 20:34
    上传日期
stm32 ina219驱动程序IIC协议,可测电压电流功率
INA219驱动.rar
  • ina219.c
    4.1KB
  • ina219.h
    6.5KB
内容介绍
#include "ina219.h" void INA_REG_Write(unsigned char reg,unsigned int data); #ifdef INA_INSIDE_IIC void INA_IIC_Delay() {unsigned char x; for(x=1;x>0;x--) { __NOP();__NOP();__NOP();__NOP();__NOP(); } } void INA_IIC_INIT(void) //IIC初始化 { GPIO_InitTypeDef GPIO_INIT; RCC_APB2PeriphClockCmd(IIC_RCC,ENABLE); GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_INIT.GPIO_Pin=IIC_SDA | IIC_SCL; GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(IIC_PORT,&GPIO_INIT); IIC_SDA_H; IIC_SCL_H; } void INA_IIC_SDA_OUT(void) //SDA配置为输出 { GPIO_InitTypeDef GPIO_INIT; GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_INIT.GPIO_Pin=IIC_SDA ; GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(IIC_PORT,&GPIO_INIT); } void INA_IIC_SDA_IN(void) //SDA配置为输入 { GPIO_InitTypeDef GPIO_INIT; GPIO_INIT.GPIO_Mode=GPIO_Mode_IPU; GPIO_INIT.GPIO_Pin=IIC_SDA ; GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(IIC_PORT,&GPIO_INIT); } void INA_IIC_Start(void) //开始信号 { IIC_SDA_H; IIC_SCL_H; INA_IIC_Delay(); IIC_SDA_L; INA_IIC_Delay(); IIC_SDA_L; } void INA_IIC_Stop(void ) //结束信号 { IIC_SDA_L; IIC_SCL_H; INA_IIC_Delay(); IIC_SDA_H; INA_IIC_Delay(); IIC_SCL_L; IIC_SCL_H; IIC_SDA_H; } bool INA_IIC_ACK_Read(void) //读取应答信号 { bool ack; IIC_SDA_H; INA_IIC_SDA_IN(); IIC_SCL_H; INA_IIC_Delay(); if(IIC_SDA_READ() == SET) ack=false; else ack=true; IIC_SCL_L; INA_IIC_SDA_OUT(); return ack; } void INA_IIC_ACK_Send(bool ack) //发送应答信号 { IIC_SCL_L; if(ack == true) IIC_SDA_L; else IIC_SDA_H; IIC_SCL_H; INA_IIC_Delay(); IIC_SCL_L; } void INA_IIC_Send_Byte(unsigned char byte) //IIC发送一位数据 { unsigned char i; IIC_SCL_L; for(i=0;i<8;i++) { if(byte & 0x80 ) IIC_SDA_H; else IIC_SDA_L; IIC_SCL_H; INA_IIC_Delay(); IIC_SCL_L; INA_IIC_Delay(); byte<<=1; } INA_IIC_ACK_Read(); } unsigned char INA_IIC_Read_Byte(void) //IIC读取一位数据 { unsigned char i,byte=0; INA_IIC_SDA_IN(); for(i=0;i<8;i++) { IIC_SCL_H; byte<<=1; if(IIC_SDA_READ() == SET) byte |= 0x01; else byte &= 0xFE; IIC_SCL_L; INA_IIC_Delay(); } INA_IIC_SDA_OUT(); return byte; } #endif void INA_Read_Byte_s(unsigned char reg,unsigned char *data) //读两位数据 { INA_IIC_Start(); INA_IIC_Send_Byte(INA219_ADDRESS); //发送INA219地址s INA_IIC_Send_Byte(reg); INA_IIC_Start(); INA_IIC_Send_Byte(INA219_ADDRESS+0x01); //设置iic为读模式 *data=INA_IIC_Read_Byte(); data++; INA_IIC_ACK_Send(1); *data=INA_IIC_Read_Byte(); INA_IIC_ACK_Send(0); INA_IIC_Stop(); } void INA_REG_Write(unsigned char reg,unsigned int data) //写寄存器 测试成功 { unsigned char data_temp[2]; data_temp[0]=(unsigned char )(data>>8); data_temp[1]=(unsigned char )(data & 0xFF); INA_IIC_Start(); INA_IIC_Send_Byte(INA219_ADDRESS); //发送INA219地址 INA_IIC_Send_Byte(reg); //发送寄存器地址 INA_IIC_Send_Byte(data_temp[0]); //发送高8位数据 data++; INA_IIC_Send_Byte(data_temp[1]) ; //发送低8位数据 INA_IIC_Stop(); } void INA_Init(void ) { INA_IIC_INIT(); INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value); INA_REG_Write(INA219_REG_CALIBRATION,INA_CAL); } unsigned int INA_GET_Voltage_MV(void) //获取电压(单位:mv) { unsigned char data_temp[2]; INA_Read_Byte_s(0x02,data_temp); return (int)((((data_temp[0]<<8)+data_temp[1]) >> 3)*4); //右移3为去掉:bit2,CNVR,OVF三位,再乘以 4MV (官方文档规定),得到当前总线的电压值 } unsigned int INA_GET_Current_MA(void) //获取电流(单位:mA) { unsigned char data_temp[2]; INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value); INA_Read_Byte_s(INA219_REG_CURRENT,data_temp); return (int)((((data_temp[0]<<8)+data_temp[1]))*IAN_I_LSB); //得到寄存器的值在乘以每位对应的值(IAN_I_LSB)得到实际的电流 } unsigned int INA_GET_Power_MW(void) //获取当前功率(单位:mw) { unsigned char data_temp[2]; INA_Read_Byte_s(INA219_REG_POWER,data_temp); return (int)(((data_temp[0]<<8)+data_temp[1])*INA_Power_LSB); //得到寄存器的值在乘以每位对应的值(INA_Power_LSB)得到实际的功率 }
评论
    相关推荐
    • INA219驱动程序.rar
      INA219电流传感器驱动程序,C51单片机可用,
    • GY-INA219.rar
      ina219模块驱动,实现电源管理ii2输出电源电压电流功率
    • INA219.zip
      INA219 驱动程序,基于CC2541控制器,
    • INA系列.rar
      INA219INA226、INA230、INA231、INA260、INA3321驱动程序 运用于电压电流功率检测,IIC型芯片的驱动文件,自动识别,MCU使用。
    • INA219_Driver STM32 CUBEMX RT-thread 驱动
      INA219_Driver STM32 CUBEMX RT-thread 驱动
    • INA3221库例程和原理图
      包含了INA3221库例程和原理图资料。
    • Adafruit_CircuitPython_INA219:INA219电流传感器的电路python驱动程序
      pip3 install adafruit-circuitpython-ina219 要在系统范围内安装(在某些情况下可能需要安装): sudo pip3 install adafruit-circuitpython-ina219 要在当前项目中的虚拟环境中安装,请执行以下操作: mkdir ...
    • node-ina219:适用于Adafruit INA219的Node.js驱动程序
      Adafruit INA219的Node.js驱动程序。 这是从Adafuit创建的C代码到NodeJS的直接端口,并在相当一段时间前发布在。 此后看来,Adafruit代码已发生了很大变化,并且尚未得到维护/报告。 安装 $ npm install ina219 ...
    • INA219例程.rar
      基于STM32F103的IN219A驱动INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压,转换次数和滤波选项可通过编程设定。可编程校准值与内部乘法器相结合,支持直接...
    • SIM800C_MQTT.rar
      使用SIM800C模块,使用MQTT协议,连接中国移动onenet平台,能实现数据的订阅、发布、存储等