STM8 中I2C读写函数

发布者:钱币之歌最新更新时间:2020-09-07 来源: eefocus关键字:STM8  I2C  读写函数 手机看文章 扫描二维码
随时随地手机看文章

void I2C_write(u8 Addr, u8 *WriteData, u8 length)

{

  /* Send STRAT condition */

  I2C_GenerateSTART(ENABLE);

  /* Test on EV5 and clear it */

  while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); 

  /* Send EEPROM address for write */

  I2C_Send7bitAddress(Addr, I2C_DIRECTION_TX);  

  /* Test on EV6 and clear it */

  while(!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));

   I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add   

  for(int i = 0; i  {

    I2C_SendData(WriteData[i]); 

    /* Test on EV8 and clear it */

    while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING));    

  }  

  /* Send STOP condition */

  I2C_GenerateSTOP(ENABLE);  

}


void I2C_Read(u8* pBuffer, u8 ReadAddr, u8 NumByteToRead)

{    

 while(I2C->SR3&0x02);

 I2C->CR2 |= 0x01;

 while(!(I2C->SR1 & 0x01));

 I2C->DR = ReadAddr;

 while(!(I2C->SR1 & 0x02)); 

 I2C->SR1; 

 I2C->SR3;

 while(NumByteToRead)  

{

  if(NumByteToRead == 1) 

    {

      I2C->CR2 &= ~0x04; 

      I2C->CR2 |= 0x02; 

    }  

    if(I2C->SR1 & 0x40)

    {   

      *pBuffer=I2C->DR;

       pBuffer++;  

       NumByteToRead--;        

    }      

  }   

  I2C->CR2 |= 0x04;

}


关键字:STM8  I2C  读写函数 引用地址:STM8 中I2C读写函数

上一篇:STM8 低功耗时钟管理
下一篇:STM8时基单元

推荐阅读最新更新时间:2024-11-10 16:07

STM8学习笔记(一) 建立第一个工程
按照所学教程(青风电子)建立第一STM8工程,出现如下错误。 出现:Fatal Error : cannot open source file stm8s_gpio.h D:stm8testdriverled.h 16 找不到头文件。 解决:修改头文件路径。原路径为: 原路径为: $PROJ_DIR$..libinc $PROJ_DIR$..libsrc $PROJ_DIR$..user $PROJ_DIR$..\driver 修改为:$PROJ_DIR$..libinc $PROJ_DIR$libsrc $PROJ_DIR$user $PROJ_DIR$driver 因为我将工程文件建立在整个工程文件
[单片机]
<font color='red'>STM8</font>学习笔记(一) 建立第一个工程
KST-STM学习之I2C+SPI
只能说跟51的差不了多少,在这里仅仅记录下主要注意事项吧。 1、I 2 C 通信分为标准模式 100kbit/s、快速模式 400kbit/s 和高速模式 3.4Mbit/s。因为所有的I 2 C 器件都支持标准模式,但却未必支持另外两种速度。 所以作为通用的 I 2 C 程序我们选择100k 这个速率来实现,也就是说实际程序产生的时序必须小于等于 100k 的时序参数,有特殊速度需求的器件再针对性写高速通信程序。 2、I 2 C 引脚属于开漏并联结构,并且 STM32 的 GPIO 端口引脚设置为开漏输出时,可以直接从输入数据寄存器获取 I/O 电平状态,因此将 I 2 C 引脚配置为开漏输出模式。 3、由于 I
[单片机]
KST-STM学习之I2C+SPI
elmos推出具备I2C总线接口的双天线电源芯片
         德国多特蒙德,艾尔默斯公司(elmos)日前宣布推出一种紧凑型封装的汽车级双天线电源保护芯片。该芯片为天线系统提供静电保护(ESD保护)以及电源对地/电池的短路保护,同时该芯片具备过热保护的功能。通过I2C总线接口,可以非常方便的通过两根数据线对多个不同的器件进行寻址。该芯片采用QFN20L5封装。       该芯片可以用在输入电压从4.5V-25V的天线应用中。芯片把输出端的电压通过电阻分压,然后反馈到芯片内部作为调整的依据,可以独立地输出两路电源,电压范围从3.3 V直至至VBat。       采用QFN的封装形式,使得芯片体积可以做的很小,但却具有全面的诊断功能。由于它采用I2C接口和8位ADC
