历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2018年09月11日 | STM32中I2C总线上数据的读、写。

2018-09-11 来源:eefocus


/**

  * @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;

}


推荐阅读

史海拾趣

Diode Laser Concepts公司的发展小趣事

Diode Laser Concepts公司始终关注社会责任,积极参与各类公益活动。公司定期向贫困地区捐赠教育设备和资金,支持当地的教育事业发展;同时,公司还组织员工参与环保志愿活动,宣传环保理念,为保护地球环境贡献一份力量。这些公益活动不仅体现了公司的社会责任感,也增强了员工之间的凝聚力和向心力。

Dover Corporation公司的发展小趣事

为了进一步扩大市场份额,Dover Corporation积极推进国际化布局。公司通过与国际、国内投行及私募基金的合作,成功收购了多家海外公司,实现了业务的全球化。这些收购不仅为Dover带来了更多的市场机会,也增强了其在全球市场中的竞争力。

中环(Central)公司的发展小趣事

随着公司业务的不断拓展,中环在保持主业优势的同时,也积极开展多元化发展。2014年,公司开始开展光伏电站开发业务,进一步延伸了产业链。同时,公司还成立了东方环晟,开拓了组件业务。这些举措不仅为公司带来了新的增长点,也增强了其综合竞争力。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

近年来,电子行业面临着技术升级、市场变革等多重挑战。AMICC积极应对这些挑战,不断调整战略和业务模式。公司加大了对新兴技术的研发投入,加快了产品更新换代的速度。同时,AMICC还加强了与产业链上下游企业的合作,共同应对市场变化。这些措施使AMICC在行业中保持了领先地位,实现了持续稳健的发展。

Cogent_Computer_Systems公司的发展小趣事

随着国内市场的逐渐饱和,Cogent_Computer_Systems公司开始将目光投向海外市场。公司制定了一系列国际化战略,包括参加国际电子展会、建立海外销售网络、拓展国际合作伙伴等。这些举措使得公司的产品和服务逐渐走向全球,赢得了更多国际客户的认可。国际化战略的实施不仅拓宽了公司的市场版图,也提升了公司的品牌影响力和国际竞争力。

Advanced Technology Corp公司的发展小趣事

ATC公司深知质量管理对于企业发展的重要性。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等环节都进行严格控制。此外,ATC公司还注重员工的培训和教育,提升员工的质量意识和技能水平。这些措施确保了ATC公司产品的稳定性和可靠性,赢得了客户的信任和好评。

问答坊 | AI 解惑

[推荐]基于UC3842的开关电源保护电路的改进(3)

3 保护电路的改进  针对上述分析,改进电路如图3所示,该电路具有以下特点。 1)通过在UC3842的采样电压处接入一个射极跟随器,从而在控制电压上增加了一个与脉宽调制时钟同步的人为斜坡,它可以在后续的周期内将△I扰动减小到零。因此,即使系统 ...…

查看全部问答>

Arm—DSP—FPGA的比较

ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处 ...…

查看全部问答>

最近我想做个血糖仪不知道哪位大侠做过呢?

最近我想做个血糖仪不知道哪位大侠做过呢?…

查看全部问答>

跟我学模拟电路

这是一本入门经典教材…

查看全部问答>

5.8GHz RFID之射頻前端接收器設計

系統編號 : 094STUT0428039出版年 : 95 研究生: 施銘憲 論文名稱 : 5.8GHz RFID之射頻前端接收器設計指導教授 : 陳文山學位類別 : 碩士校院名稱 : 南台科技大學系所名稱 : 電子工程系 學號 : M9330202學年度 : 94 語文別 : 中文 論文頁數 : 77 …

查看全部问答>

MC34063廉价的DC/DC变换器

DC/DC变换器控制电路                            34063是一单片双极型线性集成电路 专用于直流直流变换器控制部分 片内包含有温度补偿带隙基准源一 ...…

查看全部问答>

最超值的NRF905-CC11000-红外线综合开发板JASK2000

最超值的NRF905-CC11000-红外线综合开发板JASK2000 JASK2000开发系统     集成当前433频段最主流无线收IC :NRF905 ,CC1100及红外收发器,相信掌握这3款无线收发器原理及应用对大家在无线应用开发领域奠定扎实基础.我公司提供全面技术支 ...…

查看全部问答>

北京哪有卖非接触式ic卡读卡器的?

北京哪有卖非接触式ic卡读卡器的? 我是大学生,只要买一个便宜的用作项目研究。 谢谢大家了…

查看全部问答>

请问通过超级终端发送AT命令发短信的问题

请问一下,我用W880I在UDP模式下发短信(不支持TEXT模式),输入了AT+CMGS之后,在提示符下输入了类似下面的信息: at+cmgs=21 > 089168XXXXXXXXXXXX11000D91683118405057F000000006C8329BFD0E01  X部分为我的手机号码+F,经过两两对换的 但 ...…

查看全部问答>

PCI9054

谁能介绍以下PCI9054的情况!它是不是有自己的上层软件的接口函数什么的?如何进行VC++的总线编程?谢谢!…

查看全部问答>