STM32中I2C总线上数据的读、写。
/*** @brief 从I2C1总线上的某一器件的某一起始地址中读取一定字节的数据到数组中* @param driver_Addr:I2C器件地址* @param start_Addr:起始字节地址* @param number_Bytes:要读取的字节数量(小于一页)* @param read_Buffer:存放读取数据的数组指针* @retval 是否读取成功*/
u8 I2C1_Read_NBytes(u8 driver_Addr, u8 start_Addr, u8 number_Bytes, u8 *read_Buffer)
{uint8_t read_Num;u8 I2C_Timeout;I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET){if((I2C_Timeout--) == 0){return 1;}}I2C_TransferHandling(I2C1, driver_Addr, 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write); //I2C_No_StartStop I2C_Generate_Start_WriteI2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET){if((I2C_Timeout--) == 0){return 1;}}I2C_SendData(I2C1, start_Addr);I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TC) == RESET){if((I2C_Timeout--) == 0){return 1;}} I2C_TransferHandling(I2C1, driver_Addr, number_Bytes, I2C_AutoEnd_Mode, I2C_Generate_Start_Read);for(read_Num = 0; read_Num<number_Bytes; read_Num++){I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE) == RESET){if((I2C_Timeout--) == 0){return 1;}} read_Buffer[read_Num] = I2C_ReceiveData(I2C1);} I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF) == RESET);{if((I2C_Timeout--) == 0){return 1;}}return 0;
}
u8 I2C1_Write_NBytes(u8 driver_Addr, u8 start_Addr, u8 number_Bytes, u8 *write_Buffer)
{u8 write_Num;u8 I2C_Timeout;I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET){if((I2C_Timeout--) == 0){//I2C_ClearFlag(I2C1, I2C_FLAG_BUSY);return 1;}}I2C_TransferHandling(I2C1, driver_Addr, number_Bytes+1, I2C_AutoEnd_Mode, I2C_Generate_Start_Write);I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET){if((I2C_Timeout--) == 0){return 1;}}I2C_SendData(I2C1, start_Addr);//while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET);//I2C_TransferHandling(I2C1, driver_Addr, number_Bytes, I2C_AutoEnd_Mode, I2C_No_StartStop); for(write_Num = 0; write_Num<number_Bytes; write_Num++){I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET){ if((I2C_Timeout--) == 0){return 1;}}I2C_SendData(I2C1, write_Buffer[write_Num]); }I2C_Timeout = 200;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF) == RESET){if((I2C_Timeout--) == 0){return 1;}}return 0;
}
STM32中I2C总线上数据的读、写。相关推荐
- SCL 和 SDA 是 I2C 总线上的两个信号线。 c++ 模拟数据
I2C(Inter-Integrated Circuit,又称为 IIC 或 TWI)是一种串行通信协议,用于在微控制器和外围设备之间进行数据传输.I2C 协议只需要两根信号线:SCL(时钟线)和 S ...
- 10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据
10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据.
- 初学24CXX系列EEPROM使用详解STM32库函数I2C总线
24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存 ...
- arm linux i2c 总线驱动,ARM-Linux中I2C总线驱动开发
摘 要: 针对I2C总线的特点,Linux内核中定义了I2C驱动体系结构.在分析Linux的I2C总线驱动体系结构基础上,介绍了在S3C2410中设计I2C总线驱动的方法. 关键词: ARM-Lin ...
- IIC(I2C)总线上的设备其地址如何定义?通俗易懂
IIC(I2C)总线上的设备其地址如何定义? IIC总线 一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等. I2C肯定是2线的(不算地线). I2C协议确实很科学,比3/ ...
- 51单片机对I2C总线上挂接多个AT24C02的读写操作+Proteus仿真
51单片机对I2C总线上挂接多个AT24C02的读写操作+Proteus仿真 Proteus仿真图 实例代码 //对I2C总线上挂接多个AT24C02的读写操作 #include <reg51. ...
- arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据
撑腰会儿:I2C通信协议介绍zhuanlan.zhihu.com 上文介绍了I2C协议的基本结构,今天,使用STM32和LM75A温度传感器来实现I2C读取信息. 首先,为了使用I2C读取传感器测量 ...
- 如何全面控制区块链上数据的“读”权限
来源 | FISCO BCOS开源社区 责编 | Carol 经常有人问到一个问题:"怎么在合约里实现链上数据的读取权限?" 这样的需求背后,是开发者想把一些数据上链,让智 ...
- 给未来写封信app服务器维护中,App Store 上的“给未来写封信”
『 给未来写封信 』 超千万下载的互联网写信品牌 挑一个风和日暖的周末午后,窝在沙发上 给未来,写封信~ 给自己写信就是一个与自己独处的过程,去看看内心的他在逃避什么,害怕什么,会因为什么而快乐,又在 ...
最新文章
- php回调函数求1+2+3+...+100的值_PHP全栈学习笔记6
- 谈自由,ASP.NET Core才是未来?
- 窄带语谱图c语言算法,MELP语音编码算法实现及算法改进
- android开源2016_2016年开源年鉴:现在提供印刷版
- 证书服务器web注册,无法通过 Web 注册请求证书 - Windows Server | Microsoft Docs
- js跨域的理解与实现
- plus.webview.create( url, id, styles, extras )参数及说明
- Java线程基础(二)
- Atitit 管理plus 的概念,为什么要留长发与管理思想的结合 目录 1.1. 孝道的体现 身体发肤 受之发肤 不敢毁伤 出自	1 1.2. 著作介绍	1 1.3. 传统国学文化的复兴 中国
- 第一阶段冲刺阶段项目总结
- 只需要这三个步骤让你轻松搞定Maya中贴hdr贴图
- 获取本地视频url的方法
- 如何去除win 10右键菜单的“使用skype共享”
- Excel正确输入身份证号码
- 为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?
- 快速了解区块链六大特点
- 数据的力量 驰援疫情丨对抗新型肺炎,志愿者招募
- Layer Tree 绘制
- 用python操作浏览器的三种方式,详细介绍并附代码
- 【prometheus】计算CPU使用率