[电源管理]
elmos推出具备<font color='red'>I2C</font>总线接口的双天线电源芯片
STM23模拟I2C读写
都说STM32的I2C有问题,不好用。我之前,在论坛上看到了Mcuplayer分享的一段代码,拿来测试了一下,读写正常,心想还挺不错。 但是等到真正做程序时,发现总是在while()循环处等待。无奈,只好用软件模拟I2C。 从网上找了一段程序,发现好多地方下载的代码都一样的。 代码如下: #i nclude includes.h #i nclude 24cxx.h #define ADDR_24CXX 0xA0 #define SCLH GPIOB- BSRR = GPIO_Pin_6 #define SCLL GPIOB- BRR = GPIO_Pin_6 #define S
[单片机]
STM8库编程笔记之时钟管理
库函数学习笔记之 相关函数: void CLK_DeInit(void); void CLK_HSECmd(FunctionalState NewState); void CLK_HSICmd(FunctionalState NewState); void CLK_LSICmd(FunctionalState NewState); void CLK_CCOCmd(FunctionalState NewState); void CLK_ClockSwitchCmd(FunctionalState NewState); void CLK_FastHaltWakeUpCmd(FunctionalState NewState); void
[单片机]
stm单片机型号的意义 stm8和stm32的烧写程序的区别 stm8读取程序
stm单片机型号的意义 STM单片机型号一般由几个部分组成,每个部分都代表着不同的意义: 第一部分:STM或STM32或STM8,代表单片机的品牌和系列。STM32系列是基于ARM Cortex-M内核的单片机系列,而STM8系列则是基于ST8内核的单片机系列。 第二部分:数字,代表单片机的性能等级,数字越高代表性能越高,功能也更加强大。例如,在STM32系列中,STM32F0代表基本型号,STM32F1代表通用型号,STM32F2代表高性能型号,STM32F3代表模拟型号,STM32F4代表高性能数字信号控制型号等。 第三部分:字母,代表单片机的特性和功能。例如,在STM32F4系列中,H代表高速器件,C代表低功耗器件,E代
[单片机]
SWIM接口及STM8烧录过程
1. 硬件连接 SWIM接口只需要一根传输线,即可完成双向的传输。传输过程,都是由主控制端(host)发起,设备端然后做出反应。host端需要在一个总线上实现读和写,那就是说必须要同时接一个输出IO和一个输入IO(也可以用同一个,开漏的情况下,IO可以同时读写),且输出IO必须设计成开漏,总线上挂接上拉电阻,以便随时交出控制权。硬件连接如下: 上图SWIM_IN为输入IO,SWIM为输出IO。 2. 编码格式 SWIM协议使用归零码,且支持两种速率。 高速模式 低速模式 这两种模式都是使用8M的clock同步(上图中的箭头)。高速模式下,2个低电平加8个高电平表示1;8个低电平加2个高电平表示0。低
[单片机]
SWIM接口及<font color='red'>STM8</font>烧录过程
stm8 tim4 测速显示
/******************************************************************* 实验名称及内容:PWM测速度并显示 配套书籍:《深入浅出STM8单片机入门、进阶与应用实例》《STM8实战》 实验平台及编程人员:骨灰级菜鸟 / #include iostm8s208mb.h //主控芯片的头文件 #include “stdio.h” /端口/引脚定义/ #define LCDRS_SET PF_ODR|=0x01 //置位PF0 #define LCDRS_CLR PF_ODR&=0xFE //清0PF0 #define LCDRW_SET PF_ODR|=0x0
[单片机]
<font color='red'>stm8</font> tim4 测速显示
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved