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

stm32-IIC

i^2c,iiCBus,集成电路总线,同步串行半双工通信总线方式

sck:时钟同步信号

SDA:发送数据

GND:接地

通信对象:芯片与芯片


主从应答方式:

SDA:数据总线

SCL:时钟总线


在硬件设计中:

上拉电阻:保证双方都在释放总线时,都保持高电平。

阻值大小:4.7k-10k


通信协议:两个设备,无论在SDA还是、scl,未通信都是高电平

通信时,sda变低信号,意味着开始通信,

主机让sck发出标准方波(高位先行)时钟线速率(100Kbps-400Kbps)

sda置高不允许在SCK置高时置高,所以,当sda发送数据时,SCK必须保持稳定。

接收方会在高电平时采样。

发送一段1010 1100的数据,


当发送第九个bit时,主机会无条件发送一个高电平,从机给一个应答将其拉低,称之为ACK

从机不应答将其拉低,称之为NACK

停止位,双方同时置高,发送结束

理论上i2c可以连接2^7个传感器

1010 0001末尾这位0、1表示数据流向

低电平:主机流向从机    ACK    写

高电平:从机流向主机   NACK  读

DEVICE ADDRESS 寄存器地址

WORD ADDRESS 数据地址

RISC精简指令微处理器、

void i2c_interrupt_handler(void)
{i2c_flag=1;
} 
void init_i2c(void)
{IICCON |= (1 << 7);IICCON |= (1 << 6);IICCON |= (1 << 5);IICCON &= ~(0xF << 0);GPECON |= ((unsigned int)10 << 28);register_irq(i2c_interrupt_handler, 27);enable_irq(27);
}void do_and_wait_ack(void)
{i2c_flag=0;IICCON &= ~(1<<4);while(i2c_flag == 0){delayus(400);}
}

void at24c02_writes(unsigned char device_address,unsigned char reg_address,const unsigned char *pData,unsigned int len)
{unsigned int i;IICSTAT =0xF0;IICDS = device_address;do_and_wait_ack();IICDS = reg_address;do_and_wait_ack();for(i=0;i<len;++i){IICDS = *pData++;do_and_wait_ack();} IICSTAT = 0XD0;IICCON &= ~(1<<4);delayus(400);;
}

void at24c02_read(unsigned char device_address,unsigned char reg_address,unsigned char *pData,unsigned int len)
{unsigned int i;IICSTAT =0xf0;IICDS = device_address;do_and_wait_ack();IICDS = reg_address;do_and_wait_ack();IICSTAT = 0xB0;IICDS = device_address;do_and_wait_ack();*pData = IICDS;do_and_wait_ack();for(i=0;i<len;++i){if(i == (len-1)){IICCON &= ~(1<<7);}*pData++ = IICDS;do_and_wait_ack();}IICSTAT = 0x90;IICCON &= ~(1<<4);delayus(400);IICCON |= (1<<7);
}


http://www.mrgr.cn/news/95759.html

相关文章:

  • 运动仿真——phased.Platform
  • 手动创建Electron+React项目框架(建议直接看最后)
  • 项目日记 -云备份 -服务端配置信息模块
  • Spatial Multiplexing Power Save
  • Spring Boot整合SSE实现消息推送:跨域问题解决与前后端联调实战
  • 排序算法(插入,希尔,选择,冒泡,堆,快排,归并)
  • python-58-基于python的两种方式操作windows安装的pg数据库
  • 【江协科技STM32】Unix时间戳(学习笔记)
  • tortoiseSVN、source insignt、J-flash使用
  • python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测
  • 【MySQL】一篇讲懂什么是聚簇索引和非聚簇索引(二级索引)以及什么是回表?
  • 基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统
  • 矩阵补充,最近邻查找
  • 流程控制语句
  • 【渗透测试】Fastjson 反序列化漏洞原理(一)
  • 算法训练营第二十三天 | 贪心算法(一)
  • GithubPages+自定义域名+Cloudfare加速+浏览器收录(2025最新排坑)
  • 内核中的互斥量
  • UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击
  • Linux修改SSH端口号