基于STM32F1的ISL95311数字电位器驱动


一、分析数据手册

1. 确认寄存器

根据数据手册,ISL95311一共有三个寄存器用于完成操作
ACR->控制访问地址
IVR->上电恢复上一次的值
WR->写入数据
在这里插入图片描述

当ISL95311上电后,若不操作ACR,即ACR为默认值0x00
   读时序访问地址0会得到IVR的值,写时序访问地址0会向IVR及WR写入相同的值
若操作ACR,将其值设置为0x80
   读时序访问地址0会得到WR的值,写时序访问地址0只会向WR写入值
写时序访问地址2时控制ACR值

2. 确认访问时序

在这里插入图片描述
根据数据手册,I2C七位地址最后一位为读写控制位,A0 A1确认访问的器件地址

3. 确认读写时序

在这里插入图片描述
根据数据手册,写时序首先需要输入目标器件地址,然后输入寄存器控制地址,最后输入数值;读时序首先输入目标器件地址及寄存器控制地址,然后输入读指令获取对应寄存器值

二、STM32CubeMX配置

1. 时钟配置

在这里插入图片描述

2. I2C配置

在这里插入图片描述

3. GPIO配置

ISL95311 A0及A1默认接地
在这里插入图片描述

三、驱动编写

1. 添加头文件

创建ISL95311Ctrl.h,添加如下代码

#ifndef __ISL95311_CTRL_H
#define __ISL95311_CTRL_H

#include <stdint.h>
#include "stm32f1xx_hal.h"

#define ISL95311_ADDR 	0x28

void ISL95311Ctrl_Init(void);
uint8_t Get_ISL95311_Value(void);
void Set_ISL95311_Value(uint8_t num);

#endif

2. 添加主文件

创建ISL95311Ctrl.c,添加如下代码

#include "ISL95311Ctrl.h"
#include "i2c.h"

void ISL95311Ctrl_Init(void)
{
	MX_I2C1_Init();
}

static void ISL95311Ctrl_Write(uint8_t *data, uint16_t len)
{
	while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)(ISL95311_ADDR << 1), (uint8_t *)data, len, 0xff) != HAL_OK)
	{
		if(HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF)
		{
			Error_Handler();
		}
	}
}

static void ISL95311Ctrl_Read(uint8_t *data, uint16_t len)
{
	while(HAL_I2C_Master_Receive(&hi2c1, (uint16_t)(ISL95311_ADDR << 1), (uint8_t *)data, len, 0xff) != HAL_OK)
	{
		if(HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF)
		{
			Error_Handler();
		}		
	}
}

uint8_t Get_ISL95311_Value(void)
{
	uint8_t ACR[2] = {0x02, 0x02};
	uint8_t WR_Access = 0x00;
	uint8_t res = 0;
	
	ISL95311Ctrl_Write(ACR, 2);
	ISL95311Ctrl_Write(&WR_Access, 1);
	ISL95311Ctrl_Read(&res, 1);
	
	return res;
}

void Set_ISL95311_Value(uint8_t num)
{
	uint8_t ACR[2] = {0x02, 0x00};
	uint8_t data[2] = {0x00, num};

	ISL95311Ctrl_Write(ACR, 2);
	ISL95311Ctrl_Write(data, 2);
}


总结

通过以上分析及步骤,我们就完成了ISL95311数字电位器的驱动程序,经测试可正常读写

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值