当前位置: 首页 > article >正文

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

添加头文件

初始化:

输出:

运行结果:


http://www.kler.cn/a/589616.html

相关文章:

  • QT中的宏
  • JAVA | 聚焦 String 的常见用法与底层内存原理
  • 无人机吊舱模块更换技术难点分析!
  • UFS Link Startup 介绍
  • 怎么在centos7中搭建一个mqtt服务
  • 设计模式(行为型)-状态模式
  • 【CVPR 2025】局部区域自注意力LASA,用重叠补丁增强区域特征交互,即插即用!
  • 【Mac 从 0 到 1 保姆级配置教程 08】08. 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了
  • 【JavaEE】Spring Boot 日志
  • Qt:槽函数与信号
  • 下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?
  • python项目一键加密,极度简洁
  • 使用Appium的W3C Actions实现多指触控行为
  • C++ STL 之常用拷贝和替换算法①copy();②replace();③replace_if();④swap();
  • C++ STL map
  • Spring Boot 动态配置管理:ZooKeeper 集成与 Redis 配置覆盖实践
  • easypoi导入Excel兼容日期和字符串格式的日期和时间
  • OpenCV计算摄影学(23)艺术化风格化处理函数stylization()
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的自动配置:约定优于配置的设计美学
  • Vue 登录 记住密码,设置存储时间