【STM32】IIC学习笔记

学习IIC


前言

最近沉迷手写笔记~

尝试解读江科大的IIC程序,结合笔记更理解IIC


一、基础知识




GPIO_WriteBit 写入高低电平

二、放代码

这个是江科大的软件IIC的设置部分

bash 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void MyI2C_W_SCL(uint8_t BitValue)	//IIC_SCL写入
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);
	Delay_us(10);
}

void MyI2C_W_SDA(uint8_t BitValue)	//IIC_SDA写入
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);
	Delay_us(10);
}

uint8_t MyI2C_R_SDA(void)			//IIC_SDA读取
{
	uint8_t BitValue;
	BitValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);
	Delay_us(10);
	return BitValue;
}

void MyI2C_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;			//开漏
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
}

void MyI2C_Start(void)
{
	MyI2C_W_SDA(1);
	MyI2C_W_SCL(1);
	MyI2C_W_SDA(0);
	MyI2C_W_SCL(0);
}

void MyI2C_Stop(void)
{
	MyI2C_W_SDA(0);
	MyI2C_W_SCL(1);
	MyI2C_W_SDA(1);
}

void MyI2C_SendByte(uint8_t Byte)
{
	uint8_t i;
	for (i = 0; i < 8; i ++)
	{
		MyI2C_W_SDA(Byte & (0x80 >> i));		//右移操作逐渐得到 Byte 的每一位
		MyI2C_W_SCL(1);							//驱动数据传输,SXL保持高电平才能发送数据
		MyI2C_W_SCL(0);
	}
}

uint8_t MyI2C_ReceiveByte(void)
{
	uint8_t i, Byte = 0x00;
	MyI2C_W_SDA(1);
	for (i = 0; i < 8; i ++)
	{
		MyI2C_W_SCL(1);
		if (MyI2C_R_SDA() == 1) // 读取数据线的状态
		{
			Byte |= (0x80 >> i);
		}
		MyI2C_W_SCL(0);
	}
	return Byte;
}

void MyI2C_SendAck(uint8_t AckBit)
{
	MyI2C_W_SDA(AckBit);
	MyI2C_W_SCL(1);
	MyI2C_W_SCL(0);
}

uint8_t MyI2C_ReceiveAck(void)
{
	uint8_t AckBit;
	MyI2C_W_SDA(1);
	MyI2C_W_SCL(1);
	AckBit = MyI2C_R_SDA();
	MyI2C_W_SCL(0);
	return AckBit;
}

三、逐行细读

开始

SCL高电平,SDA由低电平向高电平跳变

停止

其他的部分在注释里面体现了。


总结

这篇文章依旧没有总结

相关推荐
FakeOccupational1 小时前
【电路笔记 信号】传输线方程:从RLGC推导传输线特性阻抗
笔记
tyqtyq221 小时前
营养餐单规划:AI 科学饮食规划系统的鸿蒙实现
人工智能·学习·华为·职场和发展·生活·harmonyos
万亿少女的梦1682 小时前
基于STM32F103C8T6与ASR Pro的语音控制四足机器人设计
stm32·语音识别·嵌入式系统·四足机器人·舵机控制
鱼听禅2 小时前
Ubuntu学习笔记-安装docker容器
学习·ubuntu·docker
Loving_enjoy3 小时前
DFT可测试性设计规则与检查:确保芯片可测试性的关键步骤
学习
r_oo_ki_e_3 小时前
Java反射机制学习笔记
java·笔记·学习
嵌入式-老费3 小时前
esp32开发与应用(与stm32f103工控板配合之上篇)
stm32·单片机·嵌入式硬件
Nontee3 小时前
数据类型与包装类 — 一个新手学Java的数据类型笔记
java·笔记·python
ysa0510303 小时前
【板子】树上启发式合并
数据结构·c++·笔记·算法
hengcaib3 小时前
金税四期下盐城企业财税合规技术路径:代理记账选型的技术思维
笔记