当前位置:网站首页>【正点原子】IIC的学习与使用(未完...)
【正点原子】IIC的学习与使用(未完...)
2022-07-30 05:45:00 【Clockwisee】
前言
由于b站江科大自化协的stm32c8t6视频暂时没有更新IIC通信的视频,所以这里跟着正点原子官方视频学了。
IIC简介

I2C协议

协议与代码
空闲状态-开始信号-停止信号的代码使用
//产生IIC起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1; //SDA = 1,SCL = 1 空闲状态
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;SDA = 0,SCL = 0 才能准备停止信号
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}

//等待应答信号到来
//返回值:1,接收应答失败
// 0,接收应答成功
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)//数据线是 高 就一直等,等不到低电平就认为是无效的
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出0 低电平
return 0;
}
应答信号
//产生ACK应答
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0; //SDA始终为 低 产生应答
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//不产生ACK应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1; //SDA始终为 高 不产生应答
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
下面就是发送一个字节和读取一个字节的函数
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
//IIC_SDA=(txd&0x80)>>7;
if((txd&0x80)>>7) //准备数据
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2); //对TEA5767这三个延时都是必须的
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
如下图所示
SDA在SCL为低电平时候准备数据,SCL在0、1、0变化过程中,SDA时钟为高电平
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA设置为输入 在SCL为高电平时候读取信号,与发送刚好相反
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1; //整个数据往左移一位,假如接收了五位,00012345,读取数据6,左移一位00123456
if(READ_SDA)receive++; //左移后最低为变为0 对最低位进行++
delay_us(1);
}
if (!ack)
IIC_NAck();//发送nACK 不应答信号
else
IIC_Ack(); //发送ACK 应答信号
return receive;
}
EEPROM(24C02)
边栏推荐
- Mysql client common exception analysis
- Flink-流/批/OLAP一体得到Flink引擎
- Trust anchor for certification path not found. Exception solution.
- Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition程序运行记录
- Dropout原理及作用
- shardingsphere 分库分表及配置示例
- Xcode 绑定按钮点击事件
- Atmospheric particulate matter PMF source analysis
- Redis 客户端常见异常分析
- 思谋面试准备
猜你喜欢

SQL Server Installation Tutorial

Generalized Focal Loss 论文阅读笔记

昆仑通态屏幕制作(连载2)---基础篇(设定与显示,串口发送)

二十二、Kotlin进阶学习:简单学习RecyclerView实现列表展示;

六、Kotlin基础学习:函数

FPGA解析B码----连载1

Mycat2.0 build tutorial

R - GIS: how to use R language implementation of GIS geospatial analysis and model prediction

DeepLearing4j深度学习之Yolo Tiny实现目标检测

Pytorch(一):动态图机制以及框架结构
随机推荐
GraphQL (1) Basic introduction and application examples
QT每周技巧(1)~~~~~~~~~运行图标
思谋面试准备
边境的悍匪—机器学习实战:第十章 Keras人工神经网络简介
边境的悍匪—机器学习实战:第十三章 使用TensorFlow加载和预处理数据
单例模式:Swift 实现
Trust anchor for certification path not found. Exception solution.
边境的悍匪—机器学习实战:第九章 无监督学习任务
边境的悍匪—机器学习实战:第十一章 训练深度神经网络
关于map对key自定义排序
常用损失函数(一):Focal Loss
FPGA解析B码----连载2
Kotlin协程的简单用法:1、GlobalScope(不建议使用);2、lifecycleScope、viewModelScope(建议使用);
昆仑通态屏幕制作(连载5)---基础篇(串口接收,文本与灯显示)
CLUE Model Construction Method, Model Validation and Land Use Change Scenario Prediction
QT串口和CAN数据动态实时显示最后日志
DeepLearing4j's deep learning Yolo Tiny realizes target detection
基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割
protobuf coding and network communication applications (1)
Trust anchor for certification path not found.异常解决方法。