STM32中I2C总线上数据的读、写。

发布者:reaper2009最新更新时间:2018-09-11 来源: eefocus关键字: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_Write

  I2C_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

  {

    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

  {

    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总线  数据 引用地址:STM32中I2C总线上数据的读、写。

上一篇:STM32学习笔记之EXTI(外部中断)
下一篇:STM32F030控制蜂鸣器定时响和控制LED亮

推荐阅读最新更新时间:2024-03-16 16:13

STM32系列微控制器标准外设库简单介绍
ST为了普及旗下产品,发布包括标准外设库在内的众多支持软件,有效降低开发门槛。作者使用ST的标准外设库大概两年时间,在这里介绍何为外设库: 外设库,是支持片上外设的函数,数据结构和宏的集合。外设库的精髓在于初始化结构体和初始化函数的配合使用,把外设的各类工作参数赋予初始化结构体,然后调用初始化函数将这些参数写入外设寄存器,完成外设的初始化。 外设库提供大量的状态获取,中断控制等函数,它们进行必要的检查之后,再操作外设,安全高效。 在开发过程中,程序员会频繁地从某个外设接收数据或者向某个外设发送数据,介于此外设库把这些函数全部封装完毕,格式统一,便于使用。 针对初学者,以下几个地方易错: 启动文件和外设头文件里面的MC
[单片机]
为了让世界杯更好看,赛场上引入了哪些黑科技?
在过去的世界杯,“黑手、黑哨”让狂放的赛场不那么干净,此外,受限于场地的原因,以往的足球赛事判决往往都由场内跟跑的唯一主裁判来决定,也因此足球赛场上经常会因为判决有歧义而导致一番争执。但在本届世界杯,将引用一系列黑科技来保证判决的公正性。 四年一度的足球盛宴今晚就要开始了,在黑科技横行的当代,今年的俄罗斯世界杯上又将出现哪些黑科技看点呢? AI即将取代裁判? 本届世界杯,为了保证判决的公正性,本届世界杯将首次引入 VAR(Video Assistant Referee)即视频裁判助理技术,这还是世界杯上首次采用机器来帮助判决。 VAR技术又名视频助理裁判技术,即通过视频助理裁判员和配套装备、流程、规范等在内的一整套辅助判罚系统,
[安防电子]
STM32 USB DFU固件升级必读
升级代码工程须知 建立好工程后,需要做以下几步处理: 1、首先点击编译器的”Target Option” ,然后选择Target选项,设置”Read/Only Memory Areas”域的on-chip下的IROM1,修改下载起始地址及大小。我们这里使用0x0800500地址: 2、接下需要在程序的开始重映射下中断向量表到我们开始的代码出,即在main()函数一开始添加:NVIC_SetVectorTable(0x08005000, 0x0);这句话。 DFU File Maneger使用说明 下面要制作升级文件。点击DFU File Manager软件,就会出现下面的界面: 我们选择第一个:I wan
[单片机]
<font color='red'>STM32</font> USB DFU固件升级必读
苹果公布iOS 15关键数据:更新率近90% 快升级
为了迎接即将到来的iOS 16,苹果更新了iOS 15普及率数据,上次更新还是今年1月。5 个月过去了,在过去四年推出的设备中,iOS 15的普及率达89%,iOS 14的普及率仍然有10%,1%为较早版本。 今年1月之后,苹果发布了多个 iOS 15 更新,其中最重要的就是支持在佩戴口罩时使用面容ID的 iOS 15.4,这个提升也是引来不少用户纷纷选择升级。 在 iPad 方面,在过去四年推出的设备中,iPadOS 15的普及率达79%。18%仍然使用iPadOS 14。3%为较早版本。所有的设备中,iPadOS 15的普及率达72%,18% 仍然使用iPadOS 14。10%为较早版本。 在这之前,移动数据公司Mix
[手机便携]
苹果公布iOS 15关键<font color='red'>数据</font>:更新率近90% 快升级
使用STM32调试FMSDR模块及解调FM电台(3)
3. 调试8027使其发出单音FM信号 3.1 输出24Mhz和验证I2C接口 1. 硬件连接 将FM_SDR板卡和STM32H750开发板连接。 本文中所有例子中我们都仅给MSI001使用天线,因为QN8027离得很近,发射端不需要使用天线 本程序中操作的管脚如下描述: 2. PWM输出24MHz QN8027芯片需要输入24MHz的时钟作为参考信号,在这里通过STM32H750的TIMER2产生24M的方波,提供给QN8027作为输入参考信号。 PWM信号的关键参数是频率和占空比,我们分别看一下如何设定TIM2来确定输出PWM的频率和占空比: PWM的输出频率=计数器计数频率/(计数器的计数上限+1),计数器计数频
[单片机]
使用<font color='red'>STM32</font>调试FMSDR模块及解调FM电台(3)
STM32单片机ISP烧写
一般学生比较少遇到,但开始工作,进行软件开发时,会遇到各种“匪夷所思”的问题不过,慢慢积累就能对硬件、软件有一定了解,能让你很快的精通! 在使用stm32f103系列的mcu时,当时还在学校的时候用的jtag(盗版)烧写,对烧写引脚没有那么关注(反正能烧写就行)但是到了企业工作后,发现一般只使用4个引脚烧写——就是所谓的SWD模式只需要4根引脚(VCC、GND、SWCLK、SWDATA)之所以只留四个接口是因为可以将芯片做的更小,设备更小!并且有时候mcu的JTAG调试接口会被当成普通IO口来使用,因此就需要使用管脚复用功能,一旦复用,就要小心!!!当你把烧写接口复用后,能写进去,但是就不能再烧写了! 因此步入主题——IS
[单片机]
基于STM32与机智云的智能蜡疗机
摘要: 随着物理疗法在慢病治疗中的效果获得认可, 传统的石蜡疗法被广泛应用在医院的理疗科。目前, 蜡疗机的制蜡方法虽已趋于成熟, 但仍存在制蜡效率低下、功耗大、不够智能等问题, 因此有必要对蜡疗机的制蜡效率及智能化程度进行研究。以STM32微控制器为核心, 结合G510通信模块, 对蜡疗机的硬件系统进行优化设计;通过机智云物联网开发技术, 对蜡疗机进行控制和通信。 试验结果表明, 与现有产品相比, 该系统减少了制蜡时间、降低了蜡疗机的功耗, 实现了蜡疗机的物联网控制。该研究为进一步完善蜡疗机的功效提供了设备基础, 对蜡疗机的广泛应用具有积极促进作用, 对今后利用石蜡疗法进行理疗大数据的挖掘与应用具有重要意义。 0 引言 经
[单片机]
基于<font color='red'>STM32</font>与机智云的智能蜡疗机
用虚拟I2C总线技术实现SAA7111的初始化
摘要:介绍了虚拟I2C总线技术的特点,描述了用单片机(C51)的普通I/O口以及对DSP(TMS320VC5402)的McBSP口和HPI-8口模拟I2C总线接口的设计方案,最后给出了对SAA7111进行初始化的方法。 关键词:虚拟I2C总线技术;SAA7111;DSP;I2C总线 SAA7111是Philips半导体公司生产的一种视频输入处理器(VIP),在视频采集系统中,通常需要诸如SAA7111之类的视频解码器作为模拟视频前端,而视频解码器的初始化主要通过I2C总线接口来完成。然而,目前的单片机和DSP器件大多都不带有I2C总线接口,为此,本文提出了用虚拟总线技术来模拟实现I2C总线功能,利用DSP的多功能I/O口和单
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved