芯片解密在Keil5环境下编译的STM32驱动INA219采集芯片,可直接使用,采集的是负载端的电压,对一下因负载变化而造成电压波动,需要电压补偿的应用场合来说,芯片解密.
单片机源程序如下:
- #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;
- }