SH366003常用于实现锂电池的高精度电流、电压、温度采集,常用作电池管理芯片。其采用I2C通讯的形式读取内部寄存器实时数据。
首先配置systick.c
#include "systick.h"
#include "stm32f10x.h"
static uint8_t us = 0;
static uint16_t ms = 0;
void SysTickConfig(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
us = SystemCoreClock / 8000000;
ms = (uint16_t )us *1000;
}
void delay_us(uint32_t nus)
{
uint32_t flags;
SysTick->LOAD = nus * us;
SysTick->VAL = 0x00;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do
{
flags = SysTick->CTRL;
}while((flags&0x01)&&!(flags&(1<<16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0x00;
}
void delay_ms(uint16_t nms)
{
uint32_t flags;
SysTick->LOAD = (uint32_t )nms * ms;
SysTick->VAL = 0x00;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do
{
flags = SysTick->CTRL;
}while((flags&0x01)&&!(flags&(1<<16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0x00;
}
然后配置i2c.c
#include "i2c.h"
#include "stm32f10x.h"
#include "systick.h"
#define SDA GPIO_Pin_2 //根据自己的引脚进行修改
#define SCL GPIO_Pin_12 //根据自己的引脚进行修改
#define SDA_port GPIOD //根据自己的引脚进行修改
#define SCL_port GPIOC //根据自己的引脚进行修改
#define SDA_H GPIO_SetBits(SDA_port,SDA) //SDA高电平
#define SCL_H GPIO_SetBits(SCL_port,SCL) //SCL高