INA3221使用方法和INA226基本上一致,多了选择多通道读取,根据数据手册制定不一样的初始化代码。
INA3221不能够直接读分流电阻的电流,但可以通过算得两端电压算出电流。
上代码:
INA3221.c:


#include "INA3221.h" static void delay_nns_3221(uint16_t D) //30纳秒ns 根据手册要用到IIC的HS高速模式 { while(--D); } void delay_nms_3221(uint16_t ms) //毫秒 { uint16_t i; uint32_t M = 0;//720W for(i = 0;i < ms; i++) for(M=12000;M > 0;M--); } void delay_nus_3221(uint16_t us)//微秒 { uint16_t i; uint16_t M = 0;//720W for(i = 0;i < us; i++) for(M=72;M > 0;M--); } /****************IIC***************************/ void INA3221_IIC_Init(void) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟 //PC11,12初始化设置 GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;//PB6SCL PB7SDA GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速 HAL_GPIO_Init(GPIOB,&GPIO_Initure); IIC_SDA_H_3221; IIC_SCL_H_3221; delay_nms_3221(5); } void INA3221_IIC_Start(void) { IIC_SDA_H_3221; IIC_SCL_H_3221; delay_nns_3221(5); IIC_SDA_L_3221;//START:when CLK is high,DATA change form high to low delay_nns_3221(5); IIC_SCL_L_3221;//钳住I2C总线,准备发送或接收数据 delay_nns_3221(5); } void INA3221_IIC_St