/*** @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总线上数据的读、写。相关推荐

  1. SCL 和 SDA 是 I2C 总线上的两个信号线。 c++ 模拟数据

    I2C(Inter-Integrated Circuit,又称为 IIC 或 TWI)是一种串行通信协议,用于在微控制器和外围设备之间进行数据传输.I2C 协议只需要两根信号线:SCL(时钟线)和 S ...

  2. 10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据

    10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据.

  3. 初学24CXX系列EEPROM使用详解STM32库函数I2C总线

    24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存 ...

  4. arm linux i2c 总线驱动,ARM-Linux中I2C总线驱动开发

    摘  要: 针对I2C总线的特点,Linux内核中定义了I2C驱动体系结构.在分析Linux的I2C总线驱动体系结构基础上,介绍了在S3C2410中设计I2C总线驱动的方法. 关键词: ARM-Lin ...

  5. IIC(I2C)总线上的设备其地址如何定义?通俗易懂

    IIC(I2C)总线上的设备其地址如何定义? IIC总线 一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等. I2C肯定是2线的(不算地线). I2C协议确实很科学,比3/ ...

  6. 51单片机对I2C总线上挂接多个AT24C02的读写操作+Proteus仿真

    51单片机对I2C总线上挂接多个AT24C02的读写操作+Proteus仿真 Proteus仿真图 实例代码 //对I2C总线上挂接多个AT24C02的读写操作 #include <reg51. ...

  7. arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据

    撑腰会儿:I2C通信协议介绍​zhuanlan.zhihu.com 上文介绍了I2C协议的基本结构,今天,使用STM32和LM75A温度传感器来实现I2C读取信息. 首先,为了使用I2C读取传感器测量 ...

  8. 如何全面控制区块链上数据的“读”权限

    ‍‍ 来源 |  FISCO BCOS开源社区 责编 | Carol 经常有人问到一个问题:"怎么在合约里实现链上数据的读取权限?" 这样的需求背后,是开发者想把一些数据上链,让智 ...

  9. 给未来写封信app服务器维护中,‎App Store 上的“给未来写封信”

    『 给未来写封信 』 超千万下载的互联网写信品牌 挑一个风和日暖的周末午后,窝在沙发上 给未来,写封信~ 给自己写信就是一个与自己独处的过程,去看看内心的他在逃避什么,害怕什么,会因为什么而快乐,又在 ...

最新文章

  1. php回调函数求1+2+3+...+100的值_PHP全栈学习笔记6
  2. 谈自由,ASP.NET Core才是未来?
  3. 窄带语谱图c语言算法,MELP语音编码算法实现及算法改进
  4. android开源2016_2016年开源年鉴:现在提供印刷版
  5. 证书服务器web注册,无法通过 Web 注册请求证书 - Windows Server | Microsoft Docs
  6. js跨域的理解与实现
  7. plus.webview.create( url, id, styles, extras )参数及说明
  8. Java线程基础(二)
  9. Atitit 管理plus 的概念,为什么要留长发与管理思想的结合 目录 1.1. 孝道的体现 身体发肤 受之发肤 不敢毁伤 出自 1 1.2. 著作介绍 1 1.3. 传统国学文化的复兴 中国
  10. 第一阶段冲刺阶段项目总结
  11. 只需要这三个步骤让你轻松搞定Maya中贴hdr贴图
  12. 获取本地视频url的方法
  13. 如何去除win 10右键菜单的“使用skype共享”
  14. Excel正确输入身份证号码
  15. 为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?
  16. 快速了解区块链六大特点
  17. 数据的力量 驰援疫情丨对抗新型肺炎,志愿者招募
  18. Layer Tree 绘制
  19. 用python操作浏览器的三种方式,详细介绍并附代码
  20. 【prometheus】计算CPU使用率

热门文章

  1. Shell脚本基本命令4
  2. Leetcode 912. Sort an Array
  3. ASP.NET Core 认证与授权[2]:Cookie认证
  4. BZOJ.3257.树的难题(树形DP)
  5. 如何改变数据库存储引擎
  6. mount windows目录
  7. oracle去重等基础问题
  8. 分页数据的新展示方式---瀑布流
  9. stm32_CAN总线知识
  10. PHP中spl_autoload_register()函数用法实例详解