2022/10/5 --- IIC A7核复习

创作本文目的:记录自己的学习历程


一、A7实现IIC总线下的温湿度传感器步骤

1.相关概念

IIC
	IIC总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL
	IIC总线需要接两个上拉电阻,这两个上拉电阻作用在IIC总线为空闲状态时保持高电平
	IIC硬件结构简单,接口连接方便,成本较低。
	IIC总线传输速率
	    低速 100k
	    中速 400k
	    全速 3.4M
	IIC总线支持多主机多从机模式,同一时刻,只能有一个主机和一个从机进行通信
	挂接到每一个IIC总线上所有的设备,每一个从机都有自己唯一的七位从机地址
	在总线上,发送数据的叫做发送器,接收数据的叫做接收器
	主动发起数据通信的叫做主机,只能被动接收数据的叫做从机
	时钟信号是由主机产生的,作用于从机,保证总线上传输数据同步

IIC时序
	1.起始信号:在SCL为高电平期间,SDA从高电平到低电平的变化
	2.停止信号:在SCL为高电平期间,SDA从低电平到高电平的变化
	3.数据传输:在SCL高电平时,只允许读取数据,SDA必须保持稳定,在SCL低电平时,允许往SDA上写数据
	4.应答/非应答信号:在8位数据位传输完毕后,必须在第9个时钟周期内返回一个应答/非应答信号
				        如果读到的是高电平,代表是非应答信号
				        如果读到的是低电平,代表是应答信号
	5.寻址,由于需要确定从机地址,所以在起始信号产生后,必须传递一个7位从机地址

2.分析硬件

在这里插入图片描述

I2C1_SDA — PF15
I2C1_SCL — PF14

3.分析芯片手册

stm32mp157A
	RCC
	GPIO(通过GPIO来模拟IIC寄存器)

si7006芯片手册
	1.si7006从机地址
	2.找到采集温度湿度命令码
	3.初始化si7006芯片,初始化的值,写到哪一个寄存器中
	4.读取温湿度芯片IIC协议
	5.采集温湿度数字量转换为模拟量公式

4.代码

iic.h

#ifndef __IIC_H__
#define __IIC_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "gpio.h"
/* 通过程序模拟实现I2C总线的时序和协议
 * GPIOF ---> AHB4
 * I2C1_SCL ---> PF14
 * I2C1_SDA ---> PF15
 *
 * */

#define SET_SDA_OUT     do{
     GPIOF->MODER &= (~(0x3 << 30)); \
							GPIOF->MODER |= (0x1 << 30);}while(0)
#define SET_SDA_IN      do{
     GPIOF->MODER &= (~(0x3 << 30));}while(0)

#define I2C_SCL_H       do{
     GPIOF->BSRR |= (0x1 << 14);}while(0)
#define I2C_SCL_L       do{
     GPIOF->BRR |= (0x1 << 14);}while(0)

#define I2C_SDA_H       do{
     GPIOF->BSRR |= (0x1 << 15);}while(0)
#define I2C_SDA_L       do{
     GPIOF->BRR |= (0x1 << 15);}while(0)

#define I2C_SDA_READ    (GPIOF->IDR & (0x1 << 15))

void delay_us(void);
void i2c_init(void);
void i2c_start(void);
void i2c_stop(void);
void i2c_write_byte(unsigned char  dat);
unsigned char i2c_read_byte(unsigned char ack);
unsigned char i2c_wait_ack(void);       
void i2c_ack
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值