3月17日作业

上图得I2C1 SCL和I2C SDA

找到J1上为20和17,找J6上与之对应的

分别是I2C-SDA和I2C-SCL,在J5上即为PB6和PB7

在CubeMx上把除了这两个以外的PA9和PA10配置为USART1_RX和USART1_TX.生成工程

创建ap3216c.c和ap3216c.h文件

然后编写代码,read和write用的是:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
                                   uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
                                    uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

以下是代码:

ap3216c.c:

#include "ap3216c.h"

uint8_t AP3216C_WRITE(uint8_t REG_ADDR,uint8_t command)
{
	HAL_StatusTypeDef res=HAL_I2C_Mem_Write(&hi2c1,AP_WRITE_ADDR,REG_ADDR,1,&command,1,100);
	if(res==HAL_ERROR)
	{
		printf("I2C_write_error\n");
		return -1;
	}
	return 1;
}

void AP3216C_Init()
{
	AP3216C_WRITE(0x00,0x04);
	HAL_Delay(100);
	AP3216C_WRITE(0x00,0x03);
}

uint8_t AP3216C_READ(uint8_t REG_ADDR)
{
	uint8_t VAL;
	HAL_StatusTypeDef res;
	res=HAL_I2C_Mem_Read(&hi2c1,AP_WRITE_ADDR,REG_ADDR,1,&VAL,1,100);
	if(res==HAL_ERROR)
	{
		printf("I2C_read_error\n");
		return 0;
	}
	return VAL;
}

void Get_Val(uint16_t *IR,uint16_t *PS,uint16_t *ALS)
{
	uint8_t L_val,H_val;
	L_val=AP3216C_READ(0x0A);
	HAL_Delay(200);
	H_val=AP3216C_READ(0x0B);
	*IR=H_val<<2|(L_val&0x03);
	
	L_val=AP3216C_READ(0x0E);
	HAL_Delay(200);
	H_val=AP3216C_READ(0x0F);
	*PS=H_val<<4|(L_val&0x0F);
	
	L_val=AP3216C_READ(0x0C);
	HAL_Delay(200);
	H_val=AP3216C_READ(0x0D);
	*ALS=H_val<<8|(L_val);
}

int fputc(int ch,FILE *FP)
{
	while(!((USART1->ISR)&1<<7));
	USART1->TDR=ch;
	return ch;
}

ap3216c.h

#ifndef __AP3216__H__
#define __AP3216__H__
#include "stdio.h"
#include "stdint.h"
#include "i2c.h"

#define AP_WRITE_ADDR 0x3C
#define AP_READ_ADDR 0x3D

uint8_t AP3216C_WRITE(uint8_t REG_ADDR,uint8_t command);
void AP3216C_Init();
uint8_t AP3216C_READ(uint8_t REG_ADDR);
void Get_Val(uint16_t *IR,uint16_t *PS,uint16_t *ALS);

#endif

main.c

添加头文件

初始化:

输出:

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值