基于使用STM8单片机I2C方式实现读写操作

发布者:Qinghua2022最新更新时间:2020-08-11 来源: elecfans关键字:STM8  单片机  I2C方式  读写操作 手机看文章 扫描二维码
随时随地手机看文章

STM8硬件I2C知识

STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz)或快速(最高400kHz)的I2C总线。

基于使用STM8单片机I2C方式实现读写操作

1.I2C的4种模式

● 从设备发送模式

● 从设备接收模式

● 主设备发送模式

● 主设备接收模式

2.I2C的主要特点

● 并行总线/I2C总线协议转换器

● 多主机功能:该模块既可做主设备也可做从设备

●I2C主设备功能

─ 产生起始和停止信号

●I2C从设备功能

─ 可编程的I2C 地址检测

─ 停止位检测

● 产生和检测7位/10位地址和广播呼叫

● 支持不同的通讯速度

─ 标准速度(最高 100 kHz)

─ 快速(最高 400 kHz)

● 状态标志:

─ 发送器/接收器模式标志

─I2C 总线忙标志

─ 主模式时的仲裁失败

─ 地址/数据传输后的应答(ACK)错误

─ 检测到错误的起始或停止条件

─ 禁止时钟展宽功能时数据过载或欠载

●3种中断

─1 个通讯中断

─1 个出错中断

─1 个唤醒中断

● 唤醒功能

─ 从模式下如果检测到地址匹配可以将MCU 从低功耗模式中唤醒

● 可选的时钟展宽功能

3.主模式所要求的操作顺序

● 在I2C_FREQR寄存器中设定该模块的输入时钟以产生正确的时序

● 配置时钟控制寄存器

● 配置上升时间寄存器

● 编程I2C_CR1寄存器启动外设

● 置I2C_CR1寄存器中的START位为1,产生起始条件

●I2C模块的输入时钟频率必须至少是:

● 标准模式下为:1MHz

● 快速模式下为:4MHz

软件工程源代码1.关于工程

本文提供的工程代码是基于前面软件工程“STM8S-A04_UART基本收发数据”增加I2C接口修改而来。读写EEPROM的方式和之前“模拟I2C读写”的方式不一样。

2.硬件I2C初始化

void I2C_Initializes(void)

{

CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);

I2C_Cmd(ENABLE);

I2C_Init(I2C_SPEED, I2C_SLAVE_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR,

I2C_ADDMODE_7BIT, 16);

}

I2C_SPEED:I2C速度,一般是100K - 400K

I2C_SLAVE_ADDRESS7:从设备地址,作为主设备时,这个地址不起作用。

I2C_DUTYCYCLE_2:快速模式

I2C_ACK_CURR:应答

I2C_ADDMODE_7BIT:设备地址位数

16:输入时钟(单位M)

3.EEPROM_WriteByte写一字节

写一字节分为5个步骤:

void EEPROM_WriteByte(uint16_t Addr, uint8_t Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.开始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.设备地址/写 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.数据地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr》》8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.写一字节数据 */

I2C_SendData(Data);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/* 5.停止 */

I2C_GenerateSTOP(ENABLE);

}

4.EEPROM_ReadByte读一字节

读一字节比写一字节多了2个步骤,原因是读的时候多写地址到读数据这个切换过程。

void EEPROM_ReadByte(uint16_t Addr, uint8_t *Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.开始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.设备地址/写 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.数据地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr》》8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.重新开始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 5.设备地址/读 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_RX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

/* 6.读一字节数据 */

I2C_AcknowledgeConfig(I2C_ACK_NONE);

while(I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY) == RESET);

*Data = I2C_ReceiveData();

/* 7.停止 */

I2C_GenerateSTOP(ENABLE);

}

关键字:STM8  单片机  I2C方式  读写操作 引用地址: 基于使用STM8单片机I2C方式实现读写操作

上一篇:关于STM8S低功耗电源管理
下一篇:浅析STVD(COSMIC)定义变量及其位定义

推荐阅读最新更新时间:2024-11-01 20:16

HT46RU24设计的出租车计价器方案
1 系统硬件组成     总体结构如图一所示。硬件上主要由HT46RU24单片机,霍尔传感器,空载开关,键盘电路,数据存储电路,时钟电路,显示电路,蜂鸣器,IC卡电路以及串口电路组成。 1.1  HT46RU24单片机。     HT46RU24单片机是HOLTEK公司研制的一种低功耗,高性能的8位单片机。它的ROM为8k*16、RAM为384 bytes,最多有40个双向IO口。除此之外它还具有8通道12位分辨率的A/D转换,A/D转换可用来监测外部模拟信号,如侦测电池电压、电流、温度、湿度、压力、明暗度等。提供两种模式的PWM输出可应用于控温、调速、定电压、定电流等。可控的PFD输出用于发声,或是红外线传输的载波信号
[嵌入式]
单片机水塔控制系统
功能:单片机智能控制水塔系统,实时检测水塔水位,并能实时显示,自动控制继电器和电机使水位保持在黑水瓶 仿真图如下所示 程序参考C语言源代码如下: #include reg51.h //定义一个数组,使数码管显示的数字和数组元素的下标相等 unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; sbit shuiman=P1^0;//水满 sbit sw5=P1^1;//水位5 sbit sw4=P1^2;//水位4 sbit sw3=P1^3;//水位3 sbit sw2=P1^4;//水位2 sbit sw1=P1
[单片机]
<font color='red'>单片机</font>水塔控制系统
单片机中使用printf打印浮点数问题
对于单片机,处理能力有限,我使用stm32直接使用printf函数(当然printf使用串口方式),直接使用printf(“xxxx=%f”,xxxx),打印出来的数据时一大长串乱七八糟的数据,在实时性较强的应用中,一般自己编写处理程序,现在的问题是:怎么样更方便快速地将浮点数输出到显示器件上。 按照网上网友的方式,将小数提炼出来是个好办法: void PrintFloat(float value) { int tmp,tmp1,tmp2; tmp = (int)value; tmp1=(int)((value-tmp)*10)%10; tmp2=(int)((value-tmp)*100)%10; p
[单片机]
MSP430系列单片机复位电路系统设计分析
  0 引言   TI公司的混合信号处理器MSP430系列单片机以其处理能力强大、外围器件集成度高、功率消耗低、产品系列全面、全系列工业级等特点,作为目前MCU主流市场的产品之一,在电子应用领域中得到广泛应用,被越来越多的电子设计师所青睐。由于复位电路设计问题而导致的系统出现上电后不工作或状态不正确是很多MSP430单片机电路设计者们在设计、调试和应用中曾遇到过的问题,尽管这种情况发生的几率很低,但对于可靠性要求较高的应用场合,这个现象仍需引起电子设计人员的足够重视。   为此,本文对MSP430全系列单片机的复位系统和复位机制进行了详细深入的分析,并针对性地提出了具体的外围复位电路设计方案和有关电子元器件的详细介绍,以供同行
[单片机]
基于单片机的三相电源相序控制设计
一、引言 在工业快速发展的今天,三相电源作为工控系统的最直接能源来源其突出作用是显而易见的,因此,对其进行合理的逻辑指示控制显得尤为重要。在传统工业控制中,我们强调的是确保外部电源相序接线的准确性,否则将会出现生产事故,这无疑对我们的操作增添了较高要求。而本设计通过单片机编程用直观的逻辑状态较清楚地显示了对三相电源的指示,电源相序控制选择,实际被测电源相序指示,电源断相等功能。它适用于在额定电源电压为380V的三相四线系统中。在控制过程中,它对于电机反向运转造成的机械故障和人生伤害以及电源缺相运行等危险操作具有快速检测和保护功能。另外,该控制器可广泛用于配电柜、动力箱、开关箱、和电器控制箱。由于其还具有体积小的特点,因此,特别
[单片机]
基于<font color='red'>单片机</font>的三相电源相序控制设计
瑞萨电子 32位MCU在伺服电机中的应用
在伺服系统中,由于交流永磁同步电机具备十分优良的低速性能、可以实现弱磁高速控制,调速范围宽广、动态特性和效率都很高,已经成为伺服系统的主流之选。目前永磁同步交流伺服技术已成为工业自动化的支撑技术之一。 本文以瑞萨电子 32位变频用MCU V850E/IX3 UPD70F3454为例,阐述其在交流伺服系统中的应用。 关于瑞萨电子UPD70F3454 UPD70F3454是瑞萨电子开发的用于变频控制的32位高性能MCU,使用V850核、RISC架构、5级流水线、内置DSP功能、最大64MHZ,内置256K flash ROM及相关外围功能,例如DMA控制器,定时器/计数器,串行接口UART、SPI、IIC,A/D,总线
[工业控制]
单片机用作通用红外遥控接收器的设计
    摘要: 简单介绍红外遥控接收系统原理,给出用8051作遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括解码系统配置及接口、软件设计要点及中断服务程序。     关键词: 8051 红外遥控 遥控码 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/
[应用]
单片机与数字电台的串行通信
一般的数字采集系统,是通过传感器将捕捉的现场信号转换为电信号,经模/数转换器ADC采样、量化、编码后,为成数字信号,存入数据存储器,或送给微处理器,或通过无线方式将数据发送给接收端进行处理。无线数据传输系统就是 样一套利用无线手段,将采集的数据由测量站发送到主控站的设备。 PTR2000是一种短程无线通信技术。本文给出了一种基于PTR2000技术的温度检测系统的硬件电路原理框图和通信程序流程图。本文以一远程温度检测系统为例,详细讲解了基于单片机无线数据传输技术的应用。本系统由温度检测单元,发送单元和接收单元构成,发送单元的MCU连接温度传感器,检测远程温度,处理后,通过无线数据收发模块PTR 2000发送给接收单元的PTR 200
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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